Copyright © 1996 by O'Reilly/International Thomson Verlag

Bitte denken Sie daran: Sie dürfen zwar die Online-Version ausdrucken, aber diesen Druck nicht fotokopieren oder verkaufen.

Wünschen Sie mehr Informationen zu der gedruckten Version des Buches "Linux: Wegweiser durch das Netzwerk" dann klicken Sie hier.


Kapitel 7

Serial Line IP

Die Serial Line-Protokolle SLIP und PPP bieten Internet-Connectivity für Arme. Außer einem Modem und einer mit einem FIFO-Buffer ausgestatteten seriellen Schnittstelle wird keine weitere Hardware benötigt. Die Verwendung ist nicht schwieriger als bei einer Mailbox, und eine ständig steigende Zahl privater Organisationen und in letzter Zeit auch kommerzieller Provider bietet Dialup-IP zu bezahlbaren Preisen für jedermann an.

Für Linux stehen sowohl SLIP- als auch PPP-Treiber (siehe Kapitel 8, Das Point-to-Point-Protokoll) zur Verfügung. SLIP ist schon seit langem verfügbar, und ein PPP-Treiber wurde vor einiger Zeit von Michael Callahan und Al Longyear entwickelt. Beide laufen mittlerweile stabil.

Allgemeine Anforderungen

Um SLIP oder PPP zu verwenden, müssen Sie einige der grundlegenden Netzwerk-Funktionen installieren, die wir in den vorherigen Kapiteln besprochen haben. Als Minimum ist das Loopback-Interface einzurichten und die Auflösung von Namen zu ermöglichen. Wenn Sie sich an das Internet anbinden wollen, werden Sie natürlich auch DNS verwenden wollen. Die einfachste Möglichkeit besteht darin, die Adresse irgendeines Name-Servers in Ihre resolv.conf-Datei einzutragen. Dieser Server wird dann abgefragt, sobald der SLIP-Link aktiviert wird. Je näher (netzwerktechnisch) der Server an Ihrem Einwählpunkt liegt, desto besser werden die Antworten sein.

Allerdings ist diese Lösung nicht optimal, weil alle Lookups immer noch über Ihren SLIP/PPP-Link laufen. Wenn Sie sich über die auf diese Weise verbrauchte Bandbreite Sorgen machen, können Sie einen Caching-Only-Name-Server einrichten. Dieser bedient keine bestimmte Domain, sondern arbeitet als Relais für alle auf Ihrem Rechner produzierten DNS-Anfragen. Der Vorteil dieses Schemas liegt darin, daß ein Cache aufgebaut wird und die meisten Anfragen auf diese Weise nur einmal über die serielle Leitung laufen. Eine named.boot-Datei für einen Caching-Only-Server sieht ungefähr so aus:

; named.boot-Datei für Caching-Only-Server
directory		             /var/named		
primary       0.0.127.in-addr.arpa   db.127.0.0 ; Loopback-Netz
cache         .                      db.cache   ; Root-Server

Neben der Datei named.boot müssen Sie auch eine Datei namens db.cache einrichten, die eine gültige Liste aller Root-Name-Server enthält. Wie das geht, wird am Ende des Kapitels 6, Resolver und Name-Server beschrieben.

SLIP-Betrieb

Dialup-IP-Server bieten SLIP häufig über spezielle Benutzer-Accounts an. Nach dem Einloggen in einen solchen Account landen Sie nicht in der üblichen Shell, sondern es wird ein Programm oder Shell-Script ausgeführt, das den SLIP-Treiber des Servers für die serielle Leitung konfiguriert und ein entsprechendes Netzwerk-Interface aufbaut. Dasselbe muß danach an Ihrem Ende der Leitung passieren.

