Routing Mini-Handbuch
...Ich habe hier das Pferd von hinten aufgezogen, weil man, wenn man mit Linux anfängt, i.d.R. mit einer NIC und einer IP dafür beginnt. Netzplanungen gehen natürlich von der Anzahl der benötigten Host-IPs aus, das benötigte Netz wird errechnet, daraus ergeben sich dann Netzwerk, Host-IPs und Broadcast.
Die Kurzschreibweise errechnet sich durch Addition der Bits einer Netzmaske. In diesem Fall sind es 3 mal 8 gleich 24. In Kurzform lautet die Netzmaske:
192.168.0.0/24
Im zweiten Fall sind es 3 mal 8 plus 4 gleich 28. Die Kurzform lautet:
192.168.0.0/28
Die Klassen der privaten IPs:
Class A = /8, Class B = /16, and Class C = /24
Unbedingt zu beachten ist, dass die Netzmaske in binärer Schreibweise eine Bitfolge von Einsen links angefangen in ununterbrochener Folge haben muss. D.h. eine Netzmaske von 255.255.247.0 ist falsch: 11111111.11111111.11110111.00000000 binär. Wohl aber möglich ist z.B. 255.255.254.0, 11111111.11111111.11111110.00000000 binär.
Die Sonderfälle:
Die Hostmaske 255.255.255.255 oder kurz /32 maskiert alle Bytes und trifft damit genau eine IP, d.h. einen Host, z.B. 192.168.0.100/32.
Die Worldmaske 0.0.0.0 oder kurz /0 maskiert nichts und trifft alle IPs. Diese Maske wird in Auswahlrechnern bei der default route genutzt, um Hosts im Internet, die sich in verschiedenen öffentlichen Netzen befinden, zu erreichen.
Ein Netz (Network) besteht aus einer Reihe von Hosts und/oder möglichen IPs, die mit einer Netzmaske gematcht werden können.
Es sind die Netzmasken /24 vorgegeben: 192.168.0.1 und 192.168.0.100 sind zwei IPs aus einem Subnetz. 192.168.0.1 und 192.168.1.100 sind zwei IPs aus zwei Subnetzen. 192.168.0.2 und 192.168.1.2 sind zwei IPs aus zwei Subnetzen.
Routing
Siehe auch die man-pages von ifconfig und route
Es lassen sich verschiedene Routen unterscheiden. Durch die Einbindung einer Network Interface Card, NIC, in das Linux-System, werden z.B. Netzwerkrouten automatisch eingerichtet:
# ifconfig eth0 192.168.1.12 broadcast 192.168.1.255 netmask 255.255.255.0 # route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 | | | | | Netz | | | | Gateway | | | Netzmaske | | route | is up | NIC Nummer
Eine weitere NIC darf jetzt keine IP aus dem gleiche Netz haben. Probieren wir es einfach aus und sehen wir uns an, warum:
# ifconfig eth1 192.168.1.13 broadcast 192.168.1.255 netmask 255.255.255.0 # route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
IPs, die durch unseren Host geroutet werden und in das 192.168.1.0 Netz gehen, werden von der ersten routing Zeile gematcht und führen über eth0. Die zweite Zeile kommt niemals an die Reihe und eth1 sendet nie, ausser wir fahren eth0 herunter.
Wie kommt es dann aber dazu, daß ein Host z.B. mit der IP 192.168.1.2 aus dem geswitchten Netz 192.168.1.0/24 bei einem ping auf 192.168.1.13 eine Antwort bekommt?
Nun, das liegt daran, daß der Kernel auf das ping reagiert und nicht die NIC. Dem Kernel ist ja die NIC mit der IP 192.168.1.13 bekannt, daher schickt er das reply zurück, das aufgrund der routing table über eth0 geht.
Deshalb ist in dieser Situation die Konfiguration der zweiten NIC auf ein anderes Subnetz zwingend erforderlich:
# ifconfig eth0 192.168.1.12 broadcast 192.168.1.255 netmask 255.255.255.0 # ifconfig eth1 192.168.2.13 broadcast 192.168.2.255 netmask 255.255.255.0 # route -n Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
Nun haben wir eine eindeutige Situation, und unser Host kann klar zwischen den beiden Netzen unterscheiden.
Beispiele
Wenn wir an eth0 liegend einen Router 192.168.1.1 erreichen können, der in das Netz 192.168.1.0/24 und in das Netz 10.0.1.0/24 routet, brauchen wir nur eine weitere Netzroute setzen, um in das Netz 10.0.1.0/24 zu kommen:
# route add -net 10.0.1.0 netmask 255.255.255.0 gw 192.168.1.1 dev eth0 # route -n Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 10.0.1.0 192.168.1.1 255.255.255.0 UG 1 0 0 eth0
Das Setzen dieser Netzroute alleine reicht jedoch nicht aus, der Kernel muss Forwarden erlauben (man iptables).
Wenn unser Host ein Gateway zu einem Auswahlrechner 192.168.1.1 ist, muss eine default route gesetzt werden:
# route add default gw 192.168.1.1 dev eth1 # route -n Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 10.0.1.0 192.168.1.1 255.255.255.0 UG 1 0 0 eth0 0.0.0.0 192.168.1.1 0.0.0.0 UG 1 0 0 eth1
Natürlich muss auch für die default route Forwarding aktiviert sein. Mit der Netzmaske 0.0.0.0 werden alle IPs, die nicht in das Netz 192.168.1.0, 192.168.2.0 oder 10.0.1.0 gehören, nach unseren default gateway geroutet.
Ist unser Host selbt ein Auswahlrechner, wird durch den pppd nach geglückter Einwahl i.d.R. automatisch ein default gateway gesetzt. Ein Beispiel erübrigt sich daher. Bleibt nur anzumerken, daß eine bestehende default route vom pppd _nicht_ überschrieben werden, wodurch eine Einwahl einen trotzdem offline läßt!
Erfolgreiches Routen!

