ADSL unter Linux

15.02.2002 von Holger Reibold
Für professionelle und semiprofessionelle Internet-Nutzer führt an einem ADSL-Anschluss kaum noch ein Weg vorbei. Die Einrichtung des High-Speed-Zugangs ist unter Linux jedoch mit einigen Hürden verbunden.

Schon immer galt Linux als ausgesprochenes Netzwerk-Betriebssystem, da es von Anfang an als solches konzipiert und entwickelt wurde. Linux kann nicht nur mit großen zu übertragenden Datenmengen umgehen. In Netzwerken übernimmt es oft als Router oder Gateway zentrale Aufgaben.

Damit eignet sich Linux sehr gut für die Anbindung ans Internet. Soll der Zugang per ADSL erfolgen, sind aber einige Hürden zu nehmen. Die erste beginnt bereits bei der Wahl des geeigneten Treibers und dessen Installation. Beim Einbinden der Netzwerkkarte und deren Aktivierung gilt es, einige wichtige Punkte zu beachten.

Auch wenn vieles von den Installationsroutinen der Distributionen automatisch erledigt wird, lohnt sich ein Blick in die Log-Files, die bei den einzelnen Arbeitsschritten angelegt werden. Speziell beim Verbindungsaufbau und den ersten Tests können Sie Fehlern so auf die Schliche kommen. Angefangen von diesen Punkten bis hin zum Verbindungsaufbau via manueller oder automatischer Einwahl finden Sie auf den folgenden Seiten die wichtigsten Informationen zur Nutzung der ADSL-Technologie unter Linux.

Treibervarianten

Das beim Einsatz von ADSL in Deutschland am häufigsten eingesetzte Übertragungsprotokoll PPPoE ist im RFC2516 ("A Method for Transmitting PPP Over Ethernet") definiert. Linux unterstützt dieses Übertragungsprotokoll bereits seit längerem. Es sind mittlerweile drei populäre Treibervarianten gebräuchlich:

Keine so große Popularität wie der Roaring-Penguin-Treiber hat der Kernel-2.2-Treiber erlangt, weil ihm einige wichtige Funktionen fehlen. Daher wird er auch schon seit einiger Zeit nicht mehr weiterentwickelt.

Der Kernel-2.4-Treiber ist der Neueste unter den PPPoE-Treibern. Er wurde, wie an seiner Bezeichnung abzulesen ist, für den 2.4er Kernel entwickelt. Schon heute ist absehbar, dass dieser Treiber in naher Zukunft den Standard unter den PPPoE-Implementationen bilden wird. Durch das Kernel-Konzept weist er beachtliche Vorteile gegenüber dem Userspace-Treiber rp-pppoe auf. So müssen die Daten nicht Ressourcen verbrauchend zwischen Userspace und Kernel umkopiert werden. Damit werden Router beziehungsweise Zugangsrechner erheblich entlastet.

Einzig empfehlenswert: Roaring Penguin

Der Haken am Kernel-2.4-Treiber ist, dass er sich derzeit nicht für den kritischen Einsatz empfiehlt. Die Kernel-Entwickler stufen den Treiber immer noch als experimentell ein, so dass das Patchen der Point-to-Point-Software pppd (ppp- Daemon) erforderlich ist. Dieser Patch wird erst in der Version 2.4.2 des pppd Einzug halten.

Somit ist der Roaring-Penguin-Treiber der einzige zurzeit - auch für den kritischen Einsatz - empfehlenswerte Treiber. Er lässt kaum Wünsche offen. So bietet er beispielsweise umfangreiche Diagnosemöglichkeiten und eine Unterstützung von Dial-on-Demand. Bei der Konfiguration des Systems bietet er einen großen Vorteil: Das Patchen beziehungsweise Neukompilieren des Linux-Kernels und der pppd-Software entfällt. Dadurch werden speziell bei unerfahrenen Administratoren potenzielle Fehlerquellen ausgeschlossen.

Der Userspace-Treiber rp-pppoe läuft außerhalb des Kernels. Damit ist er unabhängig von der verwendeten Kernel-Version. Deshalb bietet dieser Treiber auch die einzige Möglichkeit, einem betagten Linux-System, zum Beispiel mit einem 2.0er Kernel, zur PPPoE-Unterstützung zu verhelfen.

Installation

Unter Linux gibt es meist zwei Wege zur Software-Installation: Zum einen kann man die gewünschte Software von den Distributions-CDs einspielen oder aus den Quelltexten übersetzen.

Empfehlenswert ist, die rp-pppoe-Komponenten der jeweiligen Distribution einzurichten. In diesem Fall sollte man darauf achten, dass man mindestens die Version 2.8 des Treibers verwendet. Ältere Versionen weisen zum Teil erhebliche Sicherheitslücken auf.