Bei manchen Betriebssystemen ist der SLIP-Treiber ein normales Anwenderprogramm; bei Linux dagegen ist er Teil des Kernel und ist dadurch deutlich schneller. Das verlangt allerdings, daß die serielle Leitung explizit auf den SLIP-Modus umgestellt wird. Dieser Modus ist als eine spezielle »line discipline« (Betriebsmodus) implementiert. Wenn das Tty sich im Normalmodus (DISC0) befindet, tauscht es Daten nur mit Benutzerprozessen über die Systemaufrufe read(2)- und write(2) aus, und der SLIP-Treiber ist nicht in der Lage, von diesem Tty zu lesen oder darauf zu schreiben. Bei SLIPDISC sind die Rollen vertauscht: Nun werden alle Schreib- und Lesezugriffe von Benutzerprozessen blockiert, während alle über die serielle Schnittstelle eintreffenden Daten direkt an den SLIP-Treiber weitergeleitet werden.

Der SLIP-Treiber selbst versteht eine Reihe von Variationen des SLIP-Protokolls. Neben dem normalen SLIP versteht er auch CSLIP, das die sogenannte Van Jacobson-Header-Komprimierung von IP-Paketen implementiert. Das verbessert den Durchsatz bei interaktiven Anwendungen merklich. Darüber hinaus gibt es 6-Bit-Versionen dieser Protokolle.

Einen einfachen Weg der Umstellung einer seriellen Leitung auf den SLIP-Modus bietet das slattach-Tool. Nehmen wir einmal an, Sie hätten Ihr Modem an /dev/cua3 angeschlossen und sich erfolgreich in den SLIP-Server eingeloggt. Nun führen Sie den folgenden Befehl aus:

# slattach /dev/cua3 &
Das schaltet die Leitungsart von cua3 auf SLIPDISC und verbindet diese mit einer der SLIP-Netzwerk-Schnittstellen. Ist dies Ihr erster aktiver SLIP-Link, wird die Leitung an sl0 gebunden; die zweite an sl1 und so weiter. Die maximale Anzahl unterstützter Schnittstellen ist von der Version und Konfiguration Ihres Kernels abhängig, im allgemeinen liegt der Wert bei 4 oder 8.

Per Voreinstellung verwendet slattach CSLIP. Sie können einen anderen Modus mit der Kommandozeilen-Option -p einstellen. Wenn Sie mit normalem SLIP (ohne Kompression) arbeiten wollten, würden Sie folgendes eingeben:

# slattach -p slip /dev/cua3 &
Andere Modi sind cslip, slip6, cslip6 (für die 6-Bit-Versionen von SLIP) und adaptive für adaptives SLIP. Die letzte Variante überläßt es dem Kernel, herauszufinden, welchen SLIP-Modus das Gegenüber verwendet.

Beachten Sie, daß Sie (außer bei adaptive) dieselbe Variante verwenden müssen wie Ihre Gegenstelle. Wenn beispielsweise der Host cowslip CSLIP verwendet, müssen Sie dies auch tun. Ein typisches Symptom unterschiedlicher SLIP-Modi ist die Fehlermeldung »Can't build ICMP header«, die der Kernel ausspuckt, wenn Sie z. B. mit telnet auf einen entfernten Host zugreifen wollen. Es kann aber auch sein, daß Sie gar nichts sehen, und telnet einfach nur zu »hängen« scheint. Solchen Problemen können Sie beispielsweise durch die Verwendung von adaptivem SLIP aus dem Weg gehen.

Mit slattach können Sie nicht nur SLIP, sondern auch andere Protokolle wie PPP oder KISS (ein von Amateurfunkern verwendetes Protokoll) aktivieren, die serielle Leitungen verwenden. Details können Sie der slattach(8)-Manpage entnehmen.

Nachdem die Leitung nun für den SLIP-Treiber bereitsteht, müssen Sie das Netzwerk-Interface konfigurieren. Dies erledigen Sie wieder mit den Standardbefehlen ifconfig und route. Nehmen wir einmal an, daß Sie von vlager aus einen Server namens cowslip angewählt haben. Sie würden dann die folgenden Befehle eingeben:

