PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Umleiten oder Umlegen einer Verbindung hinter einem Router (NAT)



MrBobble
17.11.07, 13:37
Hi,
Ich habe ein meiner Meinung nach etwas exotisches Problem.
Server1 und Server2 befinden sich hinter einem T-Com Router (mit DSL-Modem, NAT).
Es handelt sich um HTTP Server.
Alle Anfragen aus dem Internet die an Port 80 des Routers gehen werden auf den Server1 geleitet.
Ist es möglich, dass Server1 die Anfrage umleitet und an Server2 übergibt, so dass dieser letztendlich einen Socket zu dem Client aus dem Internet, der die Anfrage gestellt hat öffnet?
Ziel wäre es, dass dann Server2 mit dem Client kommuniziert ohne, dass der Datenverkehr über den Server 1 läuft.
Die einfachste Lösung wäre es z.B. Port 81 in den Routereinstellungen auf Server2 zu leiten, während Server1 den Client anweist, die Seite auf routeradresse:81 aufzurufen. Allerdings müsste dann jeder Server einen eigenen Port haben. Außerdem würde dieser HTTP-Redirect Zeit verbrauchen.
Eine mögliche Lösung, die ich mir ausgedacht habe (und ich habe keine Ahnung ob das funktionieren würde), wäre dass Server1 die Anfrage die er vom Client bekommen hat nochmal im Ethernet hinter dem Router abschickt und dabei die Ziel Adresse der TCP/IP Pakete, die zur Anfrage gehören mit der MAC Adresse des Server2 vertauscht. Würde dann ein Socket zwischen Server2 und Client geöffnet werden.
Und noch eine dritte mögliche Lösung, die mir eingefallen ist wäre, dass Server1 die eingehende Kommunikation an Server2 weiterleitet, dieser die Anfragen bearbeitet und als Antwort Pakete abschickt, die als Absender Adresse die MAC-Adresse des Server1 tragen.

Server1 arbeitet als ein Dispatcher für HTTP Anfragen. Allerdings ist Server1 ein ganz normaler PC, wie auch alle anderen Server und sollte deshalb nicht den ganzen Datenverkehr der Serverfarm weiterleiten müssen.

Noch eine kleine Erklärung warum das ganze eigentlich...
Ich versuche einen P2P Webserver zu schreiben. Also kleines Szenario: In einem Büro schließen sich alle Büro PCs zusammen und ergeben einen virtuellen Webserver. Vorteil: Man braucht keinen extra Webserver und ein paar PCs laufen immer. Das ganze ist schon viel ausgereifter, aber dieses Firewall Problem mit diesem NAT Zeug ist irgendwie ungünstig....

Also falls irgendjemand irgendwelche Ideen hat, sei es Manipulation des ARP Caches oder ähnlich verrückte Dinge (irgendwie kann man so ziemlich das meiste mit den richtigen Librarys programmieren) oder irgendein anderes Forum kennt wo das hier vielleicht besser reinpasst, ich wäre um jede Antwort dankbar.

Grüße MrBobble

