Sven Rautenberg: Bekomme keine öffentliche Verbidung

Beitrag lesen

Moin!

Nein , habe nur eine IP (DSL). habe aber verschiedene xxx.dyndns.org adressen.

Es ist absolut kein Problem, zwei oder mehr verschiedene DNS-Namen auf ein-und-dieselbe IP auflösen zu lassen.

Habe nur XP Prof, Apache lauschen auf Post 80

Das ist das Problem.

Folgendes passiert:
Dein Router macht NAT - Network Adress Translation. Das muß er tun, weil du von deinem Provider nur eine einzige dynamische IP-Adresse aus dem öffentlichen IP-Raum erhälst, du aber hinter dem Router mehr als einen Rechner mit privaten IPs betreibst. Private IPs kann man über das Internet nicht ansprechen, der Router setzt mit NAT die privaten Absenderadressen der Datenverbindungen, die von innen initiiert werden und nach außen gehen, so um, dass diese scheinbar mit deiner einzigen öffentlichen dynamischen IP gestartet wurden. Damit verschiedene Datenverbindungen von deinem einen oder anderen Rechner tatsächlich ohne gegenseitige Störung parallel ablaufen können, werden vom Router unterschiedliche Ports verwendet, anhand derer die auf den Verbindungen wieder hereinkommenden Daten (beispielsweise von anderen, öffentlichen Webservern) intern an den richtigen Rechner zurückgeleitet werden können.

Mit so einem NAT-Router sind alle im dahinter befindlichen Netzwerk existierenden Rechner erstmal komplett UNERREICHBAR!

Weil das für den Betrieb von Servern ungünstig ist, kann man für den UMGEKEHRTEN Datenweg von außen nach innen das sogenannte Portforwarding einrichten. Dazu definiert man einen Port, der von der Internetseite her erreichbar sein soll, und sagt dem Router, auf welchen Port und welche IP des internen Netzes sämtlichen auf diesem Port dann hereinkommenden Daten weitergeleitet werden sollen. Sollte sich zufällig oder absichtlich an dieser Stelle auf dem internen Rechner ein Serverprogramm bereithalten, ist die Kommunikation mit diesem Server möglich. Wenn nicht, werden die Verbindungsversuche halt abgewiesen.

Dein Problem ist jetzt: Du hast zwar zwei verschiedene Namen definiert, aber du kannst diesen Namen ja nur deine einzige dynamische IP zuweisen. Wenn du nun aber einen HTTP-Zugriff auf den einen Namen machst, wird der Browser sich automatisch die IP dieses Namens holen, dann den Port 80 dieser IP konnektieren und schlussendlich die HTTP-Anfrage nach einer Webseite schicken. Der NAT-Router hat definiert gekriegt: Alle Anfragen auf Port 80 bitte zu Server 1 schicken, also wird dieser Server die Anfrage beantworten.

Wenn der Browser den anderen Namen abfragen soll, wird er DIESELBE IP erhalten, wieder Port 80 konnektieren, und dann die HTTP-Anfrage schicken. Der NAT-Router hat definiert gekriegt: Alle Anfragen auf Port 80 bitte zu Server 1 schicken, also wird auch diese Anfrage vom Server 1 beantwortet - und nicht vom Server 2.

Damit du dieses Problem lösen kannst, gibt es diverse Möglichkeiten:

1. Ein weiteres Portforwarding definieren. Wenn du dem Router sagts, dass er Port 81 oder 8080 (die Nummer ist letztendlich egal) der öffentlichen IP weiterleiten soll auf Port 80 der internen IP von Server 2, dann besteht die grundsätzliche Möglichkeit, dass man mit dem Browser nicht nur immer den Server 1 erreicht. Allerdings: Der Browser wird standardmäßig IMMER Port 80 konnektieren wollen, andere Ports muß man ihm explizit mitteilen. Das bedeutet, dass du mit dieser Lösung zwar "http://server1.dyndns.org" aufrufen kannst, mit "http://server2.dyndns.org" aber auch immer noch bei Server 1 landest, und für Server 2 immer die Portnummer angeben mußt: "http://server2.dyndns.org:81" muß es sein. Wahlweise geht auch "http://server1.dyndns.org:81".

Die Entscheidung, welcher Server angesprochen wird, wird aufgrund der verwendeten Portnummer getroffen, aber NICHT AUFGRUND DES NAMENS. Damit ist Server 2 natürlich erheblich benachteiligt, weil kaum ein Benutzer beim manuellen Eintippen an die zwingend hinzuzufügende Portnummer denkt. Lediglich bei anklickbaren Links oder gespeicherten Bookmarks würde es wohl kaum Probleme geben.

Sofern du auf den zwei Servern Angebote hosten willst, die nichts voneinander wissen sollen, läufst du natürlich Gefahr, dass Nutzer von Server 2 auch aus Neugier einfach mal die Portangabe weglassen, und dann zwangsläufig auf deinem Server 1 landen.

Du kannst diese Situation aber eigentlich nur verschlimmern (verbessern würde ich das nicht nennen), indem du auch Server 1 nicht auf Port 80, sondern einem beliebigen anderen Port unterbringst - zumindest in der Portforwarding-Regel. Dann würde man auf Port 80 überhaupt keinen Server mehr finden, alle dummen und unaufmerksamem Besucher, die die Portangabe weglassen, erreichen KEINEN der beiden Server mehr, und die schlauen Leute, die alle Portangaben (sind ja nur 65535 mögliche Ports) durchchecken, finden deine beiden Server trotzdem.