# ifconfig sl0 vlager-slip pointopoint cowslip
# route add cowslip
# route add default gw cowslip
Der erste Befehl konfiguriert das Interface als Point-to-Point-Link zu cowslip, während der zweite und der dritte die Route zu cowslip und die Default-Route setzen, wobei cowslip als Gateway verwendet wird. gateway.

Zwei Dinge lohnen die besondere Beachtung bei diesem ifconfig-Aufruf. Das erste ist die Option pointopoint, mit der die Adresse des anderen Endes der Punkt-zu-Punkt-Verbindung festgelegt wird. Das zweite ist die Verwendung von vlager-slip als Adresse für das lokale SLIP-Interface.

Wir haben bereits vorher besprochen, daß Sie die Adresse, die dem Ethernet-Interface von vlager zugewiesen wurde, auch für Ihren SLIP-Link verwenden können. In diesem Fall muß vlager-slip ein weiteres Alias für die Adresse 172.16.1.1 sein. Andererseits können Sie Ihrem SLIP-Link aber auch eine ganz andere Adresse zuweisen. So ein Fall wäre beispielsweise gegeben, wenn Ihr Netzwerk eine nicht registrierte IP-Netzwerk-Adresse verwendet, wie das die Brauerei tut. Wir kommen auf dieses Thema im nächsten Abschnitt ausführlicher zurück.

Für den Rest dieses Kapitels werden wir immer vlager-slip verwenden, wenn wir uns auf die Adresse des lokalen SLIP-Interfaces beziehen.

Um den SLIP-Link herunterfahren, beenden Sie einfach den slattach-Prozeß, indem Sie ihm das Hangup-Signal schicken:

# kill -HUP 516

Handhabung privater IP-Netzwerke

Sie werden sich aus Kapitel 5 daran erinnern, daß die virtuelle Brauerei nichtregistrierte Netzwerknummern verwendet, die nur für den internen Gebrauch reserviert sind. Pakete von oder zu einem dieser Netzwerke werden vom Internet nicht geroutet. Das bedeutet, daß Hosts innerhalb des Brauerei-Netzwerks nicht mit echten Internet-Hosts kommunizieren können, weil die entsprechenden Pakete vom ersten größeren Router still und leise aussortiert werden.

Um dieses Problem zu umgehen, konfigurieren wir vlager so, daß er als eine Art Verteiler für Internet-Dienste agiert. Der restlichen Welt stellt er sich als normaler Internet-Host mit einer (üblicherweise vom Netzwerk-Provider zugewiesenen) registrierten Internet-Adresse dar. Um auf einen Internet-Host, beispielsweise einen FTP-Server, zugreifen zu können, müssen sich Benutzer in vlager einloggen und den FTP-Client von dort aus starten, so daß es so aussieht, als käme die Verbindung von einer gültigen Adresse. Bei anderen Anwendungen könnte es Lösungen geben, bei denen der Benutzer sich nicht bei vlager einloggen muß. Zum Beispiel könnten WWW-Benutzer einen sog. Proxy Server auf vlager starten, der alle Anforderungen der Benutzer an die entsprechenden Server weiterleitet.

Das ist natürlich etwas umständlich, aber neben der ganzen Schreibarbeit, die Sie sich sparen, weil Sie keine IP-Adressen registrieren müssen, hat dieses Vorgehen noch den zusätzlichen Vorteil, daß es sich ausgezeichnet in ein Firewall-Konzept einpaßt. Firewalls sind dedizierte Hosts, die verwendet werden, um Benutzern Ihres lokalen Netzwerks eingeschränkten Zugang zum Internet zu verschaffen, ohne die internen Hosts Netzwerk-Attacken von außen auszusetzen.

Nehmen wir einmal an, die Brauerei hat die IP-Adresse 192.168.5.74 für den SLIP-Zugriff vorgesehen. Alles was Sie nun tun müssen, um die oben diskutierte Konfiguration zu realisieren, ist, diese Adresse in die Datei /etc/hosts einzutragen und sie vlager-slip zu nennen. Die Prozedur, wie der SLIP-Link hochgezogen wird, bleibt dabei unverändert.

