Wählleitungsverbindung mit Linux

von Robert Brunnthaler (Ausgabe 98/3, Oktober 1998)

 

Linux - das Betriebssystem, das "im Internet entstanden" ist - bringt natürlich alle Werkzeuge mit, die man braucht, um seinen Rechner per Modem ins Internet zu hängen. Es gibt kein "Standard-Linux", und alle am Markt befindlichen Distributionen werden mit eigenen (grafischen) Tools ausgeliefert, die den Internetzugang "vereinfachen" sollen. Falls Sie z.B. als grafische Oberfläche KDE verwenden, haben Sie mit kppp ein Windows 95-artiges Programm, mit dem Sie alle Einstellungen vornehmen können, die für den Verbindungsaufbau notwendig sind. Falls Sie schon eine funktionierende Internetanbindung für Ihren Linux-Rechner haben, brauchen Sie nichts zu ändern ("Never touch a running system!"). Diese Dokumentation beschreibt einen Weg, der auf jedem Linux-Rechner funktionieren sollte.

Was Sie brauchen: (oder: Wie Sie nachsehen, ob Sie es schon haben)

  • Sie brauchen einen funktionierenden Linux-Rechner, ein Modem, das mit dem Rechner und dem Telefonnetz verbunden ist, und eine Unet- oder Mailbox-UserID. Für den Linux-Rechner müssen Sie Systemadministrator-Rechte (das root-Paßwort) haben.
  • Die Programme pppd und chat müssen auf dem Linux-Rechner installiert sein. Diese Programme sind "normalerweise" in /usr/sbin installiert. Loggen Sie sich als root in Ihr System ein und suchen Sie mit which pppd und which chat danach. Entweder werden die Programme gefunden, oder Sie müssen sie nachinstallieren. Gehen Sie bei der Nachinstallation so vor, wie es Ihre Distribution verlangt (mittels yast bei S.u.S.E. oder rpm bei RedHat).
  • Sie brauchen PPP-Support im Kernel (fix oder als Modul).
    • Falls Sie Ihren Kernel selbst übersetzt haben, wissen Sie, daß es unter Network device support den Eintrag PPP (point-to-point) support gibt, den man aktivieren muß.
    • Falls Sie an Ihrem Kernel noch nicht selbst herumgebastelt haben, können Sie nur hoffen, daß der Kernel, den Sie standardmäßig booten, PPP-Support inkludiert hat. Wenn Sie beim ersten Versuch, eine Verbindung aufzubauen, die Meldung Sorry - this system lacks PPP kernel support auf den Bildschirm bekommen, ist dem nicht so. Sie müssen dann einen Kernel kompilieren (irgendwann muß man das sowieso). Lesen Sie bitte in Ihrem Lieblings-Linuxhandbuch nach, wie das geht. Eine Anleitung finden Sie auch in /usr/src/linux/README.

Damit Sie wissen, was Sie tun:

  • Das Programm pppd ("Point to Point Protocol Daemon") wird von der Kommandozeile gestartet, und man kann ihm eine Menge Optionen mitgeben, die für die Verbindung notwendig sind.
  • Um mit dem Modem kommunizieren zu können, brauchen Sie ein weiteres Programm (chat), welches aus dem pppd heraus gestartet wird.
  • Sie können sich beim Verbindungsaufbau auf zwei Arten authentifizieren: Entweder mit einem Skript, das sich mit unserem Terminalserver "unterhält", oder per PAP ("Password Authentication Protocol"). Damit dieses funktioniert, müssen Ihre UserID (= aMATRIKELNUMMER für Unet; für Mailbox gebildet aus den ersten Buchstaben des Nachnamens, dem Anfangsbuchstaben des Vornamens und einer oder zwei Ziffern - z.B. horvatk2) und das dazugehörige Paßwort in der Datei /etc/ppp/pap-secrets stehen.
  • In der Datei /etc/resolv.conf stehen die Nameserver. (Falls Ihre Linux-Box noch nie in einem Netz gehangen ist, haben Sie noch nie Nameserver gebraucht.) In den unendlichen Weiten des Internet findet sich Ihr Rechner ohne Nameserver nicht zurecht, da diese für die Übersetzung der kryptischen IP-Adressen (z.B. 131.130.107.2) in Namen (z.B. www.univie.ac.at) zuständig sind.

Los geht's!