Für die manuelle Einrichtung lädt man sich die aktuelle Version der Treiber herunter, kopiert diese in ein beliebiges Verzeichnis, beispielsweise nach /usr/src/packages/SOURCES, und entpackt sie dann:

tar xvfz rp-pppoe-3.3.tar.gz

Anschließend wechselt man in das neu erzeugte Verzeichnis und führt die Befehle für die Übersetzung der Quelltexte und die anschließende Installation aus:

./configure
make
make install

Die Installationsroutine fragt nun noch, ob adsl-setup ausgeführt werden soll. Das sollte man an dieser Stelle zunächst verneinen. Denn neben dem PPPoE-Treiber für den Zugang ist auch der PPP-Daemon (pppd), der Point-to-Point-Verbindungen in einem Linux-System regelt, erforderlich. Ob dieser auch installiert ist, können Sie mit dem Kommando pppd --version   überprüfen.

Folgt dem Befehl eine Fehlermeldung, ist der pppd nicht im System installiert. Bei diesem Modul handelt es sich um Standard-Software, die bei allen Distributionen enthalten ist und sich entsprechend auch nachträglich installieren lässt.

Treiberaktivierung der Netzwerkkarte

Für den ADSL-Zugang ist eine Netzwerkkarte erforderlich, die über ein 1:1-verschaltetes CAT5-PATCH-Kabel an das ADSL-Modem angeschlossen wird. Über die ADSL-Leitung ist das Modem direkt mit dem so genannten DSLAM in der Vermittlungsstelle verbunden. Im DSLAM hat jeder Kunde einen eigenen Port, mit dem er ständig in Kontakt steht. Aus diesem Grund sollte man das ADSL-Modem nicht ausschalten.

Die eigentliche Netzwerkverbindung erfolgt nicht über Ethernet und damit auch nicht über das Netzwerk-Device der Karte. Die TCP/IP-Netzwerkverbindung wird mit dem pppd (Point-to-Point-Daemon) aufgebaut, also über ein PPP-Device. Daher braucht die Netzwerkkarte nicht komplett mit IP-Adresse et cetera konfiguriert zu werden. Es reicht aus, sie zu aktivieren, damit die PPPoE-Software die Karte ansprechen kann.

Um die Karte zu aktivieren, ist der Treiber der Netzwerkkarte erforderlich. Alle aktuellen Distributionen binden zusätzliche Treiber als Kernel-Module in das System ein, so dass Sie den Kernel nicht neu kompilieren müssen. Ferner erkennen die meisten Distributionen die Karte schon bei der Installation. Aber auch ein nachträgliches Aktivieren ist kein Problem. Am einfachsten geschieht die Treibereinbindung über das Konfigurationsprogramm der Distribution.

Einbindung der Netzwerkkarte

Nachdem der Treiber aktiviert wurde, gilt es, dem System die Netzwerkkarte bekannt zu machen. Dies erfolgt mit folgendem Befehl über die Kommandozeile:

ifconfig eth1 up

Dabei wird die zweite Netzwerkkarte im System für den PPPoE-Zugang konfiguriert. Alle weiteren Beispiele beziehen sich ebenfalls immer auf die zweite Netzwerkkarte. Befindet sich nur eine Karte im System, so setzen Sie an Stelle von eth1 immer eth0 ein. Um die Karte dauerhaft mit dem distributionseigenen Konfigurationstool zu aktivieren, ist eine Pseudo-Netzwerkinstallation durchzuführen. Sonst aktiviert Linux die Karte nicht automatisch.

Dabei bestehen die meisten Programme auf der Eingabe einer IP-Adresse für die Netzwerkkarte. Da ja diese Adresse für die PPPoE-Verbindung keinerlei Bedeutung hat, können Sie sie beliebig wählen. Sie sollte im eigenen Netzwerk nicht schon vergeben sein, da es sonst zu Konflikten kommt. Mögliche Beispieladressen sind 1.1.1.1 oder 10.10.10.10.

Test der Hardware

Im nächsten Schritt sollten Sie die Hardware und die Verkabelung einem ersten Test unterziehen. Dazu dient der Befehl:

pppoe -A -I eth1

Er überprüft die Verbindung zum Access-Concentrator. Wenn alles korrekt verkabelt und der Port auf Seiten der Telefongesellschaft aktiviert ist sowie die Treiber der Netzwerkkarte korrekt eingebunden sind, erzeugt obiger Befehl folgende Ausgabe:

Ist der Test erfolgreich, sollten Sie noch das so genannte Discovery durchführen. Dazu dient das Kommando:

pppoe -T20 -I eth1 -D pppoe.log > /dev/null