Verwendung von dip

Nun, das war ja ziemlich einfach. Nichtsdestotrotz wollen Sie wahrscheinlich die obigen Schritte so automatisieren, daß Sie nur einen einzigen Befehl eingeben müssen, der dann all die oben aufgeführten Befehle durchführt. Genau das erledigt dip.

dip steht für Dialup IP. Geschrieben wurde es von Fred van Kempen. Als dieses Buch geschrieben wurde, war gerade die Version 3.3.7 aktuell. Das Programm wurde von einer ganzen Reihe von Leuten (z.T. sehr stark) gepatcht, so daß man nicht mehr von einem einzelnen dip-Programm sprechen kann. Die unterschiedlichen Entwicklungen werden hoffentlich in einer späteren Release zusammengefaßt.

dip bietet einen Interpreter für eine einfache Script-Sprache, mit der Sie Ihr Modem steuern, Leitungen in den SLIP-Modus schalten und die Schnittstellen konfigurieren können. Es ist recht einfach gehalten und eher restriktiv, reicht in den meisten Fällen aber aus. Neue Releases von dip könnten in Zukunft eine vielseitigere Sprache anbieten.

Um das SLIP-Interface konfigurieren zu können, benötigt dip Root-Privilegien. Es wäre nun sehr verlockend, dip mit Setuid auf root zu setzen, so daß alle Benutzer einen SLIP-Server anwählen können, ohne Root-Rechte zu besitzen. Das ist aber sehr gefährlich, weil die fehlerhafte Einrichtung von Interfaces und Default-Routen mit dip das Routing auf Ihrem Netzwerk zum Erliegen bringen könnte. Was aber noch schlimmer ist, ist die Tatsache, daß Sie Ihren Benutzern auf diese Weise die Möglichkeit geben, sich an jeden SLIP-Server anzuschließen, und so gefährliche Angriffe auf Ihr Netzwerk provozieren könnten. Wenn Sie es Ihren Benutzern also erlauben wollen, SLIP-Verbindungen aufzubauen, sollten Sie kleine Programme für jeden vorgesehenen SLIP-Server schreiben, die dip dann mit dem entsprechenden Script aufrufen, das die Verbindung sauber aufbaut. Diese Programme können dann bedenkenlos mit Setuid auf root gesetzt werden.

Ein Beispiel-Script

Nehmen wir an, daß cowslip der Host ist, zu dem Sie die SLIP-Verbindung aufbauen wollen, und daß Sie für dip ein Skript namens cowslip.dip geschrieben haben, das die Verbindung herstellt. Wir starten dip und übergeben den Script-Namen als Argument:

# dip cowslip.dip
DIP: Dialup IP Protocol Driver version 3.3.7 (12/13/93)
Written by Fred N. van Kempen, MicroWalt Corporation.
connected to cowslip.moo.com with addr 192.168.5.74
#
Das Script selbst ist in Beispiel 7--1 zu sehen.

Beispiel 7-1. dip-Beispiel-Script