zyrusthc
17.11.07, 14:20
Alle Anfragen aus dem Internet die an Port 80 des Routers gehen werden auf den Server1 geleitet.
Ist es möglich, dass Server1 die Anfrage umleitet und an Server2 übergibt, so dass dieser letztendlich einen Socket zu dem Client aus dem Internet, der die Anfrage gestellt hat öffnet?
Schau dir mal mod_proxy (http://httpd.apache.org/docs/2.0/mod/mod_proxy.html) an!

Greeez Oli

unux
17.11.07, 16:01
Hi,


Ziel wäre es, dass dann Server2 mit dem Client kommuniziert ohne, dass der Datenverkehr über den Server 1 läuft.

Schau dir mal mod_proxy an!

Allerdings nur, wenn das ganze als reverse proxy konfiguriert ist.


n einem Büro schließen sich alle Büro PCs zusammen und ergeben einen virtuellen Webserver. Vorteil: Man braucht keinen extra Webserver und ein paar PCs laufen immer. Das ganze ist schon viel ausgereifter, aber dieses Firewall Problem mit diesem NAT Zeug ist irgendwie ungünstig....

Ich denk, da isn nochn falscher Ansatz. Wenn dein Rechner 1 ausfällt, is kein Web-Server mehr erreichbar. Ich würd an deiner Stelle am Router ansetzen, also dem T-Com Router. Der sollte dann die Verteilung machen.

Greetz UnuX

MrBobble
17.11.07, 16:35
Ich denk, da isn nochn falscher Ansatz. Wenn dein Rechner 1 ausfällt, is kein Web-Server mehr erreichbar. Ich würd an deiner Stelle am Router ansetzen, also dem T-Com Router. Der sollte dann die Verteilung machen.
Greetz UnuX

Das ist ein kleineres Problem. Ich hab ja geschrieben es ist ein wenig ausgereifter :)
Dann werd ich mal mein Gesamtkonzept so wie es im Moment läuft etwas zusammenfassen:
Jeder Computer führt ein Log wann er ausgeschaltet eingeschaltet wie stark belastet ist. Daraus berechnet meine Software die Wahrscheinlichkeit dass der PC für das P2P Netzwerk verfügbar ist. Mithilfe einer Fourier Analyse erkenn ich dann darin Periodizitäten z.B. banal ausgedrückt am Donnerstag wird der PC eine Stunde früher ausgeschaltet ein andere aber dafür eher eingeschaltet usw. Jetzt koordinier ich die mithilfe Uptimes der PC die Serverdienste. z.B. ein virtuelles P2P SMB Filesystem. Der Gesamte Datenbestand der normal auf dem zentralen SMB Server liegen würde wird immer so verteilt, dass immer alle Daten irgendwie auf den im moment eingeschalteten PCs verteilt sind. Im Moment arbeite ich daran die wahrscheinlichkeit (mithilfe von logs) zu bestimmen dass eine bestimmte Datei um eine bestimmte Uhrzeit aufgerufen wird und damit die Verteilung und Redundanz besser hinzukriegen. Und im Falle des Falles kann man einen PC der wichtige Daten hat und sich mein system verkalkuliert hat immer noch per WOL aufwecken.
Die richtigen Probleme sind: Datenschutz, Anonymität. Man muss sich mal vorstellen was das System an Logs macht.
Für den Fall, dass der Dispatcher ausfällt wählt dass P2P system einen neuen Dispatcher (Im moment der PC bei dem die Wahrscheinlichkeit dass er durch User anwendungen voll ausgelastet wird am geringsten ist natürlich noch im Verhältnis zur Rechenleistung-> 486er der nie benutzt wird ist dann wohl ziemlich ungeignet). Der neue dispatcher muss dann den Eintrag im Router ändern. Im moment streit ich mich da noch ein bisschen mit dem Web-interface meines Routers
Also um nochmal zurückzukommen:
Auf jedem PC läuft dann ein Apache der mein virtuelles Filesystem benutzt. Das gestaltet sich noch kompliziert weil solange die webserver nur im dateisystem dinge lesen, gibts kein problem, beim schreiben muss halt dann immer sofort das ganze Netzwerk upgedatet werden damit alles schon synchron bleibt.
Der Dispatcher verfügt dann durch viele Mechanismen über alle relevanten Informationen die er braucht um einen PC zu finden der gerade nichts zu tun hat und eine Anfrage bearbeiten kann. Daher soll dann der eigentliche Verkehr nicht über den dispatcher gehen, weil ich nicht weiß wieviel dann dessen Netzwerkkarte herhalten muss. Es kann auch sein dass reines weiterleiten von Daten nicht wirklich viel an der systemleistung zieht.

@UnuX
Bin immer noch für jeden Kritikpunkt dankbar. Es gibt nämlich tausend möglichkeiten die in so einem "Cluster" schiefgehen können z.B. Splitted Brain Problem. Bin da auch nur durch Zufall draufgekommen.

Ja ich weiß es klingt utopisch, aber da kann wirklich funktionieren. Und man spart sich dadurch im besten fall einen kompletten Dateiserver oder Webserver, der rumsteht und Strom verbraucht und kostet.
Gruß MrBobble

unux
17.11.07, 17:43
Hi,

noch ne frage was is wenn der client ausfällt oder runtergefahren wird, wenn die Daten, nachdem sie verändert worden sind, noch net auf alle anderen Clients gesynct werden? Wennde den dann danach ner per WOL nicht aufwecken kannst, dann haste nen Datenleck. Gut man kann ja alle Rechner nachdem sie hochgefahren wurden und ans Netzwerk angeschlossen wurden, überprüfen ob sie Daten haben, die noch net im verteilten Image hinterlegt sind, das wird aber sehr umfangreich und lahm. Da beim 2. Sync wieder was passieren kann usw.

Naja mal schaun wie weit du kommst.

Greetz UnuX