Skip navigation

Linux User Group Oldenburg [Tux]

Internetzugang über Uni Oldenburg

Von Michael Granzow

Internet-Zugang mit Modem über den PPP-server des Hochschulrechenzentrums der Universität Oldenburg mit GNU/Linux.

Vorbemerkung:

Diese Seite ist nur eine praktische Gebrauchsanweisung. Details und Hintergründe zu Netzwerken unter GNU/Linux werden hier nicht beschrieben. Wen es nach mehr Information gelüstet, der sei auf die exzellenten Online-Dokumente verwiesen, die es zu diesem Thema gibt:

Da ihr um die beiden HOWTOs und das FAQ wohl kaum herumkommen werdet, sind sie in dem tar-file, das die weiter unten beschriebenen Konfigurations-Skripts enthält ebenso aufgenommen wie die Anleitung, die ihr gerade lest. Der Network Administrator's Guide hingegen ist mit seinen über 250 Seiten wohl mehr als abendliche Hintergrundlektüre geeignet (als solche aber sehr zu empfehlen). Bedingt durch seine Grösse ist er allerdings in mancher Hinsicht nicht mehr ganz auf dem neuesten Stand. Einige HOWTOs gibt es mittlerweile auch in deutscher Übersetzung. Schaut euch mal in ftp://ftp.gwdg.de/pub/linux/doc/howto/translations/de/html um. (anmerkung zum PPP-HOWTO)


Allgemeines:

Die PPP-Unterstützung besteht bei GNU/Linux aus mehreren Komponenten: zum einen dem PPP-Treiber im Kern, zum anderen dem PPP-Daemon auf User-Ebene sowie einem Programm zum Herstellen der Verbindung (Chat) und schließlich aus einer Handvoll Konfigurationsdateien, mit denen das Setup an das Modem und an den PPP-Server angepaßt wird.


Procedere:

Die folgenden Schritte müssen unternommen werden, bevor man sich einwählen kann:

  1. Anpassung des Kernels
  2. Installation von pppd (PPP Daemon) und chat (Programm zum Verbindungsaufbau)
  3. Editieren einiger System-Konfigurations-Dateien
  4. Erzeugen einiger PPP-spezifischen Dateien

Anpassung des Kernels

Wer noch keine Erfahrung mit dem Compilieren des Kernels hat: es genügt, sich an die Anleitung in /usr/src/linux/README zu halten. Wenn man allerdings verstehen will, was man macht, sollte man das Kernel HOWTO zu Rate ziehen. Die folgenden Variablen müssen mit make config (oder make xconfig) gesetzt werden (auszüge aus /usr/src/linux/.config; diese Datei wird automatisch mit make config erzeugt):

    CONFIG_MODULES=y
    CONFIG_KERNELD=y
    .
    .
    .
    .
    .
    .
    CONFIG_NET=y
    .
    .
    .
    ...
    CONFIG_INET=y
    .
    .
    .
    CONFIG_NETDEVICES=y
    CONFIG_PPP=m
    .
    .
    .
    CONFIG_SERIAL=m
    
Natürlich könnt ihr auch auf Kernel-Daemon und ladbare Kernel-Module verzichten, dann wäre `m' durch `y' zu ersetzen. Nach dem Übersetzen des Kernels muß der Rechner mit dem neuen Kernel gebootet werden.

Installation

Der pppd sowie chat sollten bei jeder Distribution im Lieferumfang enthalten sein. Hier sind pppd und chat über FTP zu beziehen.

Editieren von Dateien

Im Verzeichnis /etc müssen einige Dateien editiert werden:

/etc/host.conf:

    order hosts bind
    multi on
    
order gibt die Reihenfolge an, in der die Dienste zum ÜBersetzen von host names in IP-Nummern verwendet werden. Dies braucht ihr, wenn ihr nicht alle Nummern auswendig wißt, sondern manchmal auch dummy.hrz.uni-oldenburg.de o. ä. verwenden wollt. wie angegeben wird zuerst die Datei /etc/hosts konsultiert und dann - falls dies nicht zum erfolg geführt hat - der Berkeley Internet Name Domain Service (bind). letzterer benötigt einen nameserver, der in der datei

/etc/resolv.conf:

      domain uni-oldenburg.de
      nameserver 134.106.49.2
      nameserver 134.106.40.3
      nameserver 134.106.1.7
    