#dip-Beispiel-Script zur Anwahl von cowslip
# setze lokale und entfernte Namen/Adressen
get $local vlager-slip
get $remote cowslip
port cua3                # wähle seriellen Port
speed 38400              # Geschwindigkeit auf Maximum
modem HAYES              # setze Modemtyp
reset                    # Modem und TTY rücksetzen
flush                    # Eingabepuffer leeren
# Wahl vorbereiten
send ATQ0V1E1X1\r
wait OK 2
if $errlvl != 0 goto error
dial 41988
if $errlvl != 0 goto error
wait CONNECT 60
if $errlvl != 0 goto error
# nun sind wir verbunden
sleep 3
send \r\n\r\n
wait ogin: 10
if $errlvl != 0 goto error
send Svlager\n
wait ssword: 5
if $errlvl != 0 goto error
send hey-joe\n
wait running 30
if $errlvl != 0 goto error
# wir sind eingeloggt, und die andere Seite setzt SLIP auf
print Connected to $remote with address $rmtip
default                  # dieser Link ist die Default-Route
mode SLIP                # wir wechseln nun auch in den SLIP-Modus
# im Fehlerfall hierhin verzweigen
error:
print SLIP to $remote failed.
Nachdem die Verbindung zu cowslip steht und SLIP aktiviert ist, trennt sich dip vom Terminal ab und geht in den Hintergrund. Sie können dann die normalen Netzwerkdienste über den SLIP-Link benutzen. Um die Verbindung zu beenden, müssen Sie den dip-Befehl mit der Kommandozeilen-Option -k aufrufen. Damit wird ein Hangup-Signal an dip gesendet, wobei die Prozeß-ID verwendet wird, den dip in der Datei /etc/dip.pid eingetragen hat:
# dip -k
Bei der von dip zur Verfügung gestellten Script-Sprache bezeichnen Schlüsselworte, denen ein Dollarzeichen vorangestellt ist, immer einen Variablennamen. dip besitzt eine ganze Reihe vordefinierter Variablen, die nachfolgend noch aufgeführt werden. Beispielsweise enthalten $remote und $local die Hostnamen der für den SLIP-Link verwendeten entfernten bzw. lokalen Hosts.

Bei den ersten beiden Befehlszeilen im Beispiel-Script werden get-Befehle verwendet, mit denen bei dip Variablen gesetzt werden. In diesem Fall wird der entfernte und der lokale Hostname auf vlager bzw. cowslip gesetzt.

In den nächsten fünf Befehlszeilen werden die Terminalleitung und das Terminal eingerichtet. reset sendet einen Reset-String an das Modem (bei Hayes-kompatiblen Modems ist dies der ATZ-Befehl). Der nächste Befehl leert den Eingabepuffer, so daß der Login-Dialog korrekt funktionieren kann. Dieser Dialog geht ist ziemlich simpel: dip wählt einfach 41988, die Telefonnummer von cowslip, und loggt sich unter dem Account Svlager mit dem Paßwort hey-joe ein. Der wait-Befehl veranlaßt dip, auf die Zeichenkette zu warten, die als erstes Argument übergeben wurde. Das zweite Argument bestimmt die Zeit, die auf diese Zeichenkette gewartet werden soll. Die in der Login-Prozedur eingestreuten if-Befehle prüfen, ob während der Ausführung irgendwelche Fehler aufgetreten sind.

Die nach dem Einloggen noch verbleibenden Befehle sind default, der den SLIP-Link als Default-Route für alle Hosts definiert, und mode, der den SLIP-Modus für diese Leitung aktiviert und das Interface und die Routing-Tabelle für Sie konfiguriert.

dip-Referenz

Obwohl es so weit verbreitet ist, ist dip bisher nicht besonders gut dokumentiert. Dieser Abschnitt enthält daher eine Referenz zu den meisten dip-Befehlen. Sie erhalten eine Übersicht aller Befehle, indem Sie dip im Testmodus starten und dann den help-Befehl eingeben. Um etwas zur Syntax eines Befehls zu erfahren, geben Sie den Befehl einfach ohne weitere Argumente ein (was natürlich bei Befehlen, die keine zusätzlichen Argumente benötigen, nicht funktioniert).

$ dip -t
DIP: Dialup IP Protocol Driver version 3.3.7 (12/13/93)
Written by Fred N. van Kempen, MicroWalt Corporation.
DIP> help
DIP knows about the following commands:
  databits default  dial     echo     flush  
  get      goto     help     if       init   
  mode     modem    parity   print    port   
  reset    send     sleep    speed    stopbits
  term     wait   