Falls Sie über keine grafische Oberfläche verfügen, loggen Sie sich bitte auf zwei Konsolen (Konsolenwechsel mit <Alt>-F1-6, aber das wissen Sie sicher) als root ein. Falls Sie X-Windows installiert haben, machen Sie zwei xterm-Fenster auf und werden dort root (mit dem Befehl su).

Auf der zweiten Konsole oder im zweiten xterm-Fenster starten Sie tail -f /var/log/messages. Damit sind Sie immer am laufenden, was passiert: Sowohl pppd als auch chat schicken sehr viele Informationen an dieses File. Dieses tail -f können Sie die ganze Zeit laufen lassen - es dient nur dazu, eventuelle Fehlermeldungen auszulesen. Alles weitere hier Beschriebene machen Sie in der ersten Konsole bzw. dem ersten xterm-Fenster.

Editieren Sie die Datei /etc/resolv.conf und fügen Sie die Zeilen
nameserver 131.130.1.11
nameserver 131.130.1.12
ein. Dadurch werden die Nameserver der Uni Wien Ihrem Rechner bekanntgemacht.

Editieren Sie die Datei /etc/ppp/pap-secrets und fügen Sie die Zeile
a0815xyz uni abc123
ein. Statt a0815xyz geben Sie Ihre UserID auf dem Unet- oder Mailbox-Rechner ein, danach ein frei wählbares Wort, das die Verbindung kennzeichnet (uni ist keine schlechte Wahl), und statt abc123 das dazugehörige Paßwort. Sie sehen: Ihr Paßwort steht im Klartext in dieser Datei! Vergewissern Sie sich deshalb bitte mittels ls -l /etc/ppp/pap-secrets, daß diese Datei wirklich nur vom User root gelesen werden kann. Die Ausgabe sollte etwa so aussehen:
franzi:/root #ls -l /etc/ppp/pap-secrets -rw--- 1 root root 94 Sep 1 18:21 /etc/ppp/pap-secrets

Falls diese Datei andere Permissions hat, ändern Sie diese bitte mittels chmod 600 /etc/ppp/pap-secrets.

Jetzt wird?s ernst. Geben Sie bitte folgende Zeile ein (was das zu bedeuten hat, wird in der Tabelle erklärt):
franzi:/root #pppd -detach /dev/ttyS1 connect 'chat -v "" at\&f1 OK atdt0718914012 CONNECT' 38400 modem crtscts defaultroute user a0815xyz remotename uni

pppd

Damit wird der Point to Point Protocol-Dämon gestartet.

-detach

Damit wird der pppd nicht gleich in den Hintergrund geschickt (in unserem Fall sinnvoll, solange wir noch nicht sicher sind, ob alles so funktioniert, wie wir wollen).

/dev/ttyS1

Die serielle Schnittstelle, an der Ihr Modem hängt. /dev/ttyS0 steht für COM1 und /dev/ttyS1 für COM2 unter DOS bzw. Windows.

connect

