15.5 Mit Linux ins Internet
Wenn man mit Linux ins Internet will, ist man mit anderen Gegebenheiten konfrontiert, als wenn man ein lokales Netzwerk aufbauen möchte. So verkabelt man nicht selbst mehrere Rechner miteinander, sondern verbindet sich mit einem Provider. Dieser Provider stellt dann den Internetzugang zur Verfügung.
Solch eine Verbindung stellt man im Allgemeinen durch eine Punkt-zu-Punkt-Verbindung über die Telefonleitung her. Dazu benötigt man je nach Anschluss ein analoges Modem, eine ISDN-Karte oder ein DSL-Modem. Mit diesen Geräten können Sie dann das Medium »Kupferkabel« überwinden und Ihre Daten zum Provider senden, der sie dann ins Internet routet.
Komfortabel?
Mittlerweile gibt es zum Einrichten dieser Punkt-zu-Punkt-Verbindungen auch unter Linux komfortable grafische Tools wie zum Beispiel kppp. Auch wenn diese Programme Sie mit technischen Details kaum noch behelligen, finden wir es trotzdem wichtig, dass Sie über den technischen Hintergrund Bescheid wissen.
Abbildung 15.3 Einfache Konfiguration mit kppp: Einrichten-Dialog
15.5.1 Point-to-Point Protocol
... aber zuerst die Grundlagen!
Zu den Grundlagen gehört das Point-to-Point Protocol. Mit diesem Protokoll kann man, wie der Name schon sagt, Verbindungen von einem Punkt zu einem anderen aufbauen – also zum Beispiel von Ihrem Rechner zu Hause per Modem über die Telefonleitung zu Ihrem Provider. Aber betrachten wir zuerst einmal die pure Theorie.
Das Point-to-Point Protocol (PPP) ist die Grundlage moderner Datenkommunikation für Internetverbindungen über serielle Leitungen. Es ist verbindungsorientiert und schafft damit die Grundlage dafür, dass Ihr Internetprovider zeitbezogen abrechnen kann.
Eine PPP-Verbindung wird jeweils zwischen zwei Rechnern (Points) eingerichtet. Bei der Übertragung von Daten auf einer seriellen Leitung werden die Internetpakete, also die IP-Datagramme, in den Datenbereich der PPP-Datenpakete eingebettet.
Die so verpackten Pakete werden von Ihrem Rechner an den sogenannten Peer-Host, beispielsweise den Einwahlrechner Ihres Internet-Service-Providers (zum Beispiel T-Online), weitergeleitet. Dieser Rechner entpackt die PPP-Pakete und leitet die IP-Datagramme schließlich ins Internet weiter.
Authentifizierung via PPP
Damit PPP zumindest halbwegs sicher ist, wird in der Regel eine Benutzerauthentifizierung verwendet. Mit anderen Worten: Sie können sich nur mit gültigem Benutzernamen und dazugehörigem Passwort über die PPP-Verbindung einwählen. Fast jeder Provider bietet so etwas an, beziehungsweise es gibt kaum einen mehr, der diesen Mechanismus außen vor lässt. Leider ist diese Einwahl keineswegs trivial, und daher sollten Sie wissen, was da vor sich geht. Das PPP stellt zwei Mechanismen zur Authentifizierung zur Verfügung: PAP und CHAP.
PAP
PAP (Password Authentification Protocol) ist eine sehr rudimentäre Möglichkeit, einen Passwortschutz abzuwickeln. Hierbei werden die Passwörter tatsächlich noch unverschlüsselt im Klartext übermittelt.
Nachdem das LCP (Link Control Protocol) eine Verbindung aufgebaut hat, übermittelt PAP die Authentifizierungsdaten. Das PAP-Paket wird dabei konsequenterweise in ein PPP-Paket eingebettet und kennt eigentlich nur drei Typen: Zunächst wird die Authentifizierung gesendet (Authentification Request), dann folgt eine Antwort: entweder die Bestätigung (auth. ACK) oder eine Zurückweisung (auth. NAK).
CHAP
CHAP (Challenge Handshake Authentification Protocol) bietet gegenüber PAP etwas mehr Sicherheit. CHAP verwendet alle Passwörter nur ein einziges Mal und bietet zusätzlich zu diesem Feature noch die Verschlüsselung über einen sogenannten Falltür-Algorithmus. Wie PPP wird auch CHAP über LCP übertragen, kennt aber vier mögliche Pakettypen: die Anforderung zur Authentifizierung, die Antwort darauf, und eine Erfolgsmeldung bzw. eine Meldung über einen misslungenen Versuch.
[»]Wenn Sie mehr über dieses Thema erfahren möchten, sollten Sie RFC 1334 [Lloyd92A] lesen.
PPP unter Linux
Wie stellt man nun eine Internetverbindung her, und dies möglichst, ohne sich zu intensiv mit PPP beschäftigen zu müssen? Genau diese Problemstellung möchten wir an dieser Stelle erörtern. Ganz ohne PPP-Hintergrundwissen wird es nicht gelingen, aber einen Kurzeinstieg gab es ja bereits.
Der Kernel muss mitspielen
Der Kernel muss, damit PPP überhaupt läuft, mit der Option »PPP (point-to-point) support« übersetzt werden. Im Normalfall ist bereits im Standard-Kernel der Distribution die entsprechende Unterstützung vorhanden. Falls dies nicht der Fall ist, sollte der Kernel erneut mit angepassten Optionen übersetzt werden.
Und dann wäre da noch pppd
Zusätzlich wird der – in der Regel ebenfalls auf jedem System vorhandene – PPP-Dämon (pppd) benötigt. Er wird aufgerufen, um eine Verbindung mit dem Einwahlrechner herzustellen und die Kommunikation bis zum Ende der Verbindung zu leiten. Genau ihn müssen wir nun konfigurieren.
Der pppd-Dienst kann sowohl als Server als auch als Client für PPP-Verbindungen eingesetzt werden. Hinzu kommt die hier wohl wichtigste Unterstützung für Wählverbindungen und permanente Verbindungen zwischen zwei Rechnern.
Zuerst wollen wir den pppd für eine simple permanente Verbindung aufrufen. Dabei geben wir die zu verwendende Schnittstelle, also die serielle Leitung, an der beispielsweise ein Nullmodemkabel hängt, deren Übertragungsrate sowie die gewünschten Optionen an:
Listing 15.39 pppd aufrufen
// Syntax: pppd [Gerät] [Geschwindigkeit] [Optionen]
# pppd /dev/ttyS0 57600 crtscts defaultroute \
192.168.4.1:192.168.4.2
Im obigen Beispiel wird die erste serielle Schnittstelle (unter DOS COM1) verwendet, um eine 56 KBit/s schnelle Verbindung herzustellen. crtscts aktiviert die Flusskontrolle, und defaultroute legt, sofern keine andere Standardroute vorhanden ist, diesen Link als Standardroute fest. Mit einem Nullmodemkabel und einem pppd auf beiden Rechnern hätte man nun schon eine Punkt-zu-Punkt-Verbindung hergestellt.
15.5.2 Einwahl mit einem Modem
Für eine Einwahlverbindung via Modem benötigen Sie erst einmal einige Daten, die Sie von Ihrem Provider bekommen haben (zumindest sollte das passiert sein, als Sie den Internetanschluss angemeldet haben). Falls Ihnen einige dieser Daten fehlen, fragen Sie einfach beim Provider nach.
- Einwahlnummer
Damit pppd weiß, mit welchem Rechner eine Verbindung aufgebaut werden kann, wird eine Einwahlnummer benötigt. - DNS-Server
Um Namen von Netzwerkrechnern in IP-Adressen aufzulösen, wird, wie Sie bereits wissen, ein DNS-Server benötigt. Es muss geklärt werden, welche IP-Adressen die DNS-Server des Providers haben. Jeder Provider sollte mindestens zwei DNS-Server haben. - Anmeldung
Die Anmeldung am Server erfolgt entweder ohne Passwort oder aber mit PAP bzw. CHAP. - Anmeldedaten
Wenn mit PAP beziehungsweise CHAP gearbeitet wird, benötigt man einen Account, also den Benutzernamen und das zugehörige Passwort. - Adresszuweisung
Erfolgt die Zuweisung der IP-Adresse automatisch oder verfügen Sie über eine statische Adresse? Wenn eine statische Adresse verwendet wird, wie sieht dann die Netzwerkmaske aus?
Sofern alle obigen Informationen bereitstehen, können wir uns mit der Grundkonfiguration beschäftigen. Diese Konfiguration wird über PPP-Optionen festgelegt, die entweder direkt beim Aufruf von pppd übergeben oder in der Datei /etc/ppp/options abgelegt werden können. Letzteres ist die praktischere Methode. Da es sehr viele PPP-Optionen gibt, werden wir an dieser Stelle nur die wichtigsten erläutern.
- noipdefault
Diese Option bewirkt, dass der Client eine dynamische IP-Adresse verwendet. - ipcp-accept-local/ipcp-accept-remote
Mit dieser Option wird die lokale Adresse für den Client vom Server empfangen bzw. die Adresse des Servers als Peer akzeptiert. - defaultroute
Sofern keine Standardroute gesetzt ist, wird die PPP-Verbindung als solche eingerichtet. - a.b.c.d:w.x.y.z
Diese beiden Kombinationen aus jeweils vier Zahlen bilden IP-Adressen ab. Die erste ist die Client-Adresse, die zweite die des Servers. Bei Verwendung von statischen Adressen sollte dieser Parameter beim pppd-Aufruf verwendet werden. Es sind auch folgende Modifikationen möglich: 1.2.3.4: weist nur dem Client eine statische Adresse zu, und :1.2.3.4 verwendet nur für den Server eine statische Adresse. - auth
Es soll ein Protokoll zur Authentifizierung verwendet werden. - +/–chap
(De)aktiviert die Verwendung des CHAP-Protokolls. - +/–pap
(De)aktiviert die Verwendung des PAP-Protokolls. - connect <Skript>
Ruft ein Connect-Skript auf. - disconnect <Skript>
Ruft ein Disconnect-Skript auf. - (-)crtscts
(De)aktiviert die Hardware-Flusssteuerung. - lock
Diese Option weist pppd an, das verwendete Gerät zu »locken«, das heißt, für den exklusiven Zugriff zu sperren. Kein anderer Prozess kann darauf zugreifen, solange es in Verwendung ist.
Okay, schreiten wir nun zur Tat und erstellen eine eigene Optionsdatei mit einem beliebigen Editor. Die Beispieldatei für ein Standardmodem und die Einwahl bei einem fiktiven Serviceprovider sieht folgendermaßen aus:
Listing 15.40 Beispiel für eine Optionsdatei
# Die erste serielle Schnittstelle verwenden, weil
# dort das Modem angeschlossen ist.
/dev/ttyS0
# Die Übertragungsrate ist 57600 Bit/s
57600
# Flusskontrolle aktivieren und Schnittstelle
# für andere Prozesse sperren
crtscts
lock
# Keine eigene IP-Adresse verwenden – wir
# bekommen sie vom Provider
noipdefault
# Nach der Einwahl eine neue Standardroute setzen
defaultroute
# alle 10 Sekunden ein Testpaket schicken und maximal
# 5 Fehlversuche dulden
lcp-echo-interval 10
lcp-echo-failure 5
# Als Benutzer Kunde0184 anmelden. Achtung: Dies
# sollte auskommentiert werden, sofern die Anmeldung
# via 'chat' (s. weiter unten) erfolgen soll.
user Kunde0184
Chat-Skript
Kommen wir nun zum eigentlichen Einwahlvorgang. Dieser wird über ein sogenanntes chat-Skript abgewickelt. [Fn. Es gibt auch andere Möglichkeiten, etwa die Verwendung eines dip-Skripts.] Bevor wir Sie nun mit den Details und Mythen der chat-Skripts plagen, verfolgen wir doch lieber das Prinzip Learning by doing und erläutern die Funktionsweise von chat anhand eines Beispiels.
Listing 15.41 Das Beispielskript dial.chat
TIMEOUT 30
ABORT "NO CARRIER"
ABORT BUSY
ABORT "NO DIALTONE"
ABORT ERROR
'' +++ATZ
OK ATDT1234567890
CONNECT ""
# Für den Fall, dass das Login über das Chat-Skript
# und nicht etwa über chap erfolgen soll, kann nun
# an dieser Stelle das Login vollzogen werden.
# Im fortlaufenden Beispiel werden wir allerdings
# die meist gebräuchliche PAP-Authentifizierung
# verwenden.
ogin> Kunde0815
assword> DasPassWort
Zunächst wird mit dem Befehl TIMEOUT eine Wartezeit festgelegt. Innerhalb von 30 Sekunden muss der nächste String empfangen werden. Wird NO CARRIER oder NO DIALTONE empfangen, so wird der Vorgang abgebrochen. Gleiches gilt, wenn die Leitung besetzt ist (BUSY) oder wenn ein Fehler (ERROR) auftritt.
Nachdem der String " " – also nichts – empfangen wurde, wird das Modem zurückgesetzt. Nachdem der »OK«-Prompt des Modems empfangen wurde, wird die Verbindung über den Befehl ATDT zur Einwahlnummer 1234567890 aufgebaut.
Sobald der String CONNECT empfangen wurde (was bedeutet, dass die Verbindung zunächst einmal steht), wird zwei Sekunden lang gewartet (\d\d) und darauf ein Zeilenvorschub gesendet. Daraufhin sollte der String Login> oder auch login> empfangen werden. Um nicht mit der Schreibweise in Konflikt zu geraten, werden nur die letzten Zeichen geprüft und der Benutzername wird gesendet. Gleiches gilt für das Passwort.
Sofern obiges Beispiel ohne Verwendung von PAP für Ihren Provider genügt, kann nun bereits eine Testverbindung aufgebaut werden. Dazu muss pppd mit dem chat-Skript verwendet werden.
Listing 15.42 Die Testverbindung
# pppd connect "/usr/sbin/chat -v -f /etc/dial.chat"
[+]Damit jeder Benutzer pppd verwenden kann (was sicherheitstechnisch nicht sehr ratsam ist), kann das setuid-Bit für das Kommando gesetzt werden.
Verbindungstest
Mit einem simplen ping kann nun die Erreichbarkeit eines Internethosts getestet werden – unter der Voraussetzung, dass DNS konfiguriert wurde. Läuft etwas schief, sollte die Datei /var/log/messages weiterführende Fehlermeldungen enthalten.
PAP verwenden
Sehen wir nun einmal vom direkten Login via Chat ab und verwenden die Authentifizierung via PAP. Dazu können die Login-Zeilen aus dem obigen dial.chat-Skript entfernt werden. Stattdessen wird eine Datei namens /etc/ppp/pap-secrets angelegt, in die nun die Anmeldedaten in der Form
Benutzername * Passwort
eingetragen werden. Der Stern bedeutet, dass die Kennung für alle Einwahlserver gültig ist. Andere Konfigurationen kommen so gut wie gar nicht vor.
Listing 15.43 Die Datei pap--secrets
Kunde0184 * 389wefn3utn
Kunde1085 * 049jgenwlkr
Der Einwahltest
Sofern alles richtig konfiguriert wurde, sollte dem erfolgreichen Verbindungsaufbau nichts mehr im Wege stehen. Eine Verbindung wird mittels folgender Kommandos aufgebaut bzw. wieder beendet:
Listing 15.44 Verbindungsaufbau und -abbau
# pppd connect "/usr/sbin/chat -v -f /etc/dial.chat"
...
// Wir sind im Netz!
...
# kill -INT `cat /var/run/ppp0.pid`
...
[»]Im Verzeichnis /etc/ppp können die Skripts ip-down und ip-up platziert werden. Diese Shellskripts können Kommandos enthalten, die beim Einwählen (up) bzw. bei der Verbindungstrennung (down) ausgeführt werden sollen.
Wie man unter den einzelnen BSD-Derivaten via Modem ins Internet gelangt, wird hervorragend in den jeweiligen Online-Dokumentationen der Derivate beschrieben. Unter OpenBSD erledigt man die Einwahl über ppp (wahlweise auch pppd, das ist aber etwas komplizierter) mit der Online-FAQ, Kapitel 6, »Networking«, binnen fünf Minuten.
15.5.3 Einwahl über DSL
Auch bei DSL ist der Aufbau einer Internetverbindung keine Zauberei. Da dort ebenfalls PPP genutzt wird, müssen wir eigentlich nichts mehr erklären. Aber wie es das Wort »eigentlich« schon andeutet, ist nicht immer alles so selbstverständlich, wie man sich das eigentlich gedacht hat.
DSL nutzt nämlich eine besondere PPP-Variante: PPPoE (PPP over Ethernet). Das ist nötig, weil eine verbindungsorientierte Kommunikation über ein paketorientiertes und damit eigentlich verbindungsloses Medium aufgebaut werden soll.
Dieser Unterschied liegt in der Technik begründet. Hat man bei einer analogen oder bei ISDN auch digitalen Internetverbindung eine ganze Telefonleitung zur Verfügung, so werden bei DSL Frequenzbänder außerhalb der hörbaren Bereiche genutzt, und die Kommunikation wird somit erst einmal unabhängig von der normalen Telefonleitung ermöglicht. [Fn. Trotzdem ist und bleibt ein Telefonanschluss – egal ob analog oder ISDN – zwingende Voraussetzung für DSL. Schließlich braucht der Provider ein physisches Medium, um die Daten überhaupt zum Endbenutzer transportieren zu können.] Um diese Signale nun »abfangen« zu können, braucht man einen Splitter vor dem eigentlichen ISDN-NTBA beziehungsweise vor dem analogen Telefon. Dieser Splitter teilt (»splittet«) die Daten so auf, dass die normalen Frequenzbänder an das Telefon und die DSL-Frequenzen an das DSL-Modem geschickt werden. Dieses ist dann entweder über ein Netzwerkkabel (Ethernet) oder WLAN mit dem PC verbunden.
Mit anderen Worten: Man braucht also nur eine Erweiterung für den pppd, damit man mit DSL auch ins Internet kommt. Die gängigste Implementierung dafür ist »rp-pppoe«, und ist bei den meisten Distributionen schon mitinstalliert. Die Konfiguration gestaltet sich ganz einfach: Die Datei /etc/ppp/peers/dsl-providers ist nur eine ppp.options, die dann für DSL genutzt wird. Und eigentlich sind nur die letzten Zeilen wichtig:
Listing 15.45 Die Datei /etc/ppp/peers/dsl-provider
...
plugin rp-pppoe.so eth0
user "jploetner@versatel"
In der vorletzten Zeile aktivieren Sie die erste Netzwerkschnittstelle für PPPoE, und in der letzten geben Sie Ihren Benutzernamen an. Zu diesem sollte sich in der pap-secrets natürlich auch ein Passwort finden:
Listing 15.46 Das Passwort in der Datei pap.secrets
jploetner@versatel * geheim
Nun können Sie mit dem Kommando pon dsl-provider auf der Kommandozeile eine Verbindung starten. Da dieses Skript nur ein Frontend für den pppd ist, könnte man so selbstverständlich auch Modem- oder ISDN-Verbindungen kontrollieren. Entsprechend schaltet poff eine Verbindung wieder ab, und plog gibt den Status des pppd aus.
Wer die Konfiguration eines DSL-Zugangs noch einfacher haben möchte, kann auch gleich zu einem Frontend greifen. Sehr beliebt und verbreitet ist beispielsweise pppoeconf, aber einige Distributionen helfen Ihnen auch gleich während der Installation dabei, Ihren Internetzugang entsprechend zu konfigurieren.
Abbildung 15.4 pppoeconf
Ihr Kommentar
Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.