DIP> echo
Usage: echo on|off
DIP> _
Im gesamten folgenden Abschnitt zeigen die Beispiele, bei denen der DIP>-Prompt auftaucht, wie Sie einen Befehl im Testmodus eingeben müssen, und welche Ausgabe dieser Befehl dann erzeugt. Fehlt in Beispielen dieser Prompt, sollten Sie sie als Auszüge von Scripten betrachten.

Modembefehle

dip stellt eine ganze Reihe von Befehlen zur Verfügung, mit denen Sie Ihre serielle Leitung und Ihr Modem konfigurieren können. Die Funktion ist bei einigen Befehlen offensichtlich; beispielsweise wählt port den verwendeten seriellen Port an. Weitere solche Befehle sind speed, databits, stopbits und parity, mit denen Sie die gängigen Parameter der Leitung einstellen können.

Mit dem modem-Befehl können Sie den aktuellen Modemtyp wählen. Momentan ist HAYES (in Großbuchstaben!) der einzig unterstützte Typ. Sie müssen dip den Modemtyp bekanntgeben, weil es sonst die Befehle dial und reset nicht fehlerfrei ausführen kann. Der Befehl reset sendet einen Reset-String an das Modem. Dieser String ist vom verwendeten Modem abhängig. Bei Hayes-kompatiblen Modems lautet dieser String ATZ.

Mit dem flush-Befehl werden alle noch im Eingabepuffer befindlichen Antworten des Modems weggeworfen. Anderenfalls könnte das einem reset folgende Dialog-Script verwirrt sein, weil es die OKs früherer Befehle vorfinden würde.

Mit dem init-Befehl wählen Sie einen Initialisierungs-String, der an das Modem geschickt wird, bevor gewählt wird. Die Standardeinstellung für Hayes-Modems lautet »ATE0 Q0 V1 X1«, womit die Ausgabe (Echo) von Befehlen und langen Ergebniskodes unterdrückt wird und die »Blindwahl« (keine Prüfung des Wähltons) aktiviert wird.

Schließlich sendet der dial-Befehl einen Initialisierungs-String an das Modem und wählt den anderen Rechner an. Der Standard-Wählbefehl für Hayes-Modems lautet ATD.

echo und term

Der echo-Befehl dient als Debugging-Hilfe. Mit echo on werden von dip alle an das serielle Gerät geschickten Daten auch auf der Konsole ausgegeben. Diese Option können Sie mit dem Befehl echo off wieder abschalten.

dip erlaubt Ihnen, den Script-Modus kurzfristig zu verlassen und den Terminalmodus zu verwenden. In diesem Modus arbeitet dip wie ein normales Terminalprogramm, das Daten an die serielle Leitung schickt und von ihr liest. Mit Ctrl-] setzen Sie die Abarbeitung der Skripten fort.

Der get-Befehl

Mit dem Befehl get können Sie Variablen für dip setzen. Die einfachste Form ist, eine Variable auf einen konstanten Wert zu setzen, wie wir das bei cowslip.dip getan haben. Darüber hinaus können Sie aber auch Eingaben vom Benutzer anfordern, indem Sie das Schlüsselwort ask anstelle eines Wertes angeben:
DIP> get $local ask
Enter the value for $local: _
Eine dritte Möglichkeit ist, zu versuchen, den Wert vom entfernten Host zu erhalten. So seltsam das auf den ersten Blick auch erscheinen mag, so nützlich ist dies in manchen Fällen. Manche SLIP-Server erlauben Ihnen nicht die Verwendung einer eigenen IP-Adresse für den SLIP-Link, sondern weisen Ihnen beim Einwählen eine Adresse aus einem Adreß-Pool zu, wobei Sie eine Meldung erhalten, welche Adresse Ihnen zugewiesen wurde. Wenn die Nachricht in etwa die folgende Form hat Your address: 192.168.5.74, können Sie mit den folgenden Befehlszeilen Ihre Adresse ermitteln:
# finish login
wait address: 10
get $locip remote

Der print-Befehl