Diese Option steht vor dem Programm, das mit dem Modem "spricht". In unserem Fall verwenden wir chat, und da wir chat auch einiges mitzugeben haben, muß alles unter einfachen Anführungszeichen (') stehen.

'chat -v ""
at\&f1 OK atdt0718914012
CONNECT'

chat wird gestartet. -v bewirkt, daß chat alles mitloggt - dadurch können wir im anderen Fenster, wo das tail -f /var/log/messages läuft, alles mitverfolgen. chat funktioniert ganz einfach: Abwechselnd wird gewartet und gesendet. In unserem Fall wartet das Modem zunächst auf nichts (""), sendet dann den Modeminit-String (mit at&f1 werden die meisten Modems in den "Ursprungszustand" versetzt), wartet auf ein OK, sendet dem Modem die Telefonnummer (atdt steht für "Los, Modem, wähle die folgende Nummer und benutze das Tonwahlverfahren") und wartet auf ein CONNECT - fertig.

38400

Die Geschwindigkeit der seriellen Schnittstelle. Sie sollten auch einen höheren Wert verwenden können (z.B. 115200). Mehr dazu finden Sie mit man setserial.

modem

Wir verwenden ein Modem.

crtscts

"Hardware Flow Control" wird verwendet.

defaultroute

Die Modemverbindung wird Ihre Default-Route, d.h. alle Datenpakete, die ans Internet gehen, werden über das Modem geschickt.

user a0815xyz

Da muß jetzt genau der Username stehen, den Sie in /etc/ppp/pap-secrets eingetragen haben.

remotename uni

Da muß jetzt das zweite Wort aus /etc/ppp/pap-secrets stehen.

Erläuterung der Linux-Befehlszeile für den manuellen Verbindungsaufbau

Nachdem Sie diese lange Zeile eingegeben haben, brauchen Sie nur noch <Enter> zu drücken, und das Modem sollte zu wählen beginnen und die Verbindung herstellen. Im Logfenster sollten Sie etwas in dieser Art sehen:

<tt>Sep 3 15:08:33 franzi pppd[197]: pppd 2.4.1 started by root, uid 0
Sep 3 15:08:34 franzi chat[200]: send (at&f1^M)
Sep 3 15:08:34 franzi chat[200]: expect (OK)
Sep 3 15:08:34 franzi chat[200]: at&f1^M^M
Sep 3 15:08:34 franzi chat[200]: OK - got it
Sep 3 15:08:34 franzi chat[200]: send (atdt0718914012^M)
Sep 3 15:08:34 franzi chat[200]: expect (CONNECT)
Sep 3 15:08:34 franzi chat[200]: ^M
Sep 3 15:08:52 franzi chat[200]: atdt0718914012^M^M
Sep 3 15:08:52 franzi pppd[197]: Serial connection established.
Sep 3 15:08:52 franzi chat[200]: CONNECT - got it
Sep 3 15:08:53 franzi pppd[197]: Using interface ppp0
Sep 3 15:08:53 franzi pppd[197]: Connect: ppp0 <-> /dev/cua1
Sep 3 15:09:00 franzi pppd[197]: Remote message:
Sep 3 15:09:03 franzi pppd[197]: local IP address 131.130.231.34
Sep 3 15:09:03 franzi pppd[197]: remote IP address 131.130.230.14</tt>

Geschafft, der Rechner ist Teil des Internet! Sie können hier auch auslesen, wo das chat-Skript unter Umständen Fehler hat, und diese vor dem nächsten Versuch ausbessern. Nachdem wir den pppd auf der ersten Konsole im Vordergrund laufen haben, ist diese "unbrauchbar". Stoppen Sie daher den Job mittels <Strg>-Z und schicken Sie Ihn mittels bg in den Hintergrund. Jetzt können Sie auch die erste Konsole wieder verwenden und z.B. mit ping www.univie.ac.at testen, ob die Verbindung wirklich funktioniert.

Beenden kann man die Verbindung mittels killall pppd - das Modem sollte sofort auflegen. Die oben angeführte lange Zeile (so sie funktioniert) ist die Basis unseres weiteren Vorgehens.

Und jetzt ohne Hände:

Nun wollen wir das Ganze automatisieren. Am einfachsten geht das, indem wir zwei Skripts schreiben, die die Verbindung auf- und abbauen. Damit diese Skripts nicht immer mit vollem Pfad aufgerufen werden müssen, erstellen wir sie in einem Verzeichnis, das im Pfad des Users root steht, z.B. /usr/sbin. Wechseln Sie in dieses Verzeichnis und benutzen Sie Ihren Lieblingseditor (vi), um eine neue Datei namens uniup zu erstellen. Diese Datei sollte folgendermaßen aussehen:

#!/bin/bash
pppd /dev/ttyS1 connect \
'chat -v "" at\&f1 OK atdt0718914012 CONNECT' \
38400 modem crtscts defaultroute \
user a0815xyz remotename uni

Was ist anders in der Zeile? Dieses #!/bin/bash ist dazugekommen, das muß da stehen. Das -detach schreiben wir nicht mehr rein - wir wollen ja, daß sich der pppd in den Hintergrund begibt. Die Backslashes (\) haben nur kosmetische Funktion, man könnte alles (außer #!/bin/bash) in eine Zeile schreiben. Stellen Sie bitte sicher, daß sich rechts von den Backslashes wirklich nichts befindet (auch kein Leerzeichen).

Die zweite Datei nennen wir unidown und die sieht so aus:

#!/bin/bash
killall pppd

Jetzt müssen wir diese beiden Dateien noch ausführbar machen:

chmod u+x uniup
chmod u+x unidown

Sie können jetzt jederzeit (als root!) die Wählleitungsverbindung mittels Aufruf von uniup aufbauen und mittels unidown beenden.