2. Du kannst die bisherige Situation in deinem Router auch komplett so belassen, alle Anfragen nach Server 2 also erstmal zu Server 1 durchleiten, und auf Server 1 dann einen transparenten Proxy einrichten, welcher die Anfragen intern auf Server 2 durchleitet. Dazu ist zwingend notwendig, dass du auf Server 1 virtuelle Hosts einrichtest, damit der Server bei Anfragen nach "server1.dyndns.org" anders reagiert, als bei Anfragen nach "server2.dyndns.org".

Wie du sowas einrichtest, entnimmst du schlauerweise der Dokumentation deines Webservers - den hattest du IIRC noch nicht namentlich genannt.

3. Du kannst dir die dumme Proxygeschichte auch komplett sparen und Server 2 der Einfachheit halber auf Server 1 verlegen. Dazu mußt du so oder so virtuelle Hosts anlegen, statt der proxymäßigen Weiterleitung kann dieser Server aber genausogut auch die Inhalte direkt aufbereiten und ausliefern.

Der DNS leitet die anfrage die zu beantworten ist nicht an Rechner2 weiter. Stattdessen, bevor DNS arbeitet, nimmt Apache von Rechner1 die Anfrage an und beantwortet sie, komischer weise...

Dein DNS-Server ist in diesen Szenarios IMMER SINNLOS. Er hat absolut keine Funktion für Zugriffe aus dem Internet - ihn also DESWEGEN zu betreiben, kannst du dir eigentlich schenken.

Sofern du ihn aber intern nutzt, um z.B. deine zwei Server anzusprechen, mußt du natürlich die richtige Konfiguration haben.

Grundsätzlich sollte man bei privat betriebenen Servern KEINERLEI im Internet existierende Domain verwenden. In den relevanten Regeln ist die Top-Level-Domain ".test" für private Zwecke freigegeben, du kannst dir also problemlos "www.server1.test" und "www.server2.test" einrichten und auf die entsprechenden internen IPs richten. Denn wenn du "server1.dyndns.org" aufrufst, wird dein Browser selbstverständlich deine öffentliche dynamische IP zurückerhalten - Anfragen von intern auf Ports der öffentliche Seite des Routers werden aber oftmals nicht wieder nach innen weitergeleitet (Sicherheitsfeature), so dass du auf diese Weise keinen Kontakt zu seinen Servern erhälst.

Damit das funktioniert, gibts zwei Möglichkeiten:
1. Die virtuellen Hosts erhalten zusätzlich zu ihren dyndns-Namen auch noch den jeweiligen .test-Namen hinzugefügt
2. Dein interner DNS-Server beantwortet AUSNAHMSWEISE die Anfragen nach den zwei Dyndns-Namen SELBST, und zwar nicht mit deiner öffentlichen IP, sondern mit den privaten IPs.

Solltest du dich bei der Portforwarding-Lösung für die Geschichte mit zwei Ports entschieden haben, ist es für die Lösung 2 beim DNS dann erforderlich, dass deine Server auch intern tatsächlich auf den Ports laufen, unter denen sie von extern erreichbar sind, denn ansonsten funktionieren die Links nicht mehr, und du bist endlos am rumrödeln deswegen.

Ich hoffe, du erkennst aus meinen Ausführungen oben zwei Dinge:
1. Es ist absolut kein Kinderspiel, zuhause einen Server zu hosten. Erst recht ist es kein Kinderspiel, ZWEI Server zu hosten.
2. Es ist für derartige Netzwerkspielchen unerläßlich, Kenntnisse zu haben. Ich hab dir jetzt lang und breit erklärt, worauf essentiell zu achten ist, aber ich habe Zweifel, dass du es tatsächlich schon verstehst.

Wenn du selbst hostest, trägst du natürlich auch selbst das Risiko! Diesen Punkt unterschätze bitte nie! Ich halte es grundsätzlich für verantwortungslos, wenn sich Neulinge und erwiesene Nichtkenner der Materie dazu hinreißen lassen, zuhause (oder auch im Rechenzentrum eines Providers) einen eigenen Server zu betreiben, der auch noch ÖFFENTLICH erreichbar sein soll. Dies ist nur noch dadurch zu toppen, dass WINDOWS verwendet wird (diesem Betriebssystem ist schlicht und einfach nicht über den Weg zu trauen, es hat in der Vergangenheit einfach zuviele Sicherheitslücken gehabt). Du bist als Anfänger nach meiner Meinung einfach nicht in der Lage, dein System (egal welches, ob Linux oder Windows) sicher zu konfigurieren, weil dir wichtige Erfahrunsgwerte und Kenntnisse fehlen.

Zuhause zum Lernen einen rein privaten Webserver zu installieren, den außer den im eigenen Netz angeschlossenen Rechnern niemand erreichen kann, ist zwar längst nicht so "cool", aber es ist der absolut notwendige Weg, Erfahrungen zu sammeln und bei Fehlern seinen Server nicht gleich der gesamten Welt als empfangsfreudiges Hacker-, Viren- und Würmerziel anzubieten, wodurch der Server möglicherweise von Fremden übernommen und für ihre Zwecke (Spamversand etc.) mißbraucht wird. Eine derartige Infektion wirst du vermutlich nur schwer erkennen, weil dir ein Virenscanner unter Umständen gar nicht hilft - allenfalls wunderst du dich vielleicht über deine immer langsamer werdende Internetanbindung.

Da es im Internet schon genug Idioten gibt, deren Rechner auf diese Weise übernommen wurden, und die jetzt tonnenweise Spam und Viren in die Welt pusten, sollte man sich als verantwortungsvoller Neuling von Experimenten, mit denen möglicherweise Dritte beeinträchtigt und geschädigt werden, zurückhalten.

- Sven Rautenberg