Marco Burmeister

  private Homepage



Einrichtung eines Dial-out-Servers mit SuSE Linux 5.1

(Dokument befindet sich noch im Beta-Stadium.)

Seite ist auf Bewährung:
Diese Seite ist schon länger nicht mehr inhaltlich aktualisiert worden.
Der Inhalt scheint mir inzwischen größtenteils nicht mehr benötigt zu werden.

Ein Linux System kann auch als Router für Internet-Zugänge aus dem eigenen Netz dienen. Wenn dies mittels Einwahlverbindung geschieht, die bei jedem Zugriff ggfs. neu aufgebaut wird, so spricht man von Dial-on-Demand. Dieses Dokument beschreibt eine mögliche Konfiguration eines solchen Routers unter SuSE Linux 5.1.

Die Seite ist in die folgenden Bereich eingeteilt:

Hinweis:
Die Nutzung der hier geschilderten Anleitung geschieht auf eigene Gefahr!




top Erklärung

Schematische Darstellung Der folgende Text erläutert die Installation eines Dial-on-Demand bzw. Dial-out - Servers auf Basis eines Modems. Als Provider für die Einwahl dient in diesem Beispiel die Hochschule.

Jede Anfrage von Rechnern aus dem Netz, die nicht in das eigene Netz gehören, wird durch diesen Dial-out-Server nach der Einwahl beim Provider in das Internet geleitet.

Die folgende schematische Darstellung verdeutlicht das Prinzip.

top Technischer Ablauf (stark verkürzte Darstellung)

Eine Anfrage, die den Linux-Dial-Out-Server (Linux-Router) erreicht (vom LAN oder local vom Server), die eine IP-Adresse anfordert, die nicht zum eigenen LAN gehört, wird an den Daemon kerneld weitergeleitet. Dieser ruft die die Datei /sbin/request-route y.y.y.y (y = im Netz unbekannte IP-Adresse) mit der im LAN unbekannten IP-Adresse als Parameter auf. Diese startet den PPP-Daemon und erhält dynamisch vom Provider eine IP-Adresse zugewiesen, um auf das Internet zugreifen zu können. Nach dem erfolgreichen Verbindungsaufbau wird die Anfrage an das Internet weitergeleitet.

Der Einsatz vom Masquerading ermöglicht es zum Beispiel einem Unternehmen, daß alle Benutzer nach außen mit einer IP-Adresse im Internet Surfen. Der außenstehende kann also nicht wissen, wieviele oder welcher Rechner aus dem Netzwerk die Daten aus dem Internet abfragen. Intern wird durch das Masquerading jedem Rechner das Daten-Paket zugeschickt, daß er auch angefordert hatte.

top Voraussetzungen

Ich gehe davon aus, daß ein lauffähiges Linux inklusive erfolgreich konfigurierter Netzwerkanbindung vorliegt! Die Konfiguration eines Masquerading oder Firewall bitte ich anderer Literatur zu entnehmen. Das Masquerading sollte bei der hier beschriebenen Konfiguration eingesetzt werden. Eine Installationsanleitung findet sich im SuSE-Handbuch.

Des weiteren gehe ich davon aus, daß grundlegende Linux-Kenntnisse vorhanden sind.

Folgendes muß installiert sein:

top Einstellungen im Kernel

Die folgenden Einstellungen im Kernel sollten aktiviert und anschließend das Kernel neu übersetzt werden. Bei den Netzwerkkarten ist entsprechend der eingebauten Netzwerkkarte die richtige Einstellung zu treffen.


* Code maturity level options
*
Prompt for development and/or incomplete code/drivers (CONFIG_EXPERIMENTAL)
[Y/n/?]