Beim Namen (eigentlich sollte man sagen bei der Nummer) genannt wird. nameservers sind Computer, die Rechnernamen in IP-Nummern übersetzten. Deshalb müssen zumindest ihre IP-Nummern lokal bekannt sein.

/etc/group: fügt die folgende Gruppe hinzu.

      ppp:x:15:ppp_user1,ppp_user2
    
ppp_user? ist natürlich durch die users zu ersetzen, die eine PPP-Verbindung in Gang setzen dürfen (wenn diese einmal besteht, kann jeder user sie benutzen).

Erzugen von Dateien

zieht euch
Diese tar-Datei, aus dem alle Konfigurationsdateien (fast :) unverändert übernommen werden können. Entpackt es anschließend als root in eurem Hauptverzeichnis (unter der Annahme, daß euer tar nicht aus großvaters zeiten stammt):
     etc/
     etc/ppp/
     etc/ppp/options
     etc/ppp/chap-secrets
     etc/ppp/pap-secrets
     etc/ppp/scripts/
     etc/ppp/scripts/ppp-on
     etc/ppp/scripts/ppp-off
     etc/ppp/scripts/ppp-on-dialer
     usr/
     usr/doc/
     usr/doc/howto/
     usr/doc/howto/HTML/
     usr/doc/howto/HTML/PPP-HOWTO-1.html
     [...]
     usr/doc/howto/HTML/toc.gif
     usr/doc/howto/HTML/procedere.html
    
Gestartet wird die PPP-Verbindung mit dem Shell-Skript /etc/ppp/scripts/ppp-on. Dieses setzt zunächst einige Variablen und ruft dann das Shell-Skript /etc/ppp/scripts/ppp-on-dialer auf. Zu den Variablen im einzelnen: In /etc/ppp/chap-secrets müßt ihr HRZ-NAME wie oben ersetzen und außerdem für HRZ-PASSWD das euch zugeteilte Paßwort eintragen. Die Datei /etc/ppp/ip-up dient dazu, einige Befehle, die immer dann ausgeführt werden sollen, wenn eine Internet-Verbindung hergestellt wurde, zu starten. Falls ihr diesbezüglich Wünsche habt (beispielsweise Mails abholen), so fügt die entsprechenden Kommandos hier ein (näheres im PPP-HOWTO).


Starten der Verbindung

nach all diesen Vorarbeiten kann nun die PPP-Verbindung aufgebaut werden:
    