Mit diesem Befehl können Sie Texte auf die Konsole ausgeben, von der aus dip gestartet wurde. Auch die von dip verwendeten Variablen können in print-Befehlen verwendet werden:
DIP> print Using port $port at speed $speed
Using port cua3 at speed 38400

Variablennamen

dip versteht nur eine Reihe vordefinierter Variablen. Ein Variablenname beginnt immer mit einem Dollarzeichen und muß in Kleinbuchstaben geschrieben werden.

Die Variablen $local und $locip enthalten den lokalen Hostnamen und die IP-Adresse. Durch Setzen des Hostnamens werden der kanonische Hostname in $local und gleichzeitig die entsprechende Adresse in $locip gespeichert. Analog geht es auch beim Setzen von $locip vonstatten.

Die Variablen $remote und $rmtip speichern die entsprechenden Angaben für den entfernten Host. $mtu enthält den MTU-Wert dieser Verbindung.

Diese fünf Variablen sind die einzigen, denen Sie mit get direkt Werte zuweisen können. Eine Menge anderer Variablen kann nur über spezielle Befehle gesetzt, aber über print-Befehle ausgegeben werden: $modem, $port und $speed.

$errlvl ist die Variable, mit der Sie auf das Resultat des zuletzt ausgeführten Befehls zugreifen können. Ist der Wert null, ist die Operation erfolgreich durchgeführt worden, bei einem Wert ungleich null ist ein Fehler aufgetreten.

Die if- und goto-Befehle

Der Befehl if ist sehr einfach gehalten und erlangt nur eine bedingte Verzweigung an eine andere Stelle des Skripts. Die Syntax lautet:
if var op number goto label
Der Ausdruck darf nur ein einfacher Vergleich zwischen einer der Variablen $errlvl, $locip, $rmtip und einer ganzen Zahl sein. Der Operator op kann ==, !=, <, >, <= oder >= sein.

Mit dem goto-Befehl wird die Ausführung des Scripts in der Zeile fortgesetzt, die der das label enthaltenden Zeile folgt. Ein Label muß an der ersten Stelle einer Zeile beginnen, und es muß ihm unmittelbar ein Doppelpunkt folgen.

send, wait und sleep

Diese Befehle helfen bei der Implementierung einfacher Dialog-Scripten unter dip. send überträgt seine Argumente an die serielle Leitung. Variablen werden nicht unterstützt, wohl aber C-ähnliche Backslash-Sequenzen wie \n und \b. Das Tildezeichen (~) wird als Abkürzung für die Zeichenkombination Wagenrücklauf/Zeilenvorschub verwendet.

wait akzeptiert ein Wort als Argument und liest die Eingaben von der seriellen Schnittstelle, bis es dieses Wort findet. Das Wort selbst darf keine Leerzeichen enthalten. Optional können Sie wait einen Timeout-Wert (in Sekunden) als zweites Argument übergeben. Wird das gewünschte Wort nicht innerhalb dieser Zeit gefunden, bricht der Befehl ab und setzt die Variable $errlvl auf eins.

Mit dem sleep-Befehl können Sie die weitere Befehlsausführung für eine bestimmte Zeit anhalten, beispielsweise um das Ende einer Login-Sequenz abzuwarten. Auch bei diesem Befehl wird die zu wartende Zeit in Sekunden angegeben.

mode und default

Diese Befehle werden verwendet, um die serielle Leitung in den SLIP-Modus zu schalten und das Interface zu konfigurieren.

mode ist der letzte Befehl, der von dip ausgeführt wird, bevor es in den Dämon-Modus wechselt. Wenn kein Fehler auftritt, kehrt der Befehl nicht zurück.

mode erwartet einen Protokollnamen als Argument. dip akzeptiert momentan SLIP und CSLIP als gültige Werte. Leider kann die derzeitige Version von dip noch nicht mit adaptivem SLIP umgehen. Nachdem der SLIP-Modus für die serielle Leitung aufgesetzt wurde, führt dip den Befehl ifconfig aus, um das Interface zu konfigurieren. Danach wird noch route gestartet, um die Route zum entfernten Host einzurichten.

