Debian

Aus AliceWiki

Wechseln zu: Navigation, Suche

Inhaltsverzeichnis


Quelle: www.adsl4linux.de by Frank Meeh



Konfigurations-Anleitung von Hand

Die wohl bekannteste Userspace-Implementierung des PPP-over-Ethernet-Protokolls ist der rp-pppoe von Deavid Skoll, der "Roaring-Penguin-Treiber". Die Software wurde unter die GPL gestellt und liegt mittlerweile in der Version 3.5 vor.

Für den reibungslosen Betrieb mit PPPoE ist der pppd in der Version 2.3.7 (für DialOnDemand 2.3.10) oder natürlich neuer erforderlich, da nur dieser virtuelle Terminals verwenden kann. Hierbei kann der pppd, anstelle des direkten Zugriffs auf ein Device (z.B. die serielle Schnittstelle), die Daten einem weiteren Programm übergeben, welches sie umwandelt und dann auf ein Device weiterleitet.

Debian Linux 3.0 (Woody) liefert den rp-pppoe-Treiber und den pppd auf den Distributions-CDs in einer genügend aktuellen Version mit bzw. stellt neue Versionen der Programme im Internet zum Download bereit. Da diese Versionen keinerlei Sicherheitslücken enthalten, kann man diese Versionen getrost verwenden und sollte auf das Selbstkompilieren des rp-pppoe-Treibers verzichten.

Um das Debian-Paket zu installieren, muss die Datei /etc/apt/sources.list die üblichen Woody-Pfade enthalten, z. B.:

  • deb http://ftp2.de.debian.org/debian woody main contrib non-free

Anschließend können sowohl der pppd als auch der pppoe in der aktuellsten Version installiert werden:

  • apt-get install pppoeconf

Installieren, aufrufen, Hinweise beachten. Wenn es nicht klappt, oder wenn man es doch per Hand machen will, dann weiterlesen. Und ggf. sich die pppd-Manpage anschauen.

  • apt-get update
  • apt-get install ppp pppoe

Zunächst muss jetzt der Treiber der Netzwerkkarte installiert werden, falls das nicht schon bei der Installation geschehen ist. Dann können natürlich die folgenden Schritte übersprungen werden. Debian Woody bindet alle zusätzlichen Treiber als Kernel-Module ein. Diese können bequem automatisch installiert werden. Wurde die Karte nicht schon bei der Installation mit angegeben, können die Treiber nun mit dem Programm modconf nachinstalliert und aktivert werden. Dazu ruft man das Programm als root auf und wählt den Menüpunkt "net" aus:

  • Modul-Installation

Bild:Treiber_Netzwerkkarte_Debian.jpg
Abbildung: Mit modconf wird der Treiber der Netzwerkkarte installiert.

Anschließend wählt man aus der folgenden Liste die verwendete Netzwerkkarte aus und aktiviert sie. Die Installation sollte mit der Meldung "Installation succeeded" beendet werden.

  • Modul-Installation

Bild:Auswahl_Treiber_Netzwerkkarte_Debian.jpg
Abbildung: Auswahl des richtigen Treibers.

In der Datei /etc/modules sollte sich nach der Installation eine Zeile mit dem Kernel-Modul für die Netzwerkkarte befinden. Damit wird beim Booten automatisch der korrekte Treiber für die Karte geladen.

Nachdem nun die Netzwerkkarte eingerichtet ist, wird eine eventuell noch vorhandene Default-Route mit

  • route del default

gelöscht. Zu beachten ist, dass vor jedem Start des pppd die ursprüngliche Default-Route gelöscht werden muss, falls eine solche vorhanden ist (was aber bei normalen DialUp-Systemen in der Regel nicht der Fall sein dürfte).

Jetzt kann überprüft werden, ob die Verkabelung des Modems und Splitters korrekt vorgenommen wurde und ob der so genannte Access-Concentrator (siehe unter Hardware) erreichbar ist:

  • pppoe -I eth1 -A

Es sollte eine Ausgabe ähnlich folgender erscheinen:


Access-Concentrator: OSNC13-nrp3
Got a cookie: 50 64 87 59 6d bf 73 00 1d 67 98 7d c2 d3 a5 32
AC-Ethernet-Address: 00:01:96:99:50:b7


Nun wird noch überprüft, ob auch eine Antwort übermittelt wird. Dazu führt man die sogenannte "Discovery" (siehe RfC2516) durch:

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

Die Log-Datei pppoe.log sollte in etwa den folgenden Inhalt haben:

rp-pppoe-3.5
SENT PPPOE Discovery (8863) PADI sess-id 0 length 4
SourceAddr 00:00:1c:db:da:93 DestAddr ff:ff:ff:ff:ff:ff 01 01 00 00

RCVD PPPOE Discovery (8863) PADO sess-id 0 length 39
SourceAddr 00:01:96:99:50:b7 DestAddr 00:00:1c:db:da:93
01 01 00 00 01 02 00 0b-4f 53 4e 43 31 33 2d 6e
72 70 33 01 04 00 10 50-64 87 59 6d bf 73 00 1d
67 98 7d c2 d3 a5 32

SENT PPPOE Discovery (8863) PADR sess-id 0 length 24
SourceAddr 00:00:1c:db:da:93 DestAddr 00:01:96:99:50:b7
01 01 00 00 01 04 00 10-50 64 87 59 6d bf 73 00
1d 67 98 7d c2 d3 a5 32

[...]

Tritt beim letzten Befehl ein Fehler auf, so liegt das Problem mit grosser Wahrscheinlichkeit auf Seiten der Telefongesellschaft.

War auch dieser Befehl erfolgreich, so kann mit der eigentlichen Konfiguration des Zugangs zu Hansenet begonnen werden.

Zuerst wird die Benutzerkennung und das Passwort in die Datei /etc/ppp/chap-secrets eingetragen. Entgegen den meisten anderen Providern benutzt Hansenet CHAP als Authentifizierung (und nicht PAP). Achtung! Hierbei werden die meisten Fehler gemacht! Für folgende Daten sieht die Datei /etc/ppp/chap-secrets dann wie in Listing 1 abgebildet aus:

  • Kennung: net0815@hansenet.de
  • Passwort: geHeim


Listing 1: /etc/ppp/chap-secrets


# Secrets for authentication using CHAP
# client server secret IP adresses

"net0815@hansenet.de" * "geHeim" *

Anschliessend werden alle Optionen, die der pppd zum Starten benötigt, in die Datei /etc/ppp/peers/dsl-provider eingetragen. Listing 2 zeigt den Inhalt der Datei an. Nicht vergessen, in dieser Datei noch die Option "user" entsprechend anzupassen! Sie muss exakt mit der zuvor in /etc/ppp/pap-secrets (bzw. /etc/ppp/chap-secrets) angegebenen Kennung übereinstimmen!

Soll der Rechner später als Router fungieren, so muss in der nachfolgenden Konfigurationsdatei die entsprechende Zeile für den Zugang mit Masquerading aktiviert werden. Dieses ist nötig, weil das PPPoE-Protokoll 8 Bytes in jedem Ethernet-Paket benötigt. Ein Standard- Ethernet-Paket ist 1500 Bytes groß, d. h. mit dem PPPoE-Protokoll wäre jedes Paket 1508 Bytes lang. Die Router der Telekom verwerfen jedoch ohne jegliche Fehlermeldung alle Pakete, die größer als 1500 Bytes sind. Aus diesem Grund ist die MTU (Maximum Tranfer Unit) bei PPPoE nie größer als 1492 zu setzen. Die PPPoE-Software (bzw. beim pppoed der pppd) macht das auf dem Router automatisch. Da aber standardmäßig alle Clients im LAN mit einer MTU von 1500 senden, ist es nötig, die MSS (Maximum Segment Size) nachträglich auf dem Router zu korrigieren. Die MSS ist normalerweise 1460 Bytes groß (1500 - 40 Bytes TCP/IP-Header), sie darf also bei Verwendung von PPPoE nur 1452 Bytes groß sein. Der rp-pppoe kann das automatisch mit der Option "-m" erledigen. Alternativ kann natürlich auf jedem Client im LAN die MTU auf 1492 eingestellt werden. Das ist zwar für den Router Recourcen schonender, aber bei größeren LANs bedeutet dieses Vorgehen doch einen erheblichen Mehraufwand.

Download des Skripts: /etc/ppp/peers/dsl-provider

Listing 2: /etc/ppp/peers/dsl-provider

# /etc/ppp/peers/dsl-provider

# Starten der PPPoE-Software - Das verwendete Device muss hier
# angepasst werden!

  • pty "pppoe -I eth1"

# Ist dieser Rechner ein Router (Masquerading), so ist folgende
# Zeile zu verwenden!
# pty "pppoe -I eth1 -m 1452"

# Funktioniert bei Masquerading obige Zeile nicht zufriedenstellend,
# so sollte die folgende noch konservativere Einstellung versucht werden
# pty "pppoe -I eth1 -m 1412"

# Für Dial On Demand muss diese Zeile aktiviert werden
# demand

# Das Verbinden wird vom pppoe übernommen, ein Connect-Skript ist also
# nicht nötig

  • connect /bin/true

# Lokale und Remote-IP-Nummer vom Server wird akzeptiert

  • ipcp-accept-remote
  • ipcp-accept-local

# Der Server teilt uns den Nameserver mit

  • usepeerdns

# Nach 3 Minuten (180 s) Inaktivität wird aufgelegt

  • idle 180

# Wir haben keine gültige Default-IP, also nehmen wir die vom # Provider zugewiesene

  • noipdefault

# Die Defaultroute wird auf diese Verbindung gesetzt

  • defaultroute

# Unser Login-Name beim Provider - muss exakt uebereinstimmen # mit /etc/ppp/chap-secrets

  • user "net0815@hansenet.de"
  • hide-password

# Kompression abschalten!

  • noaccomp
  • nopcomp
  • novj
  • novjccomp
  • nobsdcomp
  • nodeflate
  • noccp

# Wir haben kein Modem, ein Handshake ist nicht nötig

  • nocrtscts
  • local
  • noauth

# Wird mittlerweile direkt dem pppoe als Option übergeben, daher hier
# deaktiviert
# mru 1492
# mtu 1492

# Alle 10 s nachschauen, ob der Server noch da ist. Bei 3 "Fehlpaketen"
# Verbindung beenden

  • lcp-echo-interval 10
  • lcp-echo-failure 3

# Specifies that pppd should use a UUCP-style lock on the serial device
# to ensure exclusive access to the device.

  • lock

# Nur zu Testzwecken sind die Meldungen im Syslog interessant
#debug
# Nicht in den Hintergrund "rutschen" - nur zu Testzwecken aktivieren!
#nodetach


Mehr zu den einzelnen Optionen verrät ein man pppd. Für den allerersten Start wird die letzte Option ("nodetach") mit aktiviert. Verläuft der erste Test dann zufriedenstellend, muss die Option anschliessend mit einer vorangestellten Raute ("#") auskommentiert und somit deaktiviert werden (für einen automatischen Betrieb). "nodetach" verhindert, dass der pppd-Prozess in den Hintergrund "rutscht". Um die Meldungen ständig im Auge zu behalten, startet root in einem Xterm oder auf der Konsole

  • tail -f /var/log/messages

Unter Debian werden zudem alle wichtigen Meldungen etwas ausführlicher nach /var/log/syslog geschrieben, wer etwas ausführlichere Meldungen bevorzugt, sollte also diese Datei beobachten. Zudem werden alle relevanten Daten in die Datei /var/log/ppp.log geschrieben, die mit dem Progtamm plog betrachtet werden kann. Um auch diese Meldungen ständig zu beobachten, führt man noch folgenden Befehl aus:

  • watch plog

Somit werden alle hinzukommenden Meldungen in der Datei sofort angezeigt.

Jetzt kann also das allererste Mal der pppd (als root) gestartet werden. Hierzu dient folgender Befehl:

  • pppd call dsl-provider

Der pppd meldet nun im Logfile:

pppd[1578]: pppd 2.4.1 started by root, uid 0
pppd[1578]: Serial connection established.
pppd[1578]: Using interface ppp0
pppd[1578]: Connect: ppp0 <--> /dev/pts/2
pppoe[1579]: PADS: Service-Name:
pppoe[1579]: PPP session is 31959
pppd[1578]: local IP address 62.226.75.9
pppd[1578]: remote IP address 62.225.254.169

Jetzt kann man versuchen, einen Rechner über seine IP-Adresse im Internet zu erreichen:

  • ping -c5 217.160.137.199

War das erfolgreich, kann versucht werden, einen Rechner über seinen Namen zu erreichen:

  • ping -c5 adsl4linux.de

Klappt auch dieser Versuch, wurden auch die korrekten Nameserver-Einstellungen beim Verbindungsaufbau übernommen.

Die Verbindung wird beendet, indem der pppd mit der Tastenkombination "<Strg + C>" oder alternativ mit killall pppd beendet wird, was er mit folgenden Meldungen im Logfile bekannt gibt:

pppd[1578]: Terminating on signal 15.
pppoe[1579]: Received signal 15.
pppoe[1579]: Sent PADT
pppd[1578]: Modem hangup
pppd[1578]: Connection terminated.
pppd[1578]: Connect time 1.1 minutes.
pppd[1578]: Sent 2122 bytes, received 1888 bytes.
pppd[1578]: Exit.

Waren all diese Befehle erfolgreich, so muss nun die Option "nodetach" aus /etc/ppp/peers/dsl-provider gelöscht bzw. durch auskommentieren mit "#" deaktiviert werden (siehe oben).

Da natürlich ein derartiger Verbindungsaufbau über root nicht für einen Arbeitsplatzrechner und schon garnicht für einen Server/Router befriedigend ist, muss der Verbindungsaufbau nun noch etwas erleichtert bzw. automatisiert werden. Manuelle Einwahl

Eine manuelle Einwahl ist immer dann sinnvoll, wenn man beim Provider keinen Pauschaltarif besitzt und somit seine Kosten immer im Griff haben möchte. Vielen Windowsbenutzern ist die manuelle Einwahl per "Knopfdruck" auch schon so in "Fleisch und Blut" übergegangen, dass sie ebenfalls unter Linux eine derartige Einwahl bevorzugen.

Bei der manuellen Einwahl wird ein Script angelegt, welches die verschiedenen Benutzer mit entsprechenden Parametern zum Verbindungsauf- bzw. abbau aufrufen müssen. Hierzu dient das Script aus Listing 3, welches unter dem Dateinamen /usr/local/bin/connectadsl abgespeichert wird.

Das Skript hat den Vorteil, dass durch Verwenden der Software sudo auch Nicht-Root-Usern auf eine sichere Weise erlaubt werden kann, eine Verbindung zum Provider aufzubauen. Ist das nicht erwünscht bzw. wird es nicht benötigt, ist ein zusätzliches Skript wie das in Listing 3 unter Debian nicht notwendig und die folgenden Installationsschritte zum Connect-Skript können übersprungen werden. Root kann unter Debian eine Verbindung zum Provider ganz einfach durch folgenden Befehl aufbauen:

  • pon dsl-provider


Die Verbindung wird mit folgendem Befehl wieder beendet:

  • poff


Download des Skripts: /usr/local/bin/connectadsl

Listing 3: /usr/local/bin/connectadsl

#! /bin/sh

# Connectadsl: Skript zur Erstellung einer Verbindung zum Provider
# via ADSL/T-DSL fuer Debian GNU/Linux

# Verbindung starten: connectadsl start
# Verbindung stoppen: connectadsl stop

# written by: Michael Schlenstedt
# Michael@adsl4linux.de
# http://www.adsl4linux.de

# Version: 0.2a

# Einstellungen:

# Pfad zu pppd

PPPD="/usr/sbin/pppd"

# Pfad zu sudo

SUDO="/usr/bin/sudo"

# Ende der Einstellungen

# Wenn UID ungleich "0" (root), dann führe Skript mit sudo aus

if test -x $SUDO; then
if test $UID -ne 0; then
exec $SUDO $0 $*
fi
fi

# Mit welchem Parameter wurde das Skript gestartet: Start oder Stop

case "$1" in

# Bei Stop wird aufgelegt

stop) echo Verbindung beenden killall pppd

# Beim Parameter (Start) wird die Verbindung aufgebaut

start) echo Verbindung starten $PPPD call dsl-provider ;; *) echo Falscher oder garkein Parameter angegeben! echo Bitte starten sie $0 mit dem Parameter start oder stop ;; esac

Mit

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

werden die korrekten Dateirechte vergeben. Damit auch andere Benutzer ausser root dieses Skript ausführen können, wobei das Skript selbst jedoch mit Root-Rechten laufen muss, kann das Programm sudo verwendet werden, welches bestimmten Benutzern erlaubt, bestimmte Befehle mit Root-Rechten auszuführen. Das Paket sollte bei jeder Distribution enthalten sein, ansonsten kann es von http://www.courtesan.com/sudo/ heruntergeladen und anschliessend installiert werden.

Um sudo nun entsprechend zu konfigurieren, ruft Root visudo auf (das Editieren der Datei geschieht analog zur Bedienung des vi-Editors: Mit "I" kann man Text einfügen, "[Esc]" und anschliessend ":wq" speichert die Datei ab, lediglich ":q!" verwirft alle Änderungen und beendet das Editieren ohne Abspeichern usw.). Im Beispiel Listing 4 wurde dem Benutzer "Peter" erlaubt, das Programm /usr/local/bin/connectadsl mit Root-Rechten auszuführen. Analog kann man beliebig viele weitere Zeilen und somit Benuzter und Programme dieser Konfigurationsdatei hinzufügen.

Listing 4: visudo

# 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

Ist der Benutzer "Peter" nun eingeloggt, so kann er die Verbindung zum Provider mit

  • connectadsl start

starten und mit

  • connectadsl stop

wieder beenden.


Dial On Demand

Seit Version 2.3.10 des pppd ist nun auch die Nutzung von Dial On Demand mit dem PPPoE-Protokoll möglich. Dial On Demand ist hier eigentlich der falsche Name, da bei der ADSL-Technik im herkömmlichen Sinne nicht gewählt wird. Weil sich der Name jedoch mittlerweile im Linuxlager eingebürgert hat, nutze ich ihn auch hier weiterhin.

Dial On Demand-Lösungen bieten sich insbesondere bei den Flatrates verschiedener Provider an. Aber auch auf einem als Router fungierendem Linuxrechner kann DOD nützlich sein, so müssen sich die Benutzer nicht vorher via telnet oder ssh einloggen, oder über den Browser ein cgi-Script ausführen, um eine Verbindung aufzubauen. Doch Vorsicht wer keinen Pauschaltarif besitzt! Es ist schon häufig zum Gebührengau gekommen, weil ein Windows-Client oder aber Daemons wie sendmail in minutenabständen über Tage hinweg Nameserver-Anfragen ins Netz gestellt haben und somit den Router immer wieder veranlassten, eine Verbindung zum Provider aufzubauen! Daher sollte man gerade in den ersten Tagen die Log-Files des Rechners genau kontrollieren.

Debian liefert schon ein fertiges Init-Skript mit, um beim Booten automatisch eine Verbindung zum Provider aufzubauen. Um es zu aktivieren, muss im Verzeichnis /etc/ppp eine Datei mit Namen ppp_on_boot existieren. Den nötigen Inhalt der Datei zeigt Listing 5 an.

Download des Skripts: /etc/ppp/ppp_on_boot

Listing 5: PPP-on-Boot-Script /etc/ppp/ppp_on_boot

#!/bin/sh
# The location of the ppp daemon itself (shouldn't need to be changed)
PPPD=/usr/sbin/pppd

# The Ethernet interface the DSL modem is connected to. If you change this,
# you also need to edit the file /etc/ppp/peers/dsl-provider.
INTERFACE=eth1

# Bring the interface up
ifconfig $INTERFACE up -arp

$PPPD call dsl-provider


Dieses Skript wird normalerweise bei der Installation des pppd als Datei dsl_on_boot angelegt und muss nur entsprechend umbenannt werden:

  • mv dsl_on_boot ppp_on_boot

Anschließend muss im Skript natürlich wieder das Device der Netzwerkkarte angepasst werden und das Skript ausführbahr gemacht werden:

  • chmod 750 ppp_on_boot

Zudem muss für DialOnDemand die Option demand in der Konfigurationsdatei des pppd /etc/ppp/peers/dsl-provider aktiviert werden. Die Defaultroute wird automatisch durch den pppd auf das entsprechende Device gelegt und Anfragen ins Netz lösen automatisch den Verbindungsaufbau aus.

Da bei Dial On Demand in Zusammenhang mit dem dynamischen Vergeben der IP-Adresse Fehler auftreten können, muss der Kernel-Patch für die Vergabe von dynamischen IP-Adressen noch aktiviert werden. Dieses geschieht auf der Kommandozeile mit einem

  • echo 2 > /proc/sys/net/ipv4/ip_dynaddr

Dieser Befehl muss nach jedem Booten erneut ausgeführt werden.

Hierzu muss unter Debian der Befehl ans Ende der Datei /etc/init.d/bootmisc.sh oder /etc/ppp/ppp_on_boot angehängt werden. Damit wird er während des Bootprozesses mit ausgeführt.

Bei Dial On Demand gibt es bei der ersten Anfrage ins Netz Probleme mit der dynamischen Vergabe des Nameservers, da dieser ja bei der ersten Anfrage noch nicht bekannt ist und somit der anzufragende Hostname nicht aufgelöst werden kann. Hat man natürlich einen eigenen DNS-Server aufgesetzt, besteht dieses Problem nicht. Falls das aber nicht der Fall ist (dürfte für die meisten User gelten), muss man den Nameserver des Providers in /etc/resolv.conf eintragen, damit auch die erste Anfrage ins Netz schon korrekt übermittelt wird. Kennt man die Nameserver-Adresse des Providers nicht, kann man zunächst von Hand eine Verbindung aufbauen. Der pppd meldet nun einen gerade vom Provider zugewiesenen Nameserver (Achtung, dieses sind Beispiel-Adressen von T-Online !):

pppd[3182]: primary DNS address 192.76.144.66 pppd[3182]: secondary DNS address 194.25.2.129

Diesen trägt man in resolv.conf ein. Die Option, dass bei jedem Verbindungsaufbau der Nameserver übermittelt wird ("usepeerdns"), lässt man natürlich in der Konfigurationdatei des pppd aktiv, falls der Provider seine Nameserveradressen einmal ändert. Die Datei könnte dann wie folgt aussehen:

Listing 6: Die Datei /etc/resolv.conf

nameserver 192.76.144.66 nameserver 194.25.2.129

Des weiteren muss die erste Zeile ("demand") in /etc/options für den automatischen Verbindungsaufbau aktiviert werden. Die Defaultroute wird automatisch durch den pppd auf das entsprechende Device gelegt. Nach dem nächsten Neustart bzw. ein als Root ausgeführtes

/etc/init.d/ppp restart

startet der pppd und ein

  • ping -c5 217.160.137.199

baut in sekundenschnelle die Verbindung zum Provider auf. Nach 3 Minuten Inaktivität wird die Verbindung automatisch beendet und erst wieder aufgebaut, sobald ein Rechner angesprochen wird, der nicht lokal erreichbar ist.

Zum Schluss bleibt mir nur noch zu sagen: HAPPY SURFIN'!

Ansichten
Persönliche Werkzeuge