da debug eine der Optionen ist, die pppd beim Aufruf übergeben werden, teilt pppd wichtige Informationen dem Syslog-Daemon mit. Dieser schreibt sie (meistens, siehe man syslogd) in die Datei /var/log/messages, die nur der Superuser lesen darf. Wenn die Verbindung wie vorgesehen aufgebaut wird, enthält /var/log/messages (ungefähr) die folgenden Zeilen:
    ...
    Jul 31 09:38:15 localhost kernel: CSLIP: code copyright 1989 Regents of the University of California
    Jul 31 09:38:15 localhost kernel: PPP: version 2.2.0 (dynamic channel allocation)
    Jul 31 09:38:15 localhost kernel: PPP Dynamic channel allocation code copyright 1995 Caldera, Inc.
    Jul 31 09:38:15 localhost kernel: PPP line discipline registered.
    Jul 31 09:38:15 localhost kernel: registered device ppp0
    Jul 31 09:38:15 localhost pppd[367]: pppd 2.2.0 started by pppuser, uid 007
    Jul 31 09:38:16 localhost chat[373]: timeout set to 3 seconds
    Jul 31 09:38:16 localhost chat[373]: abort on (\nBUSY\r)
    Jul 31 09:38:16 localhost chat[373]: abort on (\nNO ANSWER\r)
    Jul 31 09:38:16 localhost chat[373]: abort on (\nRINGING\r\n\r\nRINGING\r)
    Jul 31 09:38:16 localhost chat[373]: send (AT&F^M)
    Jul 31 09:38:16 localhost chat[373]: timeout set to 30 seconds
    Jul 31 09:38:16 localhost chat[373]: expect (OK)
    Jul 31 09:38:16 localhost chat[373]: AT&F^M^M
    Jul 31 09:38:16 localhost chat[373]: OK - got it
    Jul 31 09:38:16 localhost chat[373]: send (ATDT0441779010^M)
    Jul 31 09:38:16 localhost chat[373]: expect (CONNECT)
    Jul 31 09:38:16 localhost chat[373]: ^M
    Jul 31 09:38:38 localhost chat[373]: ATDT0441779010^M^M
    Jul 31 09:38:38 localhost chat[373]: CONNECT - got it
    Jul 31 09:38:38 localhost chat[373]: send (^M)
    Jul 31 09:38:38 localhost pppd[367]: Serial connection established.
    Jul 31 09:38:39 localhost pppd[367]: Using interface ppp0
    Jul 31 09:38:39 localhost pppd[367]: Connect: ppp0 <-> /dev/ttyS1
    Jul 31 09:38:39 localhost pppd[367]: sent [LCP ConfReq id=0x1 <mru 1500> <asyncmap 0x0> <magic 0x399bfbb7> &
lt;pcomp> <accomp>]
    Jul 31 09:38:40 localhost pppd[367]: rcvd [LCP ConfReq id=0x1 <mru 1524> <asyncmap 0xa0000> <auth chap md5>
<pcomp> <accomp> < 13 09 03 00 c0 7b 61 85 13> < 17 04 9c 00>]
    Jul 31 09:38:40 localhost pppd[367]: sent [LCP ConfRej id=0x1 < 13 09 03 00 c0 7b 61 85 13> < 17 04 9c 00>]
    Jul 31 09:38:40 localhost pppd[367]: rcvd [LCP ConfAck id=0x1 <mru 1500> <asyncmap 0x0> <magic 0x399bfbb7> &
lt;pcomp> <accomp>]
    Jul 31 09:38:40 localhost pppd[367]: rcvd [LCP ConfReq id=0x2 <mru 1524> <asyncmap 0xa0000> <auth chap md5>
<pcomp> <accomp>]
    Jul 31 09:38:40 localhost pppd[367]: sent [LCP ConfAck id=0x2 <mru 1524> <asyncmap 0xa0000> <auth chap md5>
<pcomp> <accomp>]
    Jul 31 09:38:40 localhost pppd[367]: rcvd [CHAP Challenge id=0x1 <2a4ef42fb5co9836c2b097ebb15eed7r>, name = "dialsrv1"]
    Jul 31 09:38:40 localhost pppd[367]: sent [CHAP Response id=0x1 <218beb7545deba68c2t2afc5ez3429303>, name = "HRZ-NAME"]
    Jul 31 09:38:41 localhost pppd[367]: rcvd [CHAP Success id=0x1 "\000"]
    Jul 31 09:38:41 localhost pppd[367]: Remote message:
    Jul 31 09:38:41 localhost pppd[367]: sent [IPCP ConfReq id=0x1 <addr 0.0.0.0> <compress VJ 0f 01>]
    Jul 31 09:38:41 localhost pppd[367]: rcvd [CCP ConfReq id=0x1 < 11 06 00 01 01 03>]
    Jul 31 09:38:41 localhost pppd[367]: sent [CCP ConfReq id=0x1]
    Jul 31 09:38:41 localhost pppd[367]: sent [CCP ConfRej id=0x1 < 11 06 00 01 01 03>]
    Jul 31 09:38:41 localhost pppd[367]: rcvd [IPCP ConfReq id=0x1 <compress VJ 0f 01> <addr 134.106.40.219>]
    Jul 31 09:38:41 localhost pppd[367]: sent [IPCP ConfAck id=0x1 <compress VJ 0f 01> <addr 134.106.40.219>]
    Jul 31 09:38:41 localhost pppd[367]: rcvd [proto=0x8031] 01 01 00 0a 03 03 01 07 03 00
    Jul 31 09:38:41 localhost pppd[367]: Unknown protocol (0x8031) received
    Jul 31 09:38:41 localhost pppd[367]: sent [LCP ProtRej id=0x2 80 31 01 01 00 0a 03 03 01 07 03 00]
    Jul 31 09:38:41 localhost pppd[367]: rcvd [proto=0x802b] 01 01 00 18 01 06 cf cf 12 34 02 08 00 c0 7b 61 85 13 04 04 00 00 06
