In einem lokalen Netzwerk ist das Leben einfach: wenn ein TCP-IP
Paket zu einem anderen Rechner gesendet werden soll, wird dieses
auf dem Ethernet verschickt.
Ist der Rechner am Internet
oder in einem grцsseren Netzwerk (WAN) angeschlossen, ist die
Aufgabe schon etwas schwieriger, denn wenn der Ziel-Rechner
(bzw. Ziel-IP-Nummer) nicht im lokalen Ethernet erreichbar ist,
so muss
dem Kernel gesagt werden, daЯ alle nicht lokal zustellbaren
Pakete, freundlicherweise von einem Gatewayrechner
weitergeleitet werden.
Komplizierter ist es, wenn der betreffende Rechner selbst ein
Gatewayrechner ist und mehrere Netzdevices (Ethernetkarten,
Modems, ISDN-Karten etc.) zur Verfьgung hat und jeweils ьber diese
Devices unterschiedliche Rechner/Netze erreichbar sind.
Das ist die Aufgabe vom Routing:
Fьr jede IP-Nummer muЯ definiert werden, auf welchem
Weg (Route) diese erreicht werden kann.
Man unterscheidet folgende Typen:
(die Beispiele werden unter konkretisiert)
Netzrouten
Hier wird angeben, wie ein komplettes Netz erreichbar
ist. Beispiel fьr ein lokales Ethernet:
Bsp 1: Das Netz 192.168.1.0 mit der Maske 255.255.255.0 ist
ьber das Device eth0 erreichbar.
Hostrouten
Man definiert, wie ein einzelner Rechner erreichbar ist.
Beispiel fьr eine syncPPP Verbindung:
Bsp 2: Der Rechner 192.168.0.1 ist ьber das
Device ippp0 erreichbar.
Default-Route
Im Internet gibt es recht viele IP-Nummern - es ist daher
mьhsam und langweilig fьr alle einzelnen IP-Nummern oder
Netze einzelne Routing-Eintrдge zu machen. Daher gibt
es die Mцglichkeit zu sagen:
Bsp 3: Alle IP-Nummern, fьr die keine spezielle
Regel vorhanden ist, schicke an den Rechner mit
der IP-Nummer 192.168.0.1.
Man beachte: es macht i.A. keinen Sinn, mehr als
eine Default-Route anzugeben.
Die Routingeintrдge werden dem Kernel zur Laufzeit
mit dem Kommando route mitgeteilt (und wieder entzogen).
S.u.S.E. Methode
Bei S.u.S.E. kцnnen die Routingeintrдge fest in die Datei
/etc/route.conf
eingetragen werden, die beim Booten oder durch einen
Runlevelwechsel vom Script
/sbin/init.d/route ausgewertet wird.
Die Eintrдge fьr die obigen Beispiele sehen so aus:
Die 1. Spalte gibt das Ziel an, also das Netz, die IP-Nummer,
oder das SchlьЯelwort default.
In der 3. Spalte steht die zugehцrige Netzmaske
(falls notwendig).
In der 2. Spalte steht der Gatewayrechner, an den die Anfragen
geschickt werden sollen.
In der 4. Spalte steht das zu verwendene Device.
Hier sieht man auch in der 3. Zeile,
daЯ bei Verwendung eines Gatewayrechners die Angabe des Devices
nicht nцtig ist, da sie selbststдmdig ermittelt wird.
Allerdings muЯ (in diesem Beispiel) die Hostroute auf
192.168.0.1 definiert sein, bevor man sie zum Setzen
der Defaultroute nutzen kann. Merke: Die Reihenfolge
ist wichtig.
Routing-Eintrдge kцnnen zum einem direkt gelцscht werden,
sie werden aber auch automatisch gelцscht, wenn das
zugrundeliegende Netzdevice gelцscht oder umkonfiguriert wird.
Dies hat in diesem Zusammenhang einen ungewьnschten Nebeneffekt.
Der ipppd baut die Verbindung auf und bekommt eine
neue IP-Nummer vom Server zugewiesen, wobei selbststдndig
eine neue Hostroute auf die IP-Nummer des Gegners
eingerichtet wird.
Allerdings wird eine ev. vorhandene Defaultroute ьber dieses
Device gelцscht.
Durch die PPP-Option defaultroute
kцnnte man sich automatisch wieder eine Anlegen lassen.
Allerdings ist diese Methode nicht sehr flexibel
(vielleicht will man ja doch keine Defaultroute) und man
hдtte hiermit keine Mцglichkeit zu steuern, wie sich beim
Verbindungsabbau verhalten werden soll.
Daher wird beim Verbindungaus- und abbau jeweils ein
Script gestartet, siehe
Kontrollieren der Routingtabelle beim Verbindungsauf- und abbau.
Der ipppd bietet die einfache Mцglichkeit
beim Verbindungsaufbau das Script
/etc/ppp/ip-up und beim Abbau
/etc/ppp/ip-down zu Starten, wobei jeweils
die folgenden Parameter ьber den neuen Zustand
ьbergeben werden:
$1: Interface
$2: Device
$3: Speed (nur aus Kompatibilitдtsgrьnden)
$4: lokale IP-Nummer
$5: IP-Nummer des Gegners
Durch Installation geeigneter Scripte kann also die
Default-Route neu gesetzt werden.
Die Scripte kцnnten jeweils so aussehen:
#!/bin/sh
/sbin/route add default gw $5
Bei S.u.S.E. wird ein Script /etc/ppp/ip-up
welches fьr den hausgebrauch ausreicht. Die
Routen werden aufgrund der Konfigurationsdateien
gesetzt und wieder hergestellt. Weitere Kommandos
kцnnen vom Administrator eingefьgt werden (z.B. Mails
verschicken).
Das Script ip-down ist ein symbolischer Link auf
ip-up, so daЯ man nur eine Datei zu verwalten hat.
Was macht das Script ip-up/ip-down?
Es wird geprьft. ob das Interface ippp? ist, sollte also bei
Analog-PPP nicht stцren, wer dort etwas eintragen will,
sollte die Stelle leicht finden.
Wenn es als ip-up aufgerufen wird (also nach dem
Verbindungsaufbau),
wird eine Default-Route auf die gerade zugewiesene IP-Nummer
gesetzt.
Wenn es als ip-up aufgerufen wird (also nach dem
Verbindungsabbau), dann wird das Interfacae gelцscht.
Das Interface wird wie in /etc/rc.config
wieder neu angelegt, es wird also wieder auf die
ursprьnglichen IP-Nummer gesetzt.
Nach den Angaben in /etc/route.conf werden die
Routingeintrдge fьr dieses Device neu eingerichtet.
Somit ist dial-on-demand wieder mцglich.
Ist dort keine Defaultroute angegeben, wird auch keine gesetzt.
Ich mцchte aber kein dial-on-demand
In der /etc/route.conf (bzw. in YaST) wird keine
Default-Route (Default-Gateway) angeben, dadurch
existiert nur wдhrend einer Verbindung eine Default-Route, diese
wird beim Verbindungsabbau gelцcht und nicht neu angelegt.
Die Verbindung kann dann manuell (oder durch ein Script) durch
isdnctrl dial ippp0 aufgebaut werden
(oder durch manuelles setzen der Default-Route).
Dadurch kann z.B. auch erreicht werden, dass mit verschiedenen
Providern gearbeitet wird, in dem Fall muss man ja
sowieso entscheiden, welche
Verbindung nun hochgefahren werden soll, z.B.
isdnctrl dial ippp17
glen:/root # route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
5.6.7.8 0.0.0.0 255.255.255.255 UH 0 0 0 ippp0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 2 lo
0.0.0.0 5.6.7.8 0.0.0.0 UG 0 0 0 ippp0
Wir gehen in die groЯe weite Welt:
Bestimme eine existierende IP-Nummer, die einzige,
die ich mir merken kann ist die des DNS-Server von
ECRC: traceroute -n 141.1.1.1.
Man beachte, daЯ wir noch keinen DNS-Servive benutzen
kцnnen, daher -n.
Timeout abwarten bis aufgelegt wird/
betrachte /var/log/messages, z.B.:
kernel: isdn_net: local hangup ippp0
kernel: ippp0: Chargesum is 0
isdnlog: Apr 03 09:20:49 tei 70 calling Eunet-N with KfrI I Normal call clearing (User)
ipppd[135]: Modem hangup
ipppd[135]: Connection terminated.
ipppd[135]: taking down PHASE_DEAD link 0, linkunit: 0
ipppd[135]: sent [0][LCP TermReq id=0x2 6c 69 6e 6b 20 63 6 c 6f 73 65 64]
ipppd[135]: LCP is down
ipppd[135]: link 0 closed , linkunit: 0
ipppd[135]: reinit_unit: 0
ipppd[135]: Connect[0]: /dev/ippp0, fd: 6
IP-Nummern und Routing prьfen
sie mьssen jetzt wieder genausogesetzt sein, wie
vor dem Verbindungsaufbau.