Die erzeugte Datei pppoe.log sollte den Inhalt der nächsten Abbildung aufweisen:

Einrichten des Zugangs

Nun folgt die Einrichtung des Zugangs. Dazu sind zunächst Benutzerkennung und Passwort festzulegen, um den Point-to-Point-Daemon zu konfigurieren. Unter Linux werden beide in der Datei /etc/ppp/pap-secrets abgelegt. Einige wenige Provider verwenden nicht das PAP-Protokoll zur Identifizierung des Kunden, sondern das CHAP-Protokoll. Hierbei trägt man die Benutzerkennung und das Passwort in der Datei /etc/ppp/chap-secrets ein. Um Anpassungen von /etc/ppp/pap-secrets vorzunehmen, bearbeitet man die Einstellungen mit einem beliebigen Texteditor. Hier ein typisches Beispiel:

Der Aufbau der Datei ist denkbar einfach: Kommentare sind mit einer vorangestellten Raute (#) gekennzeichnet. Sie werden ignoriert und dienen lediglich der Übersicht oder als Information. Jede Zeile steht für einen konfigurierten Zugang. So ist es beispielsweise möglich, durch mehrere Zeilen mehrere voneinander unabhängige Zugänge zu konfigurieren. In der ersten Spalte steht die Benutzerkennung, anschließend ein Stern (*), dann das Passwort und zum Schluss wiederum ein *.

Eine Besonderheit weist der T-Online-Zugang auf: Hier setzt sich die Userkennung aus der Anschlusskennung, der T-Online-Nummer und einer Raute gefolgt von dem Mitbenutzersuffix zusammen (die Raute kann bei einer 12-stelligen T-Online-Nummer entfallen). Bei ADSL nicht zu vergessen: Das @t-online.de am Schluss. Für eine Anschlusskennung von 111111111111, eine T-Online-Kennung von 222222222222 und einen Mitbenutzersuffix von 0001 lautet die Userkennung zum Beispiel 111111111111222222222222#0001@t-online.de.

Konfiguration des pppd

Anschließend erfolgt die Konfiguration des pppd. Die zentrale Konfigurationsdatei befindet sich unter /etc/ppp/options. Sie gilt für alle PPP-Verbindungen. Zusätzlich erlaubt der pppd für jeden Zugang eine eigene Konfigurationsdatei. Somit ist es möglich, verschiedene Konfigurationen parallel anzulegen. Diese speziellen Einstellungen befinden sich im Verzeichnis /etc/ppp/peers und können einen beliebigen Dateinamen erhalten. Kommentare erhalten eine Raute (#) zu Beginn der Zeile.

Zunächst werden die Verbindungsoptionen in die Datei /etc/ppp/options eingetragen:

# /etc/ppp/options
# Optionen, die für alle Verbindungen gelten sollen
# Das Passwort soll nicht in /var/log/messages
# mitgeloggt werden - Sicherheitsrisiko!
hide-password
local
noauth
# Exclusive Nutzung des Devices durch den pppd
lock
# Nur zu Testzwecken sind die Meldungen im Syslog interessant
# debug
# Nicht in den Hintergrund "rutschen" - nur zu Testzwecken aktivieren!
# nodetach

Alle Einstellungen, die nur für den ADSL-Zugang gelten sollen, nehmen Sie in der Datei /etc/ppp/peers/adsl vor. Ein Beispiel finden Sie hier.

Der erste Verbindungstest

Nun wird es spannend. Klappt der Verbindungsaufbau? Diese Frage beantwortet ein erster Test. Dazu aktiviert man in der Datei /etc/ppp/options die Option nodetach. Diese verhindert, dass beim Starten der Software der pppd sofort in den Hintergrund rutscht. Dadurch lässt er sich bequem in einem Terminal starten und beenden. Zudem können Sie so alle Ausgaben des pppd verfolgen.

Da dieses Verhalten für den späteren Betrieb nicht erwünscht ist, sollten Sie diese Option nach erfolgreichen Tests wieder deaktivieren. Für umfangreiche Statusmeldungen des pppd aktiviert man zudem die Option debug. Damit Sie während der ersten Verbindungen die Systemmeldungen ständig im Auge behalten können, starten Sie diese in einem Terminal:

tail -f /var/log/messages

Somit werden alle hinzukommenden Meldungen in der Datei /var/log/messages sofort angezeigt. In einem weiteren Terminal wird der pppd und damit die erste Verbindung via pppd call adsl gestartet. Mit der zusätzlichen Option call adsl wird der pppd angewiesen, die Konfigurationsdatei /etc/ppp/peers/adsl einzulesen. Der pppd protokolliert die Vorgänge in einer Log-Datei (siehe Bild).

Aus diesen Meldungen kann man die vom Provider zugewiesenen IP-Adressen sowie die aktuell gültigen Nameserver-Adressen ablesen. Die Verbindung steht und lässt sich mittels ping testen:

ping -c5 194.25.2.129

Der Befehl sendet fünf Testpakete an die IP-Adresse 194.25.2.129, die von dieser auch beantwortet werden sollten. Um die Verbindung zu beenden, verwendet man die Tastenkombination Strg+C oder alternativ das Kommando killall pppd.

Manuelle Einwahl

Beim Zugang ins Internet unterscheidet man zwischen manueller und automatischer Einwahl. Die manuelle Einwahl ist sinnvoll, wenn man beim Provider keinen Pauschaltarif besitzt. Die automatische Einwahl bietet sich beim Einsatz als Gateway für ein kleines Firmennetz an.

Für die manuelle Einwahl kann man den bereits beschriebenen pppd-Aufruf verwenden. Allerdings ist dieser Befehl wenig einprägsam und zudem nur Root vorbehalten. Daher ist es sinnvoll, für die manuelle Einwahl ein Bash-Script anzulegen, das die verschiedenen, zur Einwahl berechtigten Benutzer beim Verbindungsauf- und abbau aufruft. Die folgenden Zeilen zeigen ein mögliches Script, das unter dem Dateinamen /usr/local/bin/connectadsl abgelegt wird.

#! /bin/sh
# Connectadsl: Skript für die Verbindung zum
# Provider via ADSL/T-DSL
# ----- Einstellungen: -----
# Device für ADSL-Modem: eth0, eth1 etc.
DEVICE="eth1"
# Options-Datei (muss unter /etc/ppp/peers liegen)
ADSL_FILE="adsl"
# Pfad zu pppd
PPPD="/usr/sbin/pppd"
# Pfad zu sudo
SUDO="/usr/bin/sudo"
# ----- Ende der Einstellungen -----
if test -x $SUDO; then
if test $UID -ne 0; then
exec $SUDO $0 $*
fi
fi
case "$1" in
stop)
echo Verbindung beenden
killall pppd
;;
start)
echo Verbindung starten
$PPPD call $ADSL_FILE
;;
*)
echo Falscher oder kein Parameter angegeben!
echo Bitte starten sie $0 mit dem Parameter
</PARAGRAPH>
<PARAGRAPH> echo start oder stop
;;
esac

