10.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.
So 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 vor technischen Details weitestgehend schützen, finden wir es trotzdem wichtig, dass Sie über den technischen Hintergrund Bescheid wissen.
Abbildung 10.3 Einfache Konfiguration mit kppp: Einrichten-Dialog
10.5.1 Das 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. Dieses Protokoll ist verbindungsorientiert und schafft damit überhaupt erst einmal 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 Internet-Pakete, 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.
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 jedenfalls 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 LCP (das 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, besteht aber aus vier möglichen Pakettypen: aus der Anforderung zur Authentifizierung, aus der Antwort darauf, und aus einer Erfolgsmeldung bzw. aus einer Meldung über einen misslungenen Versuch.
Sofern Sie mehr über dieses Thema erfahren möchten, sollten Sie das Buch [Lloyd92A] lesen.
PPP unter Linux
Wie stellt man nun eine Internetverbindung her, und das möglichst, ohne sich zu sehr mit PPP beschäftigen zu müssen?
Genau diese Problemstellung möchten wir an dieser Stelle zu lösen versuchen. 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 ...
Zusätzlich wird der – in der Regel ebenfalls auf jedem System vorhandene – PPP-Dämon benötigt. Dieser wird aufgerufen, um eine Verbindung mit dem Einwahlrechner herzustellen und die Kommunikation bis zum Ende der Verbindung zu leiten. Genau diesen Dämon müssen wir nun konfigurieren.
Der pppd kann sowohl als Server als auch als Client für PPP-Verbindungen eingesetzt werden. Hinzu kommt die hier wohl am wichtigsten erscheinende 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 werden die zu verwendende Schnittstelle, also die serielle Leitung, an der beispielsweise ein Nullmodemkabel hängt, deren Übertragungsrate sowie die eventuellen Optionen angegeben:
// Syntax: pppd [Gerät] [Geschwindigkeit] [Optionen] # pppd /dev/ttyS0 57600 crtscts defaultroute 192.168.4.1:192.168.4.2
Listing 10.39 pppd aufrufen
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.
10.5.2 Einwahl mit einem Modem
Für eine Einwahlverbindung via Modem werden erst einmal einige Daten benötigt, 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 doch einfach 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-Adresse 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 eine große Anzahl von 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
- Hier wird die lokale Adresse für den Client vom Server empfangen und 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 Zeichen(ketten) sollen eine IP-Adresse abbilden. 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 wir eine eigene Optionsdatei mit einem beliebigen Editor. Die Beispieldatei für ein Standardmodem und die Einwahl bei einem fiktiven Serviceprovider sieht folgendermaßen aus:
# Verwende die erste serielle Schnittstelle, 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
Listing 10.40 Beispiel für eine Optionsdatei
Chat-Skript
Kommen wir nun zum eigentlichen Einwahlvorgang. Dieser wird über ein sogenanntes chat-Skript abgewickelt. <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 anhand eines Beispiels die Funktionsweise von chat.
TIMEOUT 30 ABORT "NO CARRIER" ABORT BUSY ABORT "NO DIALTONE" ABORT ERROR '' +++ATZ OK ATDT1234567890 CONNECT "" # Für den Fall, dass der Login über das Chat-Skript # und nicht etwa über chap erfolgen soll, kann nun # an dieser Stelle der Login vollzogen werden. # Im fortlaufenden Beispiel werden wir allerdings # die meist gebräuchliche PAP-Authentifizierung # verwenden. ogin> Kunde0815 assword> DasPassWort
Listing 10.41 Das Beispielskript dial.chat
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, wird abgebrochen. Gleiches gilt, wenn die Leitung besetzt ist (»BUSY«) oder wenn ein Fehler (»ERROR«) auftrat.
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.
# pppd connect "/usr/sbin/chat -v -f /etc/dial.chat"
Listing 10.42 Die Testverbindung
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 wir die PAP-Authentifizierung. 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.
Kunde0184 * 389wefn3utn Kunde1085 * 049jgenwlkr
Listing 10.43 Die Datei pap--secrets
Der Einwahltest
Sofern alles richtig konfiguriert wurde, sollte dem erfolgreichen Verbindungsaufbau nichts mehr im Wege stehen. Eine Verbindung sollte mittels folgender Kommandos aufgebaut bzw. wieder beendet werden können:
# pppd connect "/usr/sbin/chat -v -f /etc/dial.chat" … // Wir sind im Netz! … # kill -INT `cat /var/run/ppp0.pid` …
Listing 10.44 Verbindungsauf- bzw. -abbau
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.
10.5.3 Einwahl über DSL
Auch bei DSL gibt es 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 deswegen nötig, da 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 somit erst einmal unabhängig von der normalen Telefonleitung ermöglicht. <Trotzdem ist und bleibt ein Telefonanschluss – egal ob analog oder ISDN – zwingende Voraussetzung für DSL. Schließlich braucht der Provider ein physikalisches 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 dem analogen Telefon. Dieser Splitter teilt die Daten so auf, dass die normalen Frequenzbänder an das Telefon und die DSL-Daten an das DSL-Modem kommen. Dieses ist dann entweder über ein Netzwerkkabel (»Ethernet«) oder WLAN mit dem PC verbunden.
Mit anderen Worten braucht man 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«. Sie ist eigentlich bei den meisten Distributionen schon mitinstalliert.
Die Konfiguration gestaltet sich auch 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:
… plugin rp-pppoe.so eth0 user "jploetner@versatel"
Listing 10.45 Die /etc/ppp/peers/dsl-provider
In der vorletzten Zeile aktiviert man die erste Netzwerkschnittstelle für PPPoE, und in der letzten gibt man seinen Benutzernamen an. Zu diesem sollte sich in der pap-secrets natürlich auch ein Passwort finden:
jploetner@versatel * geheim
Listing 10.46 Das Passwort in der pap.secrets
Nun kann man 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 10.4 pppoeconf