* Loadable module support
*
Enable loadable module support (CONFIG_MODULES) [Y/n/?]
Set version information on all symbols for modules (CONFIG_MODVERSIONS)
[N/y/?]
Kernel daemon support (e.g. autoload of modules) (CONFIG_KERNELD) [Y/n/?]
*
Networking support (CONFIG_NET) [Y/n/?]
*
* Networking options
*
Network firewalls (CONFIG_FIREWALL) [Y/n/?]
TCP/IP networking (CONFIG_INET) [Y/n/?]
IP: forwarding/gatewaying (CONFIG_IP_FORWARD) [Y/n/?]
IP: firewalling (CONFIG_IP_FIREWALL) [Y/n/?]
IP: masquerading (EXPERIMENTAL) (CONFIG_IP_MASQUERADE) [Y/n/?]
*
* Protocol-specific masquerading support will be built as modules.
*
IP: always defragment (CONFIG_IP_ALWAYS_DEFRAG) [Y/n/?]
IP: optimize as router not host (CONFIG_IP_ROUTER) [Y/n/?]
*
* Network device support
*
Network device support (CONFIG_NETDEVICES) [Y/n/?]
*
PPP (point-to-point) support (CONFIG_PPP) [M/n/y/?]
*
* CCP compressors for PPP are only built as modules.
*
Ethernet (10 or 100Mbit) (CONFIG_NET_ETHERNET) [Y/n/?]
NE2000/NE1000 support (CONFIG_NE2000) [Y/m/n/?]

top Einstellungen im SuSE Linux 5.1

Nach der Installation des PPP-Paketes und der Beispiel-Datei für PPP aus der SuSE-Distribution, gibt es im Verzeichnis etc ein Unterverzeichnis ppp.

In diesem sind die folgenden Dateien zu bearbeiten bzw. zu erstellen:

Datei Beschreibung
pap-secrets In eine Zeile den Benutzernamen (Login-Namen an der Hochschule), dann ein '*' und zum Schluß das Paßwort, durch ein [TAB] getrennt, eingeben.
Da diese Datei Paßworte enthält, sollte nur der Benutzer root Zugriff auf sie haben!
default Die Datei default ist neu anzulegen, kann aber auch ein Link auf eine bestehende Datei darstellen.
Sie dient später der eigentlichen Verbindungsaufnahme beim Provider, also der Hochschule.

Vor der Benutzung müssen in der Datei nach dem Aufruf OK ATDT*********** die Sternchen durch die Telefonnummer zum Provider ersetzt werden. Der Eintrag [3 Plus-Zeichen] ist durch drei echte Plus-Zeichen zu ersetzen. Die umständliche Schreibweise rührt daher, daß mein FTP-Programm beim Vorhandensein dieser Zeichen, diese HTML-Seite nicht uploaden wollte und die Verbindung zum Provider beendete.

TIMEOUT 30
ABORT "NO CARRIER"
ABORT BUSY
ABORT "NO DIALTONE"
ABORT ERROR
"" [3 Plus-Zeichen]ATZ
OK AT&FM0L0
OK ATDT***********
TIMEOUT 90
CONNECT ""

ppp-down Wenn nicht vorhanden sollte diese Datei auch erstellt werden, da hiermit eine bestehende PPP-Verbindung unterbrochen werden kann. Darum sollte auch nur der Benutzer root diese ausführen können.

#!/bin/sh
#
# /etc/ppp/ppp-down
# (c) Klaus Franken, S.u.S.E. GmbH Fuerth, Germany
# 12.06.97, kfr@suse.de

DEVICE=ppp0
FILE=/var/run/$DEVICE.pid

if test -r $FILE ; then
   echo "Killing PPP: $DEVICE"
   kill -INT `cat $FILE`
   if test $? != 0; then
      echo "WARNING: stale pid file or pppd still running"
      echo "         please check by hand"
      rm -rf $FILE
      exit 1
   fi
else 
   echo "PPP not running on $DEVICE"
   exit 2
fi
exit 0

options Wenn nicht vorhanden sollte diese Datei erstellt werden. Es werden hiermit Parameter an den PPP-daemon übergeben.
Der Parameter idle steht für die Zeit, die die Verbindung zum Provider aufrechterhalten wird, auch wenn keine Daten über die Leitung gehen. Steht der Parameter z.B. auf 500, so wird die Leitung zum Provider beendet, wenn 500 Sekunden lang keine Daten über die Leitung gehen.
Weitere Parameter sind in der Man-Page zu PPP zu finden.

idle 500

Weitere empfehlenswerte Einstellungen:
noipdefault
noauth
crtscts
lock
modem
asyncmap 0
nodetach
noproxyarp
noipx
novj
novjccomp

(Die genaue Bedeutung bitte ich der Man-Page zu entnehmen.)


