Universität Hamburg - Fachbereich Informatik - Rechenzentrum - Software

PPP unter Linux

Zusammenfassung

Anhand der S.u.S.E. Linux-Distribution 4.2 vom Mai 1996 wird beschrieben, wie mit PPP eine IP-Verbindung zum Modem-Server im Informatik- bzw. Universitäts-Rechenzentrum aufgebaut werden kann.

Was ist PPP?

Wie SLIP (Serial Line Internet Protocol) bietet auch PPP (Point to Point Protocol) die Möglichkeit, TCP/IP über eine serielle Leitung zu fahren. PPP bietet jedoch eine Menge Optionen, die bei dem älteren SLIP nicht verfügbar sind. Client und Server können sich beim Verbindungsaufbau über diverse Protokollparameter verständigen, der Server kann dem Client seine eigene IP-Adresse mitteilen und ihm eine IP-Adresse zuordnen.

Außderdem ist PPP im Gegensatz zu SLIP ein definierter Standard ( RFC 1661) und wird von den meisten Internet-Providern wie auch vom Universitäts-Rechenzentrum (für alle Angehörigen der Universität) und vom Informatik-Rechenzentrum (nur für Mitarbeiter) als Einwahlmöglichkeit angeboten.

Benötigte Software

Die Voraussetzungen für PPP-Nutzung sind: Eine zentrale Rolle bei PPP spielt der PPP-Daemon pppd, über den die PPP-Devices konfiguriert werden und der sowohl als Client als auch als Server genutzt werden kann. Hier wird jedoch nur beschrieben, wie eine Verbindung zum PPP-Server im Informatik- bzw. Universitäts-Rechenzentrum aufgebaut werden kann.

Konfiguration des Nameserver-Zugriffs

Um nach erfolgreichen Aufbau der PPP-Verbindung externe Rechner mit ihren Namen ansprechen zu können, sollte man zunächst einige Konfigurationsdateien im Directory /etc anpassen:

Verbindungsaufbau zum PPP-Server

Eine PPP-Verbindung wird in zwei Schritten aufgebaut. Der PPP-Daemon pppd stellt zunächst mit Hilfe des Dialogprogramms chat die Verbindung zwischen dem lokalen Modem (in dem folgenden Beispiel dev/cua1, also die zweite serielle Schnittstelle) und dem Telefonanschluß in der Universität her. Wenn die Verbindung steht, wickelt chat noch das Einloggen beim Server ab und übergibt dann die Kontrolle wieder dem PPP-Daemon. Dieser initiiert anschließend das PPP-Protokoll.

Der Aufruf von PPP kann mit dem folgenden Shell-Skript /usr/sbin/ppp-on geschehen (Der Parameter debug in der Environment-Variable $PPPFLAGS kann nach erfolgreichem Test entfernt werden):

fairport# cat /usr/sbin/ppp-on
#!/bin/sh -x
#	ppp-on
#	Set up a PPP link
#
LOCALIP=0.0.0.0
REMOTEIP=
DEVICE=cua2
PPPFLAGS="38400 modem debug defaultroute"

LOCKDIR=/var/spool/uucp
if [ -f $LOCKDIR/LCK..$DEVICE ]
then
   echo "/dev/$DEVICE is locked" 2>&1
   exit 1
fi
chown root /dev/$DEVICE
chmod 666 /dev/$DEVICE

exec /usr/sbin/pppd lock connect \
   '/usr/sbin/chat -v -f /etc/ppp/ppp.chat' \
   /dev/$DEVICE $PPPFLAGS $LOCALIP:$REMOTEIP
Bei manchen Linux-Distributionen stehen die Programme pppd und chat in anderen Directories als /usr/sbin, z.B. in /usr/etc. In diesem Fall muß man das obige Skript entsprechend anpassen.

Die Argumente für das Programm chat habe ich der Übersichtlichkeit halber in eine externe Konfigurationsdatei /etc/ppp/ppp.chat geschrieben. Sie könnten auch direkt als Argumente von chat angegeben werden; dann könnte allerdings ein Dritter mit dem Kommando ps nachsehen, welche Prozesse gerade ablaufen und dabei das PPP-Loginpaßwort mitlesen.

In /etc/ppp/ppp.chat wird spezifiziert, wie die Modemverbindung von chat aufgebaut werden soll und vor allem, welche Telefonnummer angerufen wird, 5494-19 in der Informatik oder 41532 im Universitäts-Rechenzentrum. Beides sind Sammelrufnummern, die den Anruf auf einen freien Anschluß schalten. Weiter müssen die Userid, wie z.B. Pin5z999 in der vorletzten Zeile nach dem \q und in der letzten Zeile das dazugehörige Passwort (meines ist natürlich nicht TopScret!) zum Einloggen am Modemserver angegeben werden:

fairport# cat /etc/ppp/ppp.chat
ABORT "NO CARRIER"
ABORT BUSY
ABORT "NO DIALTONE"
ABORT ERROR
"" +++ATZ
OK ATDT04041532
CONNECT ""
ogin:--ogin: \qPin5z999
word: TopScret
Sind alle Dateien richtig konfiguriert, so reicht nun der Aufruf von /usr/sbin/ppp-on, um die PPP-Verbindung aufzubauen.

Der Verbindungsaufbau wird über den Syslog-Daemon mitprotokolliert. Das Protokoll kann z.B. in der Datei /var/adm/messages, in /var/log/messages oder in /var/log/ppp-log stehen. Welche Protokolldatei verwendet wird, ist je nach Linux-Distribution verschieden und kann in der Datei /etc/syslog.conf nachgesehen bzw. geändert werden. Ansehen kann man sich dann den Aufbau der PPP-Verbindung und eventuelle Fehlermeldungen mit z.B. dem Kommando

fairport# tail -f /var/log/messages
in einem extra Terminal-Fenster. Außerdem kann man mit den Programmen ifconfig und netstat prüfen, ob die PPP-Leitung konfiguriert und ein Routing-Eintrag für das PPP-Interface definiert ist, etwa bei einer Verbindung über das Universitäts-Rechenzentrum:
fairport# ifconfig -a
lo   Link encap:Local Loopback  
     inet addr:127.0.0.1  Bcast:127.255.255.255  Mask:255.0.0.0
     UP BROADCAST LOOPBACK RUNNING  MTU:3584  Metric:1
     RX packets:0 errors:0 dropped:0 overruns:0
     TX packets:0 errors:0 dropped:0 overruns:0

ppp0 Link encap:Point-Point Protocol  
     inet addr:134.100.43.157  P-t-P:134.100.41.253  Mask:255.255.0.0
     UP POINTOPOINT RUNNING  MTU:1524  Metric:1
     RX packets:9 errors:0 dropped:0 overruns:0
     TX packets:9 errors:0 dropped:0 overruns:0

fairport# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
134.100.41.253  0.0.0.0         255.255.255.255 UH     1524 0          0 ppp0
127.0.0.0       0.0.0.0         255.0.0.0       U      3584 0          0 lo
0.0.0.0         134.100.41.253  0.0.0.0         UG     1524 0          0 ppp0
oder in die Informatik:
fairport# ifconfig -a
lo   Link encap:Local Loopback  
     inet addr:127.0.0.1  Bcast:127.255.255.255  Mask:255.0.0.0
     UP BROADCAST LOOPBACK RUNNING  MTU:3584  Metric:1
     RX packets:0 errors:0 dropped:0 overruns:0
     TX packets:0 errors:0 dropped:0 overruns:0

ppp0 Link encap:Point-Point Protocol  
     inet addr:134.100.8.224  P-t-P:134.100.8.220  Mask:255.255.0.0
     UP POINTOPOINT RUNNING  MTU:1500  Metric:1
     RX packets:89 errors:1 dropped:1 overruns:0
     TX packets:118 errors:0 dropped:0 overruns:0

fairport# /tmp# netstat -rn
Kernel IP routing table
Destination   Gateway       Genmask         Flags  MSS Window irtt Iface
134.100.8.220 0.0.0.0       255.255.255.255 UH    1500 0         0 ppp0
127.0.0.0     0.0.0.0       255.0.0.0       U     3584 0         0 lo
0.0.0.0       134.100.8.220 0.0.0.0         UG    1500 0         0 ppp0

Beenden der PPP-Sitzung

Die PPP-Verbindung wird abgebaut, wenn der PPP-Daemon beendet wird. Hierzu schickt man ihm ein Interrupt-Signal. Dies geht bequem mit dem mitgeliefertem Shell-Skript /usr/sbin/ppp-off:
#!/bin/sh

DEVICE=ppp0

#
# If the ppp0 pid file is present then the program is running. Stop it.
if [ -r /var/run/$DEVICE.pid ]; then
        kill -INT `cat /var/run/$DEVICE.pid`
#
# If unsuccessful, ensure that the pid file is removed.
#
	if [ ! "$?" = "0" ]; then
		echo "removing stale $DEVICE pid file."
		rm -f /var/run/$DEVICE.pid
		exit 1
	fi
#
# Success. Terminate with proper status.
#
        echo "$DEVICE link terminated"
	exit 0
fi
#
# The link is not active
#
echo "$DEVICE link is not active"
exit 1

Weitere Dokumentation


Document: http://www.informatik.uni-hamburg.de/RZ/software/linux/ppp/ppp.html
Last updated: Thu Dec 14 12:52:08 CET 2000
Reinhard Zierke zierke@informatik.uni-hamburg.de