Wenn das Script vor dem mode-Befehl noch den default-Befehl ausführt, dann sorgt dip dafür, daß zusätzlich die Default-Route auch auf diesen SLIP-Link zeigt.

Der Server-Modus

Den SLIP-Client einzurichten war der schwierige Teil. Das Gegenteil davon, nämlich Ihren Host so zu konfigurieren, daß er als SLIP-Server arbeitet, ist wesentlich einfacher.

Eine Möglichkeit wäre, dip im Server-Modus zu betreiben, was Sie einfach durch die Eingabe von diplogin erreichen. Die Haupt-Konfigurationsdatei ist /etc/diphosts, bei der jeder Loginname mit der Adresse verknüpft ist, der der Host zugewiesen ist. Alternativ können Sie sliplogin verwenden, ein BSD-basiertes Tool, das ein wesentlich flexibleres Konfigurationsschema unterstützt. Dank dieses Schemas können Sie beliebige Shell-Scripten ausführen, wenn ein Host die Verbindung aufbaut oder beendet. Das Programm befindet sich gerade im Betatest.

Beide Programme erwarten, daß Sie einen Login-Account pro SLIP-Client einrichten. Nehmen wir mal an, Sie wollen Arthur Dent, der an dent.beta.com sitzt, mit SLIP-Diensten versorgen. Sie können einen Account namens denteinrichten, indem Sie die folgende Zeile in Ihre passwd-Datei aufnehmen:

dent:*:501:60:Arthur Dent's SLIP account:/tmp:/usr/sbin/diplogin
Das Paßwort für dentwürden Sie danach mit dem passwd-Utility einrichten.

Wenn sich dent nun einloggt, fährt dip als Server hoch. Um zu ermitteln, ob er wirklich berechtigt ist, SLIP zu verwenden, sucht das Programm den Benutzernamen in der Datei /etc/diphosts. Diese Datei enthält Angaben zu den Zugriffsrechten und Verbindungsparametern jedes SLIP-Benutzers. Beispielsweise könnte der Eintrag für dent wie folgt aussehen:

dent::dent.beta.com:Arthur Dent:SLIP,296
Das erste durch Doppelpunkte getrennte Feld enthält den Namen, unter dem sich der Benutzer einloggen muß. Das zweite Feld kann ein zusätzliches Paßwort enthalten (siehe unten). Im dritten Feld steht der Hostname oder die IP-Adresse des anrufenden Host. Als nächstes kommt ein Feld ohne besondere Bedeutung (noch). Das letzte Feld beschreibt die Verbindungsparameter. Dabei handelt es sich um eine durch Kommata getrennte Liste, die das verwendete Protokoll (momentan SLIP oder CSLIP) und die MTU enthält.

Loggt sich dent ein, extrahiert diplogin die erforderlichen Informationen über ihn aus der Datei diphosts. Ist das zweite Feld dabei nicht leer, wird nach einem »externen Sicherheitspaßwort.« gefragt. Der vom Benutzer eingegebene String wird mit dem (unverschlüsselten) Paßwort aus diphosts verglichen. Stimmen beide nicht überein, wird das Login verweigert.

Sonst schaltet diplogin die serielle Leitung in den CSLIP- oder SLIP-Modus und richtet das Interface und die Route ein. Die Verbindung wird so lange aufrechterhalten, bis der Benutzer seine Arbeit beendet, und das Modem die Leitung unterbricht. diplogin setzt die Leitungsparameter dann wieder zurück und beendet seine Operation.

diplogin benötigt Superuser-Privilegien. Läuft dip ohne Setuid root, sollte diplogin eine separate Kopie von dip erhalten und nicht nur einen einfachen Link. Auf diplogin kann dann ohne Bedenken Setuid angewandt werden, ohne den Status von dip selbst zu beeinträchtigen.


Inhaltsverzeichnis Kapitel 6 Kapitel 8