Hinzu kommen die Dateirechte für das Script:

chmod 755 /usr/local/bin/connectadsl
chown root.root /usr/local/bin/connectadsl

Internet für alle

Damit auch andere Benutzer außer Root dieses Script ausführen können, greift man zu dem Utility sudo, das in jeder Distribution enthalten ist. Die Konfiguration von sudo erfolgt über den Befehl root visudo. Beispielhaft zeigt das nächste Listing, wie sudo dem Benutzer "peter" die Ausführung des Programms /usr/local/bin/connectadsl mit Root-Rechten erlaubt.

# sudoers file.
# This file MUST be edited with the 'visudo'
# command as root. See the man page for the
# details on how to write a sudoers file.
# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root ALL=(ALL) ALL
peter ALL=NOPASSWD:/usr/local/bin/connectadsl

Analog kann man beliebig viele weitere Zeilen und somit Benutzer und Programme dieser Konfigurationsdatei hinzufügen. Ist der Benutzer peter eingeloggt, startet er mit connectadsl start beziehungsweise beendet die Verbindung mit connectadsl stopp.

Einwahl mit Komfort

Richtig komfortabel wird die Konfiguration allerdings erst, wenn man den Linux-Rechner für die automatische Einwahl konfiguriert. Um bereits beim Booten Dial-on-Demand zu aktivieren, installiert man ein Init-Script, das beim Booten beziehungsweise Wechseln in den entsprechenden Runlevel gestartet wird. Außerdem muss für Dial-on-Demand die Option "demand" in der Konfigurationsdatei des pppd (/etc/ppp/peers/adsl) aktiviert werden. Die Default-Route wird automatisch durch den pppd auf das entsprechende Device gelegt. Anfragen ins Netz lösen automatisch den Verbindungsaufbau aus.

Bei den Init-Scripts gehen die verschiedenen Distributionen eigene Wege. SuSE legt diese Scripts unter /etc/init.d ab, bei Red Hat werden die Init-Scripts unter /etc/init.d/rc.d abgelegt.

Die Listings hinter den folgenden Links beinhalten mögliche Init-Scripts für SuSE und Red Hat. Diese Dateien müssen Sie noch mit den korrekten Rechten versehen. Vergessen Sie auch nicht, die Links in den entsprechenden Runlevels korrekt anzulegen. (fkh/kpf)