Anmerkung (März 2009): Natürlich ist dieser Artikel nicht mehr Zeitgemäß, der Artikel ist jetzt sicher gut und gerne 10 Jahre alt. Er war Bestandteil der alten Webseite von „MICHA! online…“ und wurde auf Grund seiner Beliebtheit zum Start dieses Blogs übernommen. Ich lasse ihn aus „nostalgischen Gründen“ dennoch online. Die Kernaussage des Artikels beschreibt, wie man unter Windows 9x-Betriebssystemen das sogenante „IP-Forwarding“ aktiviert. So konnte man einen Windows-Rechner in einen einfachen Router verwandeln, weil so möglich war, IP-Pakete zwischen verschiedenen Netzwerkinterfaces weiterzuleiten. Jeder der heute noch einen Rechner mit Windows 95 oder Windows 98 betreibt und damit vielleicht sogar in’s Internet geht handelt nach meiner Überzeugung grob fahrlässig. Upgrade your System or Get A Mac.
Die allgemeine Meinung von Windows 95 (oder 98, im folgenden sollen diese beiden Versionen mal synonym verwendet werden, falls nicht anders erwähnt) lautet, daß man ein TCP/IP-Netzwerkrouting über dessen Devices nicht möglich ist. Mit einigen Tricks ist es allerdings doch möglich, IP-Pakete zwischen mehreren Netzwerkdevices auszutauschen. Welche Voraussetzungen dafür erfüllt sein müssen und was man dabei beachten sollte, dies wird im folgendem beschrieben. Mit einigen zusätzlichen Programmen ist es sogar möglich, einen NAT-Router (Network Address Translation) mit Windows 95 zu realisieren. Demnach sind keine Proxy-Serverlösungen á la WinGate mehr notwendig, sondern der NAT-Router wird bei den einzelnen Arbeitsstationen einfach als (Standard)-Gateway eingetragen. Microsoft meint mit dem Begriff „Gateway“ wohl offensichtlich genau das, was in Internet-Kreisen gemeinhin als Router bezeichnet wird.
Verbinden zweier Netzwerksegmente über eine DFÜ-Verbindung
Doch schauen wir uns zunächst erstmal an, wie IP-Netze aufgebaut sind und warum sowas wie Routing überhaupt benötigt wird.
Das IP-Adresskonzept
Jeder Rechner oder gar jedes „Gerät“ in einem TCP/IP-Netz benötigt eine eindeutige IP-Adresse um angesprochen („adressiert“) werden zu können. Somit erhält jeder Rechner, der eine Netzwerkkarte erhält und auf dem das TCP/IP läuft auch eine eigene IP-Adresse. Auch eine „virtuelle“ Netzwerkkarte, wie z.B. eine Verbindung über ein Modem oder ISDN erhält vom Provider eine solche Adresse, die Zuteilung einer solchen Adresse erfolgt heutzutage meist automatisch durch den Provider. Man spricht also von sogenannten „Interfaces“, die ein Rechner besitzt – da es sich ja nicht unbedingt um eine reale Netzwerkkarte handeln muß. DFÜ-Verbindungen stellt Windows 95 über das DFÜ-Netzwerk (im englischen RAS – Remote Access Service) her und für die Netzwerkschnittstelle wird hier eine „virtuelle“ Netzwerkkarte mit dem Namen „DFÜ-Adapter“ installiert. Bei einer Netzwerkverbindung unterscheidet Windows 95 also nicht, ob es sich um eine Wählverbindung oder eine direkte Netzverbindung handelt. Verschiedene „direkte“ Verbindungen können außerdem über das DFÜ-Netz realisiert werden, z.B. eine Netzwerkverbindung über paralleles oder serielles Kabel.
Eine IP-Adresse besteht aus zwei Teilen: Der Netz-ID und der Host-ID. IP-Adressen sind 32 Bit lang und werden meist als 4 mal 1 Byte Dezimalzahlen geschrieben, also z.B. 192.168.100.100. Unter Windows kann man die aktuelle eigene IP-Adresse leicht bestimmen: Einfach das mit Windows gelieferte Programm „winipcfg“ starten und man bekommt neben einigen interessanten Informationen über die Netzwerkdevices, unter anderem auch die aktuelle IP-Adresse (des jeweiligen Devices).
Der Anfang der Adresse klassifiziert das Netz und bestimmt somit, was von der Adress Netz- und was Host-ID ist.
Ist das erste Bit einer IP-Adresse eine 0, so handelt es sich um ein Klasse A-Netz, also der IP-Adressbereich 1.0.0.0 bis 126.0.0.0. Leicht kann man also an der IP-Adresse bestimmen, zu welchem Netz-Typ sie gehört.
Bestimmte Bereiche innerhalb jedes Netztypes werden als „private“ Adress-Bereiche reserviert, sie werden demnach im Internet weder vergeben noch geroutet. Der wohl bekannteste Bereich sind die Adressen 192.168.0.0 bis 192.168.255.255 aus einem Class C Netz.
Schaut man sich ein Klasse B-Netz an, so fällt doch auf, daß in Wirklichkeit wohl niemals 65536 mögliche Hosts in einem physikalischen Netz vorhanden sein werden. Daher ist es notwendig, einen Adressbereich noch weiter in sogenannte Subnetze aufzuteilen. Damit ein Router aber weiß, welcher Host zu welchem Subnetz gehört, muß in einem solchen Fall zusätzlich die gültige Subnetzmaske (netmask) angegeben werden.
Eine Subnetzmaske „ändert“ also die durch die Klassifizierung angebene Netz- und Host-ID-Aufteilung einer IP-Adresse. Sie wird ebensfalls als 4 mal 1 Byte Dezimalzahl geschrieben, wobei alle Bits, welche die Netz-ID einer IP-Adresse bilden, auf 1 gesetzt werden – alle anderen hingegen auf 0.
Aus dem Netz 192.168.x.x, an das eigentlich 65536 Hosts angeschlossen werden, kann man sich mit Hilfe der Netzmaske mehrere Subnetze schaffen.
Stellen wir uns vor wir haben zwei voneinander unabhängige Subnetze wie hier beschrieben (also 192.168.100.x und 192.168.200.x mit jeweils einer Subnetzmaske 255.255.255.0). Nun soll aber ein Datenaustausch zwischen Beiden Netzen möglich werden. In beiden Netzen wird nun also ein Host benötigt, der Pakete, die nicht in das eigene Netz gehören zum jeweils anderen Netz weiterleitet – also ein Router. Dieser Router muß also mindestens 2 Interfaces besitzen, zwischen denen er Datenpakete hin- und herschicken muß. Das Problem was hier ist aber, daß es sich bei all diesen Rechnern um Windows 95-Rechner handelt, also auch die Router sollen Windows 95-Rechner sein (aus welchen Gründen auch immer). Die Verbindung der beiden „Router“-Rechner erfogt über eine Wählverbindung, z.B. eine ISDN-Leitung. Natürlich könnte es sich auch um eine direkte Verbindung oder ein ganzes Netzwerk von Routern handeln – das Grundprinzip wäre natürlich immer das gleiche.
Es existieren nun sozusagen 3 Netze, auch wenn das hier rot eingezeichnete „Netz“ in Wirklichkeit nur eine PointToPoint-Verbindung zwischen Host 1 des ersten Netzes und Host 4 des zweiten Netzes ist. Wie kann nun realisiert werden, daß z.B. Host 4 aus dem Netz 192.168.100.x auf Host 1 von 192.168.200.x zugreifen kann? Geht nicht mit Windows 95? Geht doch!
Wählverbindung als „BACKBONE“
[Hinweis: Der DFÜ-Server ist bei Windows 95 Bestandteil des Plus-Pakets, bei Windows 98 muß er von der Windows 98-CD expliziet installiert werden!]
Bei der Freischaltung des Anschlußes sollte aus Sicherheitsgründen ein Passwort vergeben werden, da es am Ende jedem beliebigen Anrufer möglich sein wird, auf Rechner im daran angeschlossenen Netzwerk zuzugreifen. An dieser Stelle sei auch darauf hingewiesen, daß eventuell gemachte „Freigaben“ dann für das gesamte Netzwerk sichtbar werden.
In den TCP/IP-Einstellungen des DFÜ-Adapters von Host 4 sollte keine IP-Adresse angegeben werden, da diese ja von Verbindung zu Verbindung variieren kann. Wenn nun bei der Wählverbindung auf Client-Seite „vom Server zugewiesene IP-Adresse“ aktiviert ist, so vergibt Windows automatische Adresse aus dem oben schon angebenen Subnetz 192.168.55.x, der Server bekommt immer die 192.168.55.1, der Client die 192.168.55.2.
Auf Client-Seite wird nun eine DFÜ-Verbindung angelegt, für die nur TCP/IP freigegeben ist:
Wie schon gesagt, können auch hier die TCP/IP-Einstellung auf Standardwerte stehen bleiben. Nach dem aktivieren der Verbindung (Username ist egal, wird vom DFÜ-Server von Windows 95 nicht ausgewertet! – aber das richtige Passwort muß eingestellt werden) sollten sich beide Rechner gegenseitig „sehen“ können. Um dies zu überprüfen, sollte man von einem der beiden Rechner mal einen ping auf den jeweils anderen Rechner durchführen, von Host 1 könnte das z.B. so aussehen:
ping 192.168.55.1
Dies sollte ein positives Ergebnis liefern. Der Versuch von Host 1 des ersten Netzes einen anderen Rechner als Host 4 aus dem zweiten Netz zu erreichen wird allerdings scheitern, da
* Host 4 Pakete nicht auf ein anderes Device weiterleitet und
* der andere Rechner aus dem zweiten Netz nicht weiß, wohin er sein Paket zurück liefern soll.
Jetzt kommt der Knackpunkt in der ganzen Sache: Wir bringen Host 4 das Routen der Pakete bei und sagen allen Hosts des zweiten Netzes, was mit Paketen passieren soll, die in ein anderes Netz gehören.
Rounting unter Windows 95 aktivieren
Auf dem Host 4 sollte man nun folgendene Änderung in die Registry eintragen. Die Registry kann leicht mit dem Programm „regedit“, welches auch jedem Windows 95 beiliegt, bearbeitet werden. Man sucht nun nach dem Key
\HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\MSTCP
Und trägt dort einen neue Zeichenfolge
EnableRouting
mit dem Wert
1
ein.
Jetzt sollte der Rechner neu gebootet werden. Sollte der Rechner nicht wieder starten, so ist offensichtlich eine „zu alte“ Version des DFÜ-Netzwerks installiert. Man sollte dann den Rechner im abgesicherten Modus starten, den Eintrag wieder entfernen und sich aus dem Internet die neuste Version (derzeit wohl 1.3) des DUN-Pakets (Dial-Up Networking) von Microsoft downloaden.
Als nächstes wird bei jedem weiteren Host aus dem zweiten Netz der Host 4 als „Standard Gateway“ eingerichtet, dies geschiet in den Netzwerkeinstellungen für TCP/IP in der Netzwerkkarte. Nehmen wir also an, die Adresse des Rechners 4 im zweiten Netz lautet 192.168.200.4, dann sollte jeder Rechner dieses Netzes diesen Rechner als Gateway eintragen:
Wenn dies abgeschlossen ist, sollte man von Host 1 des ersten Netzes jeden Rechner des zweiten Netzes erreichen können und umgekehrt. Offensichtlich setzt Windows bei Dial-Up-Verbindungen automatisch ein Routing zwischen beiden Devices. Würde es sich um zwei „reale“ Netzwerkkarten handeln, müßte man das Routing per Hand setzen.
Mit dem Befehl
route print
an einer Eingabeaufforderung kann man sich die aktuelle Windows-Routing-Tabells anzeigen lassen. Werfen wir mal einen Blick auf die Tabelle von Host 4 bei aktiver Verbindung mit Host 1 des ersten Netzes:
Windows hat alle installierten Routen bei diesem Rechner automatisch gesetzt. Interessant für unsere Zwecke seien an dieser Stelle nur die Routen, die sich auf die zwei Netzwerke beziehen.
Da von den Rechnern im zweiten Netz alle im Netz nicht zustellbaren Pakete an den Host 4 (unseren Router) geleitet werden, muß dieser nun alle Pakete empfangen und auf dem richtigen Interface weitersenden. Dabei müssen folgende Fälle drei Fälle berücksichtigt werden:
- Pakete gehören mir – weiterleitung an das Loopback-Device des eigenen Rechners zur Verarbeitung
- Pakete gehören in das 192.168.55.x’er Netz – weiterleiten an das dafür vorgesehende Gateway, nämlich das Interface des Rechners in diesem Netz.
- Pakete gehören in das 192.168.100.x’er Netz – Pakete müssen an den nächsten Router zu diesem Netz geschickt werden, das wäre 192.168.55.2 über das Interface 192.168.55.1
Bei einem Blick auf die oben abgebildete Routingtabelle stellt man fest, daß die ersten beiden Fälle berücksichtigt sind, der dritte jedoch nicht. Mit anderen Worten heißt dies also, vom ersten Netz kann zwar der Rechner 1 über die IP-Adresse 192.168.55.1 erreicht werden, Pakete mit 192.168.100.1 werden diesem Rechner aber nicht zugestellt, da der Host 4 im zweiten Netz nicht weiß, wohin er diese Pakete schicken soll.
Auf dem Rechner 1 im ersten Netz sieht das ganz anders aus: Windows hat nämlich eine Default-Route auf das DFÜ-Netzwerk-Interface gesetzt, als die Verbindung zustande gekommen ist (Anmerkung: Voraussetzung dafür ist natürlich, daß bei der Dial-Up-Verbindung der Schalter „Standard-Gateway im Remote Netzwerk verwenden“ in den TCP/IP-Einstellungen aktiviert ist). Alle Rechner aus dem ersten Netzwerk müßten also schon jetzt alle Rechner im zweiten Netz finden, ein Ping wird allerdings nicht erfolgreich sein, da sich diese Rechner ja nicht „zurück melden“ können und die Antwort auf dieses Ping niemals ankommen wird. Wichtig ist natürlich auch hier – wie oben beschrieben – das Standard-Gateway auf den jeweiligen „Routing-Rechner“, hier also Host 1, gesetzt wird. Damit das Routing hier funktioniert, muß natürlich auch auf diesem Rechner der „EnableRouting“-Eintrag (wie oben beschrieben) in der Registry eingetragen werden.
Damit nun alle Rechner des zweiten Netzes auch alle Rechner des ersten Netzes sehen können (und damit auch ein Ping zwischen diesen Rechnern erfolgreich wird) muß nun auf dem Host 4 des zweiten Netzes mit dem Befehl
route add 192.168.100.0 MASK 255.255.255.0 192.168.55.1 192.168.55.2
die Route zwischen diesen Netzen gesetzt werden.
Natürlich wäre auch das Setzen einer Default-Route möglich, es wäre nur nicht empfehlenswert, da sich die beiden Rechner 4 und 1 dann in den drei Netzen überhaupt nicht zustellbare Pakete bis zur maximalen Hop-Anzahl hin und her schicken würde, bis sie dann mal weggeworfen werden. Diese wäre natürlich nicht gerade Performance-fördernd. Außerdem würde das setzen der Default-Route ein eventuell später zu installierendens Internet-Gateway nicht mehr berücksichtigen können. Irgendwo müssen die Pakete in „fremde“ Netze ja auch hintransportiert werden.
Bücher zum Thema:
„Computernetzwerke“ (Andrew S. Tanenbaum)
„Moderne Betriebssysteme“ (Andrew S. Tanenbaum)