ABSTRACT: pppd und chat werden kurz vorgestellt. kppp und wvdial werden erwaehnt. AUDIENCE: junior admin SYSTEM: any unix SECTION: basic unix commands AUTHOR: mond COPYRIGHT: GNU Free Documentation Licence http://www.gnu.org/licenses/fdl.txt PPP steht fuer "point to point protokoll" und dient dazu netzwerkpackete ueber serielle leitungen zu transportieren. in den anfangstagen hat man dazu SLIP (serial line IP) verwendet, doch PPP ist wesentlich leistungsfaehiger: es erlaubt die authentisierung ueber das protokoll und kann verschiedenste netzwerkprotokolle ueber die selbe verbindung uebertragen. weiters koennen sich die 2 stationen die eine verbindung machen verschiedene verbindungsparameter "aushandeln". das funktioniert so: die eine station macht vorschlaege ueber bestimmte parameter und die andere kann diese vorschlaege entweder akzeptieren oder ablehnen. im unix wird das PPP zur einen haelfte von kernel unterstuetzt und zur anderen haelfte user programm namens "pppd". pppd dient dabei sowohl als programm mit dem anderen computer auf usneren "einwaehlen" koennen 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 loesung ist das console programm "wvdial". als root: wvdialconf /etc/wvdial.conf joe /etc/wvdial.conf wvdial und schon sollte man online sein. (in beiden faellen sollte man in /etc/resolv.conf auch einen nameserver eingetragen haben). hier wollen wir aber lernen wie wir die ppp verbindung haendisch aufbauen. dabei /usr/sbin/pppd debug connect '/usr/sbin/chat -v -f blabla.chat' ttyS1 38400 \ crtscts modem defaultroute wuerde versuchen eine ppp verbindung ueber die serielle leitung ttyS1 mit 38400 baud aufbauen dabei hardware hanshake verwenden (certscts) und annehmen dass auf der seriellen leitung ein modem haengt. nach erfolgreicher einwahl die default route des rechners zur gegenstelle setzte. alle internet packete wuerden dann ueber 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 koennen wir die ausgaben dort beobachten. besonders wichtig ist der paramter "connect". dahinter wird ein programm angegeben das den aufbau der verbindung uebernimmt bevor wir ueberhaupt mit dem gegenstellen PPP verbunden sind. dafuer kann man verschiedenste programme verwenden. meist nimmt man dazu aber das program "chat". hier sagen wir dem chat programm es soll seine instruktionen zum aufbau der verbindung aus dem file blabla.chat nehmen. das file koennte 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 enthaelt strings die, falls sie vom chat programm "gesehen" werden zu einem sofortigen abbruch fuehren. ab dann gibt es jeweils paare von "expect" und "send" strings. der eine string wird erwarte. 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 uebernimmt also das was man sonst "haendisch" eintippen wuerde. 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 haengt natuerlich 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 dialinserver schicken als prompt nicht "login: " sondern "username: " hier wuerde man dann an diese stelle "name: " schreiben - am besten man versucht ein login zuerst mal haendisch 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 ueber das PPP protokoll selbst (also nicht schon wie hier vorher via chat programm) ueberprueft werden. PPP kennt dabei verschieden protokolle zum ueberpruefen des passwortes: PAP ... einfachstes protokoll. das passwort wird im klartext uebertragen. CHAP .. protokoll bei dem das passwort via challenge/response ueberprueft wird. es muss dabei nie im klartext uebertragen werden. will man z.b. die authentisierung via PAP machen so traegt man sich das passwort ins file /etc/ppp/pap-secrets ein: maxmeier@sil sil strenggeheim "maxmeier@sil" waere hier der username. der mittlere eintrag ist dabei der name des remotesystems. hat man mehrere provider so kann man die mit diesem eintrag unterscheiden. als paramter beim aufruf von pppd gibt man welchen namen das system mit dem man sich verbindet haben soll. z.b.: remotename sil macht man die authentisierung via PAP so bruacht man diese nicht im chat script machen. man warte nach dem ATDT einfach auf "CONNECT" und ueberlaesst den rest der arbeit dem pppd programm. da die kommandozeilen fuer pppd aufrufe oft sehr lang werden gibt es (neben der moeglichkeit sich ein kurzes script zu schreiben) die option dass man alle ueblicherweise verwendeten einstellungen in das file: /etc/ppp/options schreibt. (es schadet uebrigens 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 moeglicheit mehrer default files fuer jeden provider zu verwalten: hat man z.b. ein file: /etc/ppp/peers/sil (das aufgebaut ist wie der options files ) dann kann man mit dem aufruf: pppd call sil bewirken dass alle optionen fuer diesen aufuruf von /etc/ppp/peers/sil gelesen werden. (achtung: die optionen aus /etc/ppp/options werden AUCH beruecksichtigt) ist eine ppp verbindung erfolgreich aufgebaut so gibt es ein netzerkinterface namens "ppp0" (hat man mehrere ppp verbindungen dann natuerlich ppp1 oder ppp2 usw..) mit ifconfig kann man sich die einstellungen anschaun. die peer addresse die man aus dem ifconfig ersieht sollte man aufjeden fall pingen koennen) klappt die einwal nicht gleich so empfiehlt sich methodisches debugen: zuerst schaun ob das chat funktioniert. (mit der otion -v schreibt das chat immer ins logfile worauf es gerade warte und was es geschickt hat). nach dem chat begint die PPP verhandlungsphase. mit der "debug" option sieht man hier auch was die beiden pppd so miteinander aushandeln wollen.. will man befehle ausfuehren die nach dem erfolgreichen verbindungsaufabau abgearbeitet werden (z.b. fetchmail oder aehnliches) 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 uebrigens auch nicht schwer. man kann entweder den pppd ins file /etc/inittab eintragen oder ihn von programmen wie mgetty starten lassen. die configuration ist ziemlich aehnlich wie bei der einwahl.. EXERCISES: * versuche eine dialinverbindung zu deinem provider aufzauben. (zuerst mit minicom haendisch einwaehlen. dann ein chat script entwerfen. dann pppd mit den richtigen parametern aufrufen.) REFERENCES: man pppd man chat PPP-HOWTO.txt