| |
|
|
| |

pppd
PPP steht für "point to point protokoll" und dient dazu Netzwerkpakete über serielle Leitungen zu transportieren. In den Anfangstagen hat man dazu SLIP (serial line IP) verwendet, doch PPP ist wesentlich leistungsfähiger: es erlaubt die Authentisierung über das Protokoll und kann verschiedenste Netzwerkprotokolle über dieselbe Verbindung übertragen. Weiters können sich die 2 Stationen die eine Verbindung machen, verschiedene Verbindungsparameter "aushandeln".
Das funktioniert so: die eine Station macht Vorschläge über bestimmte Parameter und die andere kann diese Vorschläge entweder akzeptieren oder ablehnen.
Im Unix wird das PPP zur einen Hälfte vom Kernel unterstützt und zur anderen Hälfte von einem User Programm namens "pppd". "pppd" dient dabei sowohl als Programm mit dem andere Computer auf unseren "einwählen" können, als auch zum Aufbau von PPP Verbindungen zu anderen Einwahlservern.
Will man schnell mal eine PPP Verbindung aufbauen ohne sich lang Gedanken zu machen, kann man das bei den meisten Distributionen relativ bequem.
Das KDE Programm
kppp &
erlaubt z.B. die PPP Einrichtung und Einwahl unter X11. Eine andere "quick & dirty" Lösung ist das Konsole Programm "wvdial". als root:
wvdialconf /etc/wvdial.conf
joe /etc/wvdial.conf
wvdial
und schon sollte man online sein. (In beiden Fällen sollte man in /etc/resolv.conf auch einen "nameserver" eingetragen haben).
Hier wollen wir aber lernen wie wir die PPP Verbindung händisch aufbauen.
Dabei
/usr/sbin/pppd debug connect '/usr/sbin/chat -v -f blabla.chat' ttyS1 38400
crtscts modem defaultroute
würde versuchen eine PPP Verbindung über die serielle Leitung ttyS1 mit 38400 baud aufzubauen dabei "hardware handshake" verwenden (crtscts) und annehmen dass auf der seriellen Leitung ein Modem hängt sowie nach erfolgreicher Einwahl die "default route" des Rechners zur Gegenstelle setzt. Alle Internet-Pakete würden dann über diese Leitung laufen.
"debug" gibt an, dass wir genauere "logfiles" haben wollen. Diese landen je nach Distribution (d.h. je nach Konfiguration von "syslog") entweder in /var/log/messages oder /var/log/syslog oder /var/log/debug ... mit tail -f können wir die Ausgaben dort beobachten.
Besonders wichtig ist der Paramter "connect". Dahinter wird ein Programm angegeben, das den Aufbau der Verbindung übernimmt bevor wir überhaupt mit dem Gegenstellen PPP verbunden sind.
Dafür kann man verschiedenste Programme verwenden. Meist nimmt man dazu aber das Programm "chat". Hier sagen wir dem "chat" Programm es soll seine Instruktionen zum Aufbau der Verbindung aus dem File blabla.chat nehmen. Das File könnte z.B. so aussehen:
ABORT BUSY ABORT DIALTONE ABORT ERROR
- AT&F1 OK ATL1M1S0=0 OK ATDT07189160560
ogin: maxmeier@sil word: strenggeheim
Die erste Zeile enthält "strings" die, falls sie vom "chat" Programm "gesehen" werden zu einem sofortigen Abbruch führen.
Ab dann gibt es jeweils Paare von "expect" und "send" strings. Der eine string wird erwartet; d.h. "chat" wartet solange bis es die Zeichenkette OK sieht bevor es den string ATL1M1S0=0 sendet um dann wieder auf das OK zu warten etc. "chat" übernimmt also das was man sonst "händisch" eintippen würde. Das erste "-" Zeichen am Anfang besagt, dass "chat" hier auf nichts warten soll, sondern gleich das erste AT&F1 losschicken soll. (Welche AT Befehle man wirklich schickt hängt natürlich vom Modem ab.)
Nach dem ATDT Verbindungsaufbau warten wir auf den string "login:" (Das erste l lassen wir am besten weg damit spielt es keine Rolle ob es gross oder kleingeschrieben ist.) (Achtung: manche Dial-in-Server schicken als prompt nicht "login: " sondern "username: " Hier würde man dann an diese Stelle "name: " schreiben - am besten man versucht ein Login zuerst mal händisch mit "minicom" bevor man sein "chat script" schreibt)
Der letzte Teil ist das Passwort.
Manche Dial-in-Server geben gar keinen "login prompt" sondern erwarten, dass das Passwort und der Username über das PPP Protokoll selbst (also nicht schon wie hier vorher via "chat" Programm) überprüft werden. PPP kennt dabei verschiedene Protokolle zum überprüfen des Passwortes:
PAP ... einfachstes Protokoll. Das Passwort wird im Klartext übertragen.
CHAP ... Protokoll bei dem das Passwort via "challenge/response" überprüft wird. Es muss dabei nie im Klartext übertragen werden.
Will man z.B. die Authentisierung via PAP machen, so trägt man sich das Passwort ins File /etc/ppp/pap-secrets ein:
maxmeier@sil sil strenggeheim
"maxmeier@sil" wäre hier der Username. Der mittlere Eintrag ist dabei der Name des Remotesystems. Hat man mehrere Provider so kann man diese mit diesem Eintrag unterscheiden.
Als Paramter beim Aufruf von "pppd" gibt man an, welchen Namen das System mit dem man sich verbindet haben soll. z.B.:
remotename sil
Macht man die Authentisierung via PAP, so braucht man diese nicht im "chat script" machen. Man wartet nach dem ATDT einfach auf "CONNECT" und überlässt den Rest der Arbeit dem "pppd" Programm.
Da die Kommandozeilen für "pppd" Aufrufe oft sehr lang werden, gibt es (neben der Möglichkeit sich ein kurzes script zu schreiben) die Option, dass man alle üblicherweise verwendeten Einstellungen in das File:
/etc/ppp/options
schreibt. (Es schadet übrigens nicht sich das File mal anzuschaun. Manche Distributionen schreiben dort schon Werte rein... und die sind nicht immer ideal).
Neuere "pppd" Programme haben auch die Möglicheit mehrere "default files" für jeden Provider zu verwalten:
hat man z.B. ein File:
/etc/ppp/peers/sil
(das aufgebaut ist wie das "options" File ) dann kann man mit dem Aufruf:
pppd call sil
bewirken, dass alle Optionen für diesen Aufruf von /etc/ppp/peers/sil gelesen werden. (Achtung: die Optionen aus /etc/ppp/options werden AUCH berücksichtigt)
Ist eine PPP Verbindung erfolgreich aufgebaut, so gibt es ein Netzwerkinterface namens "ppp0" (hat man mehrere PPP Verbindungen dann natürlich ppp1 oder ppp2 usw..)
mit
ifconfig
kann man sich die Einstellungen anschauen. Die Peer Adresse die man aus dem "ifconfig" ersieht sollte man auf jeden Fall pingen können.
Klappt die Einwal nicht gleich so empfiehlt sich methodisches debuggen:
Zuerst schauen ob das "chat" funktioniert. (mit der Option -v schreibt "chat" immer ins Logfile worauf es gerade wartet und was es geschickt hat).
Nach dem "chat" beginnt die PPP Verhandlungsphase. Mit der "debug" Option sieht man hier auch was die beiden pppd so miteinander aushandeln wollen.
Will man Befehle ausführen die nach dem erfolgreichen Verbindungsaufbau abgearbeitet werden (z.B. "fetchmail" oder ähnliches) so kann man diese in das script /etc/ppp/ip-up eintragen. Das wird (mit den Eigenschaften der Verbindung als Parameter) nach dem Verbindungsaufbau von pppd als root user aufgerufen.
Zum Beenden der Verbindung "killt" man den pppd wieder. Hat man ohnehin nur einen kann man auch ganz brutal:
killall pppd
verwenden.
Selbst Einwahl Server mit pppd aufzubauen ist übrigens auch nicht schwierig. Man kann entweder den "pppd" ins file /etc/inittab eintragen oder ihn von Programmen wie "mgetty" starten lassen. Die Konfiguration ist ziemlich ähnlich wie bei der Einwahl..
EXERCISES:
* Versuche eine Dial-in-Verbindung zu deinem Provider aufzubauen. (Zuerst mit "minicom" händisch einwählen. Dann ein "chat script" entwerfen. Dann "pppd" mit den richtigen Parametern aufrufen.)
REFERENCES:
man pppd
man chat
PPP-HOWTO.txt
|
|
| |
|
|
|