Seite 1 von 1

Lösungsansatz gesucht: Abhängiges Port-Forwarding

Verfasst: Freitag 20. August 2010, 18:47
von MrNiceTry
Ich bitte um Unterstützung beim Lösungsansatz.


Das Scenario =

Ein Server mit Lan (eth0).
Drei VM's an einen virtuellen Netzwerk. (192.168.122.0)

Aufgabe des Prog's:
Am eth0 eingehende Anfragen je nach URL an eine der drei VM's weiterleiten.
Die Antwort der entsprechenden VM an der Absender / Client über eth0 (zurück)-senden.

Wie packe ich dieses Problem grundlegend an.


MrNiceTry

Re: Lösungsansatz gesucht: Abhängiges Port-Forwarding

Verfasst: Freitag 20. August 2010, 18:59
von gerold
MrNiceTry hat geschrieben:Am eth0 eingehende Anfragen je nach URL an eine der drei VM's weiterleiten.
Die Antwort der entsprechenden VM an der Absender / Client über eth0 (zurück)-senden.
Hallo MrNiceTry!

Falls es sich um HTTP-Anfragen handelt, kannst du den Apache dafür verwenden. Dieser kann mit "Virtuellen Servern" sehr gut umgehen. Der Apache entscheidet anhand der URL (Domäne), welcher "VirtualHost"-Eintrag in der Konfiguration für die Anfrage zuständig ist.

Und für die Weiterleitung kannst du das Apache-Modul mod_proxy verwenden. Damit kannst du die Anfragen intern an eine andere IP-Adresse und Port weiterleiten. Die Rückgabe dieser Anfrage wird dann vom Apachen wieder an den ursprünglichen "Fragesteller" zurück gegeben.

mfg
Gerold
:-)

Re: Lösungsansatz gesucht: Abhängiges Port-Forwarding

Verfasst: Freitag 20. August 2010, 19:02
von Defnull
http://www.apsis.ch/pound/ ist für genau sowas da.

Re: Lösungsansatz gesucht: Abhängiges Port-Forwarding

Verfasst: Freitag 20. August 2010, 20:52
von MrNiceTry
Danke für die Anregungen.

Ich habe jedoch an eine Pythonlösung gedacht.

Ich denke mehr Flexibilität zu haben.

Oder habe ich hier meine Ansprüche an Python zu hoch angesetzt?

Re: Lösungsansatz gesucht: Abhängiges Port-Forwarding

Verfasst: Freitag 20. August 2010, 21:37
von gerold
MrNiceTry hat geschrieben:Oder habe ich hier meine Ansprüche an Python zu hoch angesetzt?
Hallo MrNiceTry!

Natürlich kannst du so etwas auch mit Python programmieren. Ich bin etwas geübt in der Konfiguration des Apachen. So brauche ich für die Installation und Konfiguration eines für diesen Zweck eingerichteten Apachen vielleicht eine viertel Stunde. Das dürfte sich bei der Installation und Konfiguration von Pound sicher in ähnlichen Verhältnissen bewegen. Und beides dürfte hochperformant sein.

Wenn du dir so etwas nachprogrammieren möchtest, dann musst/solltest du auch an Multithreading denken. Sonst könnte/wird es passieren, dass immer nur ein Request nach dem anderen abgearbeitet wird. Dann brauchst du etwas was die Anfrage erkennt und beantwortet. Z.B. SimpleHTTPServer und urllib. Die Anfrage muss jetzt vom Proxy an den externen Server gestellt werden. Z.B. mit httplib. Bis dieses Programm annähernd so performant läuft, wie die bereits existierenden Lösungen, dürfte einige Zeit vergehen.

mfg
Gerold
:-)

PS:
gerold@ubuntu:~$ aptitude show pound
Paket: pound
Neu: ja
Zustand: nicht installiert
Version: 2.4.5-3
Priorität: extra
Bereich: universe/net
Verwalter: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Unkomprimierte Größe: 279k
Hängt ab von: libc6 (>= 2.4), libpcre3 (>= 7.7), libssl0.9.8 (>= 0.9.8f-5)
Beschreibung: reverse proxy, load balancer and HTTPS front-end for Web servers
Pound was developed to enable distributing the load among several Web-servers
and to allow for a convenient SSL wrapper for those Web servers that do not
offer it natively.
Homepage: http://www.apsis.ch/pound/

gerold@ubuntu:~$

Re: Lösungsansatz gesucht: Abhängiges Port-Forwarding

Verfasst: Samstag 21. August 2010, 22:13
von MrNiceTry
Hab Pound mal angeschaut.

Interessant.
Hab zwar noch nicht so ganz verstanden wie es funktioniert, scheint aber vielversprechend.

Was ist mit anderen Protokollen ?
SSH, SIP o.ä. ?

Kann ich die auch mit Pound umleiten ?



MrNiceTry

Re: Lösungsansatz gesucht: Abhängiges Port-Forwarding

Verfasst: Sonntag 22. August 2010, 21:48
von Leonidas
Nein, nur Sachen die "im Kern" HTTP sind. IPP vermutlich schon, SSH sicherlich nicht.