route



Viele Leute setzen einen Linux oder BSD Rechner als "Router" ein, damit er Pakete im Netz weiterleitet. Das ist billiger als ein Hardware Router in vielen Fällen auch leistungfaehiger, denn man kann damit ja noch mehr machen als nur routen.

Wie finden die IP Pakete überhaupt ihren Weg durchs Netz? Sie werden anhand ihrer Zieladresse von Router zu Router weitergereicht und gelangen so an ihr Ziel. Jedes System muss dabei eine sogennannte "routing table" haben, anhand derer die Entscheidung getroffen wird, welche Pakete wohin zu leiten sind. Man kann sich jede Route, also jeden Eintrag in dieser Tabelle, als kleines Wegweiserschild vorstellen, das den IP Paketen den Weg zeigt.

Ein Router kann dabei ein Paket entweder direkt an eine angeschlossene Netzwerkkarte weiterleiten, wenn er denkt dass die Zieladresse direkt auf diesem Netzwerksegment existiert. Oder er leitet ein Paket an einen anderen Router weiter. Der Router an den weitergeleitet wird, muss aber direkt auf diesem Netzwerksegment (oder am anderen Ende einer "point-to-point" Verbindung) zu finden sein.

Als 3. Fall gibt es noch eine Route zu einem "gateway"

Um die gegenwärtige "routing table" auszulesen können wir den Befehl:

route -n

(manche Unixe bevorzugen:

netstat -nr

)

verwenden.

(Das -n besagt dabei in beiden Fällen dass der Router die IP Adressen nicht via DNS "nameservice" nachschlagen soll, was länger dauern kann und meist nicht unbedingt übersichtlicher wird.)

Auf einem Linux Rechner mit der IP Adresse 10.1.2.3 könnte die Ausgabe z.B. so aussehn:

Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.1.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
10.1.7.0 10.1.2.77 255.255.255.0 UG 1 0 0 eth0
0.0.0.0 10.1.2.1 0.0.0.0 UG 1 0 0 eth0



Für Adressen die in den Bereich 10.1.2.xxx fallen (die Netmaske legt fest, wie lang der Bereich ist - hier einfach ein Class C Netz) versucht Linux die Pakete direkt an das lokale Ethernet auf eth0 zu schicken (der Wert 0.0.0.0 im "gateway" feld besagt: hier haben wir KEINEN Gateway)

Dann haben wir eine Route für Adressen aus dem Bereich 10.1.7.xxx, die sollen zu einem "gateway" mit der Adresse 10.1.2.77 geschickt werden (man beachte dieser "gateway" liegt in dem Bereich der direkt angeschlossen Rechner, die selbst ohne "gateway" erreichbar sind)

Der letzte Eintrag ist die "default route" (erkennbar an dem 0.0.0.0 und der "netmask" 0.0.0.0 ) für alle Netzwerkpakete für die sonst keine Route existiert (z.B. für 123.44.55.66) wird diese Route verwendet und wir hoffen dass der Router mit der IP 10.1.2.1 diese ein Stück näher an ihr Ziel bringt..

Welchen Weg die Pakete von Router zu Router nehmen kann man sich mit dem Befehl:

traceroute 194.152.178.12

ansehen.

Obiger Fall ist ja noch recht einfach. Kompliziertere router haben aber i.a. mehrere "interfaces" und leiten Pakete die auf einem "interface" hereinkommen an ein anderes weiter. Das Verhalten, eingehende Pakete evenuell weiterzuleiten, ist normalerweise abgeschalten.

Bei Debian-Linux kann man das in der Datei /etc/network/options mit einem Eintrag:

ip_forward=yes

einschalten. (Achtung: der Eintrag wird erst beim nächsten Starten aktiv. )

Will man das "forwarding" sofort händisch einschalten, so kann man das in Linux mit:

echo 1 > /proc/sys/net/ipv4/ip_forward .

Mit

cat /proc/sys/net/ipv4/ip_forward

kann man sich die gegenwärtige Einstellung anschauen.
0 ...nicht forwarden.
1 ... forwarden.

Routen trägt man bei Debian in /etc/network/interfaces ein. (siehe das mitgelieferte Beispielfile )

Händisch legt man eine Route mit:

route add -net 10.1.7.0 netmask 255.255.255.0 gw 10.1.2.77

Ebenso kann man sie wieder löschen:

route del -net 10.1.7.0 netmask 255.255.255.0

Solcherart eingetragene Routen sind natürlich nicht permanent, d.h. beim nächsten Starten des Rechners sind sie nicht mehr da, ausser man hat die entsprechenden "startup scripts" seiner Distribution editiert.

Welche IP Adressen kann man nun für sein privates internes Netzwerk verwenden?

In der Internet "Norm" (die Normen im Internet sind sogenannte RFC Documente) RFC1597 besagt dass man folgende Bereiche benutzen darf:


10.0.0.0 - 10.255.255.255
172.16.0.0 - 172.31.255.255
192.168.0.0 - 192.168.255.255

Damit wäre z.B.: 192.168.123.0 mit netmask 255.255.255.0 ein erlaubtes privates Netz.

Solche privaten Netze werden im öffentlichen Internet NICHT geroutet, d.h. die Pakete gehen verloren. (Und selbst wenn sie doch ans Ziel kommen würden: da der Empfänger keine Ahnung hat woher sie kommen, kann man doch keine Verbindung aufbauen, weil er die Pakete nicht beantworten kann...)

Damit also jemand der so eine private IP Adresse in irgend einem Firmennetzwerk hat dennoch das Internet benützen kann gibt es jetzt 2 Möglichkeiten:

* entweder man surft nur über einen Proxy-Server, der zur einen Hälfte im internen Netz steht und zur anderen Hälfte eine echte Adresse hat, und wickelt auch seinen Email Verkehr über einen Mailserver ab, der auf der einen Seite vom internen Netz erreichbar ist und der auf der anderen Seite eine Verbindung zum weltweiten Netz hat.

oder:

* man hat einen Router der "IP masquerading" (auch NAT - network address translation) beherrscht. Dieser Router kann die IP Pakete die durch ihn hindurchgeroutet werden "umschreiben". Und zwar verpasst er diesen Paketen seine eigene echte Absender IP Adresse. Damit gehen die Antwortpackte auch wieder an ihn selbst. Diese schreibt er ebenfalls wieder um und schickt sie dann an die interne Adresse.

Sitzt man also hinter so einem "masquerading" so kann man mehr oder weniger transparent im Netz surfen obwohl die eigenen Pakete eigentlich gar nicht ins Netz dürfen...

Noch ein paar Worte zum "routing": die Routing Tabellen grosser Router die zwischen den einzelnen Providern "vermitteln" haben z.t einige 10000 bis 100000 Einträge. Diese werden natürlich nicht händisch verwaltet. (weil man ja andauernd Routen umlegen müsste um z.B. an einer defekten Leitung vorbeizurouten oder ähnliches). Diese Routing Tabellen werden von eigenen Programmen ("routing daemons") gegenseitig ausgetauscht. Die Protokolle mit denen sich diese "routing daemons" unterhalten nennt man "Routing Protokolle" und den Vorgang (im Gegensatz zum oben gelernten statischen Routen) "dynamisches Routing".

EXERCISES:

* Schau dir deine eigene "routing table" an. (mit route und netstat)

* Wenn du mindestens 3 Rechner hast: mach ein kleines Netzwerk mit 3 Segmenten und einem Router in der Mitte. Versuche Kontakt zwischen den 2 äusseren Rechnern herzustellen.


REFERENCES:

man route

man netstat

http://www.rfc.net/rfc1597.txt