Im Verzeichnis /sbin sollte dann die Datei request-route angepaßt oder erstellt werden.
Datei Beschreibung
request-route Als erstes sollte im Eintrag USER="************" durch an die Stelle der Login-Name eingetragen werden, der auch in der pap-secrets-Datei hinterlegt wurde. Er dient bei der Anmeldung beim Provider als Index dafür, welches Paßwort aus der Datei pap-secrets zur Authentifizierung gesendet werden soll.

Der Aufruf des PPP-Daemon (pppd) bewirkt folgendes:
Es sorgt für die richtige Device-, Modem-Geschwindigkeits- und Routing-Einstellungen beim Verbindungsaufbau. Der idle.disconnect-Parameter legt fest nach wie vielen Sekunden in denen keine Kommunikation zum Provider getätigt wurde, die Verbindung automatisch getrennt werden soll (hier: 180 Sekunden = 3 Minuten).

Die Datei sollte auch nur von dem Benutzer root ausführbar und lesbar sein!

#! /bin/sh
LOCK=/var/run/request-route.pid

PATH=/usr/sbin:$PATH	# for ppp-2.2*
export PATH


chatfile=/etc/ppp/$1

# Ergaenzung am 25.07.1998
#
[ ! -f $chatfile ] && chatfile=/etc/ppp/default


# if [ -f $chatfile ]
if [ ! -f $LOCK ] ; 
then
# DEBUG="debug"
  USER="****************"

  pppd $DEBUG connect "chat -f $chatfile" /dev/modem 115200 \
    idle-disconnect 180 modem defaultroute noipdefault 
    user $USER \ &

  #
  # Timer to be killed by ip-up, tunable! 
  # Check kerneld delay as well
  #
  sleep 60 &
  sleepid=$!
  echo $sleepid > $LOCK
  wait $sleepid
  rm -f $LOCK
  exit 0
else
  exit 1
fi

Darüber hinaus sollte der Nameserver (IP-Adresse: 192.109.135.70) der Hochschule im Linux-System definiert werden. Das sollte am besten mit dem Tool yast geschehen.

top Protokollieren der Verbindungsaufnahme zum Provider

Im Verzeichnis /etc/ppp sind in der Datei ip-up (ip-down) in Abhängigkeit vom verwendeten Device im Bereich ppp* oder ippp* die folgenden Einträge zu ergänzen:


Der Quelltext des o.g. Skripts findet sich in der folgenden Tabelle:
Datei Beschreibung
diallog Das u.a. Skript schreibt in die Datei /var/log/diallogging.log die Informationen, wann der Dial-On-Demand - Mechanismus einen Verbindungsaufbau zum Provider durchgeführt hat. Dafür muß dem Skript für den Benutzer und die Gruppe root bzw. dialout die Ausführungsberechtigung gegeben werden.

Protokolliert wird nur der Zeitpunkt (Uhrzeit und Datum) an dem eine Verbindung zum Provider etabliert wurde und wann diese wieder getrennt wurde.

#!/bin/sh
#
# Skript loggt die Telefonwahl aus meinem System
# Ziel: Kontrolle, wann rausgewaehlt wurde und wann
#       Telefon wieder aufgelegt wird.
#
# (c) Marco Burmeister
#

PARAMETER=$1

case "$PARAMETER" in

WAHL)
        echo . >> /var/log/diallogging.log
        echo "Rechner:" $HOSTNAME "waehlt am:" `date` >> 
/var/log/diallogging.log
        ;;
AUFL)
        echo "Rechner:" $HOSTNAME "legt auf:" `date` >> 
/var/log/diallogging.log
        echo . >> /var/log/diallogging.log
        ;;
esac
exit 0

top Dateirechte

Erläuterungen zu den Dateirechten finden sich auf meiner diald-Konfigurationsseite und können analog eingesetzt werden.

top Einstellungen beim Client im eigenen Netz (LAN)

Der Linux-Dial-Out-Server muß als Default-Gateway mit seiner IP-Adresse eingetragen sein.

top Links zum Thema Dial-on-Demand

Hinweis:
Für die Richtigkeit der Daten übernehme ich keine Gewähr!
Für den Inhalt von Internet-Seiten, auf die von dieser Seite verwiesen wird, übernehme ich keine Verantwortung!