02
    Jul 31 09:38:41 localhost pppd[367]: Unknown protocol (0x802b) received
    Jul 31 09:38:41 localhost pppd[367]: sent [LCP ProtRej id=0x3 80 2b 01 01 00 18 01 06 cf cf 12 34 02 08 00 c0 7b 61 85 13 04 0
4 00 00 06 02]
    Jul 31 09:38:41 localhost pppd[367]: rcvd [IPCP ConfNak id=0x1 <addr 134.106.40.228>]
    Jul 31 09:38:41 localhost pppd[367]: sent [IPCP ConfReq id=0x2 <addr 134.106.40.228> <compress VJ 0f 01>]
    Jul 31 09:38:41 localhost pppd[367]: rcvd [CCP ConfRej id=0x1]
    Jul 31 09:38:41 localhost pppd[367]: rcvd [IPCP ConfAck id=0x2 <addr 134.106.40.228> <compress VJ 0f 01>]
    Jul 31 09:38:41 localhost pppd[367]: local  IP address 134.106.40.228
    Jul 31 09:38:41 localhost pppd[367]: remote IP address 134.106.40.219
    
Entscheidend sind die Zeilen serial connection established und local IP address 134.106.40.228. Da der PPP-Server am HRZ IP-Adressen dynamisch vergibt, werdet ihr jedesmal eine andere bekommen. (Anmerkung zu unknown protocol) das Programm ifconfig gibt Auskunft über das nun vom pppd konfigurierte network interface:
    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.106.40.228  P-t-P:134.106.40.219  Mask:255.255.0.0
              UP POINTOPOINT RUNNING  MTU:1524  Metric:1
              RX packets:12 errors:0 dropped:0 overruns:0
              TX packets:11 errors:0 dropped:0 overruns:0
    
Weitere Information liefert der Aufruf von netstat:
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
    134.106.40.219  *               255.255.255.255 UH     1524 0          0 ppp0
    loopback        *               255.0.0.0       U      3584 0          0 lo
    default         134.106.40.219  0.0.0.0         UG     1524 0          0 ppp0
    
Nun ist euer Internet-Zugang hergestellt und die PPP-Verbindung wird als default route verwendet. viel spaß beim surfen ... aber denkt an die Telefonrechnung!

Auf Dauer wird es euch nerven, ständig die lange Zeile /etc/ppp/scripts/ppp-on& zu tippen. Daher hier ein etwas komfortableres Skript für einen ppp_user

Hier noch zwei wichtige Links: Informationen bei SSC und w3: Eine Erweiterung, die aus Emacs einen WWW-Browser macht.


Sicherheit:

An dieser Stelle seien noch ein paar Worte zur Sicherheit eures Internet-Zugangs gesagt:

Generell solltet ihr bedenken, daß PPP ein bidirektionales Protokoll ist. Das heißt, daß durch die Herstellung einer PPP-Verbindung einerseits euer Computer Zugriff auf das Netz erhält, andererseits aber auch alle Rechner des Internets auf euren Computer zugreifen können. Wie Weit dieser Zugriff geht, könnt ihr aber durch sogenanntes Wrapping von Internet-Services mit Hilfe des Programmes tcpd sehr genau kontrollieren. Detaillierte Beschreibungen hierfür finden sich auf der manual (8) page von tcpd und der man (5) page von hosts_access. Wer auf Nummer sicher gehen will, ersetzt zunächst in der Datei /etc/inetd.conf in den Zeilen der zu schützenden Dienste in der sechsten spalte den direkten Aufruf des jeweiligen Programmes durch /usr/sbin/tcpd (bzw. den absoluten Pfadnamen des tcpd-Programmes in eurem Filesystem) und legt die Datei /etc/hosts.deny mit folgendem inhalt an

    ALL: ALL
    
Um sich selbst nicht auch auszubooten, sollte man /etc/hosts.allow wie folgt editieren:
    ALL: 127.0.0.1
    
(Denkt an die abschßießenden newline characters; um inetd zu veranlassen, das aktualisierte /etc/inetd.conf file einzulesenüßmüßt ihr ihm das signal HUP schicken: kill -H<P , wob<i durch die Prozeßnummer von inetd zu ersetzen ist). Wollt ihr einigen hosts (oder domains) den Zugriff erlauben, so konsultiert die oben erwähnten Manpages oder den Network Administrator's Guide (Abschnitt 9.2). Auf jeden Fall solltet ihr dann die Dateien /etc/hosts.equiv und ~/.rhosts überprüfen (vgl. NAG, Abschnitt 9.5). Womöglich konfiguriert eure Distribution den Netzwerzugriff ohnehin sehr sicher und ihr müßt euch um diese Frage gar keine Gedanken machen. Das mindeste, was ihr jedoch tun müßt, ist alle Accounts mit einem Paßwort zu schützen.


Bei Fragen, Unklarheiten oder Anmerkungen wendet euch bitte direkt an den Autor dieser Seite.

Fußnoten