Lösungsansatz gesucht: Abhängiges Port-Forwarding

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
MrNiceTry
User
Beiträge: 80
Registriert: Samstag 7. November 2009, 10:32

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
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

http://www.apsis.ch/pound/ ist für genau sowas da.
Bottle: Micro Web Framework + Development Blog
MrNiceTry
User
Beiträge: 80
Registriert: Samstag 7. November 2009, 10:32

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?
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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:~$
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
MrNiceTry
User
Beiträge: 80
Registriert: Samstag 7. November 2009, 10:32

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
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Nein, nur Sachen die "im Kern" HTTP sind. IPP vermutlich schon, SSH sicherlich nicht.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten