ABSTRACT: grundzuege statischen routings, das route kommando, netstat -nr werden erklaert. kurze erwaehung von RFC1597 private space IPs und masquerading. AUDIENCE: junior admin SYSTEM: any unix SECTION: basic unix commands AUTHOR: mond COPYRIGHT: GNU Free Documentation Licence http://www.gnu.org/licenses/fdl.txt viele leute setzten einen linux oder BSD rechner als "router" ein. damit er packete im netz weiterleitet. ist billiger als ein hardware router in vielen faellen auch leistungfaehiger... man kann damit ja noch mehr machen als nur routen.. wie finden den die IP packete ihren weg durchs netz? sie werden anhand ihrer zieladdresse 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 packete wohin zu leiten sind. man kann sich jede route, also jeden eintrag in dieser tabelle, als kleines wegweiserschild vorstellen..das den IP packeten den weg zeigt. ein router kann dabei ein packete entweder direkt an eine angeschlossene netzwerkkarte weiterleiten wenn er denkt dass die zieladdresse direkt an auf diesem netzwerksegment existiert.. oder er leitet ein packet 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 gegenwertige routing table auszulesen koennen wir den befehl: route -n (manche unixe bevorzugen: netstat -nr ) (das -n besagt dabei in beiden faellen dass der router die IP addressen nicht via DNS nameservice nachschlagen soll. was laenger dauern kann und meist nicht unbedingt uebersichtlicher wird..) auf einem linux rechner mit der IP addresse 10.1.2.3 koennte 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 fuer addressen 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 packete 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 fuer addressen aus dem bereich 10.1.7.xxx die sollen zu einem gateway mit der addresse 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 (erkannbar an dem 0.0.0.0 und der netmask 0.0.0.0 ) fuer alle netzwerkpackete fuer die sonst keine route existiert (z.b. fuer 123.44.55.66) wird diese route verwendet und wir hoffen dass der router mit der IP 10.1.2.1 diese ein stueck naeher an ihr ziel bringt.. welchen weg die packte 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 interface und leiten packte die auf einem interface hereinkommen an ein anderes weiter. das verhalten eingehende packete eventuell weiterzuleiten ist normalerweise abgeschalten. im debian kann man das auf in der datei /etc/network/options mit einem eintrag: ip_forward=yes einschalten. (achtung: der eintrag wird erst beim naechsten starten aktiv. ) will man das forwarding gleich haendisch einschalten so kann man das im linux mit: echo 1 > /proc/sys/net/ipv4/ip_forward mit cat /proc/sys/net/ipv4/ip_forward kann man sich die gegenwertige einstellung anschaun. 0 ...nicht forwarden. 1 ... forwarden. routen traegt man im debian in /etc/network/interfaces ein. (siehe das mitgelieferte beispielfile ) haendisch laegt 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 loeschen: route del -net 10.1.7.0 netmask 255.255.255.0 solcherart eingetragener routen sind natuerlich nicht permanent. d.h. beim naechsten starten des rechners sind sie nicht mehr da.. ausser man hat die entsprechenden startup scripts seiner distribution editiert. welche IP addressen kann man nun fuer 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 waere z.b.: 192.168.123.0 mit netmask 255.255.255.0 ein erlaubtes privates netz. solche privaten netze werden im oeffentlichen internetz NICHT geroutet. d.h. die packete gehen verloren.. (und selbst wenn sie doch ans ziel kommen wuerden: da der empfaenger keine ahnung hat woher sie kommen kann man doch keine verbindung aufbauen.. weil er die packete nicht beantworten kann...) damit also jemand der so eine private IP addresse in irgend einem firmen netzwerk hat dennoch das netz benuetzen kann gibt es jetzt 2 moeglichkeiten: * entweder man surft nur ueber einen proxy-server der zur einen haelfte im internen netz steht und zur anderen haelfte eine echte addresse hat.. und wickelt auch seinen email verkehr ueber 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 eine router der "IP masquerading" (auch NAT - network address translation) beherscht. dieser router kann die IP packete die durch ihn hindurchgeroutet werden "umschreiben". und zwar verpasst er diesen packeten seine eigene echte absender IP addresse. damit gehen die antwortpackte auch wieder an ihn selbst.. und diese schreibt er ebenfalls wieder um und schickt sie dann an die interne addresse. sitzt man also hinter so einem maquerading so kann man mehr oder weniger transparent im netz surfen obwohl die eigenen packte eigentlich gar nicht ins netz duerfen... wie wir so einen maquerading gateway selbst bauen lernen wir aber ein andermal. noch ein paar worte zum routing: die routing tabelen grosser router die zwischen den einzelenen providern "vermitteln" haben z.t einige 10000 bis 100000 eintraege. diese werden natuerlich nicht haendisch verwaltet.. (weil man ja andauernd routen umlegen muesste um z.b. an einer defekten leitung vorbeizurouten oder aehnliches). diese routing tabelen werden von eigen programmen (routing daemons) gegenseitig austauschen... 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". das lernen wir aber erst VIEL spaeter... 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 einen router in der mitte. versuche kontakt zwischen den 2 aeusseren rechnern herzustellen. REFERENCES: man route man netstat http://www.rfc.net/rfc1597.txt