original in en Guido Socher
en to de Guido Socher
Guido ist ein langjähriger Linuxfan. Er mag Linux nicht nur wegen seiner hohen technischen Qualität, sondern auch wegen der Leute und der Gemeinschaft, die hinter Linux steht. Meine Homepage findest Du hier.
Ein Internetzugang für Privatleute ist immer einfacher geworden. Die meisten Anbieter verlangen keine monatlichen Gebühren mehr oder Langzeitverträge. Wenn ein Anbieter schlechten Service bietet oder technische Probleme hat, dann nimmt man einfach den nächsten. In Deutschland geht das sogar noch einen Schritt weiter. Mit "Internet by Call" registriert man sich nicht und unterschreibt auch keinen Papierkram. Man zahlt einfach per Telefonrechnung. Beachte, daß "Internet by Call" nicht mit dem, im angelsächsischen verbreiteten, "Free Internet" gleichzusetzen ist. "Free Internet" ist im allgemeinen der Zustand eines Providers vor seinem Bankrott und meist mit schlechtem Service verbunden. Bei "Internet by Call" zahlt man manchmal recht viel, man kann dafür aber auch gute Bandbreite erhalten. Unabhängig davon, wie die Details in Deinem Land sind, wird dieser Artikel erklären, wie man schnell und einfach zwischen den Providern wechselt und verschiedene Provider zu verschiedenen Zeiten benutzen kann.
Die Art des Internetzugangs, die hier besprochen wird, ist eine point-to-point (PPP) Wählverbindung von Deinem PC zum Provider. Unter Linux ist ein Programm namens pppd für den Aufbau dieser Verbindung verantwortlich. pppd ist eine sehr gute und flexible Software. Leider befassen sich die Beispiele in der Dokumentation zu pppd eher mit veralteten oder ganz speziellen Fällen für die Autentifizierung und den Einlogvorgang. Wenn man diese Beispiele bei einem modernen ISP ausprobiert, wird das im allgemeinen versagen. Die meisten ISPs benutzen heutzutage:
Mit Linux und IP masquerading
ist es außerdem sehr leicht, nicht nur einen Rechner, sondern ein ganzes
Netzwerk von Computern über eine PPP-Verbindung mit dem Internet zu
verbinden. Um das zu machen, braucht man mindestens einen Linuxrechner
und eine beliebige Anzahl anderer Rechner. Es sieht etwa so aus:
Benutzt man solch eine IP masquerading Linux Gateway und verschiedene ISPs zu verschiedenen Zeiten, so hat man im allgemeinen 2 Probleme:
Normalerweise befinden sich alle Konfigurationsdateien von pppd in /etc/ppp und im allgemeinen muß man pppd als root starten. Während der Installation und der ersten Tests sollte man als root eingeloggt sein. Später werde ich erklären, wie jeder Benutzer pppd starten und stoppen kann. Es ist nicht gut, wenn man immer als root eingeloggt ist, da man dann sehr wenige Restriktionen hat und seine Konfiguration durch einen Handhabungsfehler viel leichter zerstören kann.
Die wichtigen Dateien für pppd sind:
cd /etc mv ppp ppp_old tar zxvf ppp.tar.gzNach dem Auspacken wirst Du sehen, daß es noch weitere Dateien im ppp.tar.gz gibt. Das sind zusätzliche wrapper Scripte, die die Konfiguration vereinfachen. Ihr Zweck wird weiter unten erklärt. (Beachte: In den Dateien gibt es einige Preisangaben zu den verschiedenen Internet Providern. Diese könnten inzwischen veraltert sein. Besuch die Seite des betreffenden Anbieters, um genaue Informationen zu erhalten.)
Laß uns einen Blick auf die Konfigurationsdatei für einen Internet Provider namens Arcor werfen:
# This is /etc/ppp/peers/arcor
# Home page of the ISP arcor: http://www.arcor-online.de/ #---------- # serial device and modem speed (normally 38400 or 57600): /dev/modem 57600 # modem dial-out script with phone number: connect '/etc/ppp/scripts/ppp-on-dialer-pap 0192070' # specific options, common options are # read from /etc/ppp/options noipdefault # tell pppd to use this users name for PAP authentication: user arcor # try dynamic dns: usepeerdns # |
cd /dev ln -s ttyS0 modem57600 ist die Geschwindigkeit des Modems und hängt von deiner Hardware ab. Die Zeile, die mit "connect" beginnt, bezeichnet ein Script (/etc/ppp/scripts/ppp-on-dialer-pap), das die Kommunikation mit deinem Modem übernimmt. Der Dialog mit dem Modem geht über sogenannte AT Befehle. Das sind einfache ASCII Befehle, die alle mit den Buchstaben AT anfangen. Der Parameter, der dem Script übergeben wird (0192070) ist die Telefonnummer, die gewählt werden soll.
Bis jetzt haben wir die Telefonnummer (0192070, im Falle von Arcor) die
Modemgeschwindigkeit und die zu benutzende serielle Schnittstelle sowie
einige andere Einstellungen für pppd vorgenommen. Wir werden hier nicht
die restlichen Einstellungen aus /etc/ppp/options besprechen. Wer
interessiert ist, kann sich die Einstellungen aus der Beispieldatei ansehen
und dann in der man-Seite für pppd nachschlagen. Wir werden uns
stattdessen gleich bei unserem Provider (arcor in unserem Beispiel)
einwählen. Dafür brauchen wir zwei weitere Dinge:
login name: arcor
password: internet
Dies ist ein echtes Beispiel, das in Deutschland so funktionieren
sollte. Diese Angaben müssen in /etc/ppp/pap-secrets eingetragen werden.
Der Login Name geht außerdem noch in die /etc/ppp/peers/arcor Datei ein
(siehe oben). Füge einfach in /etc/ppp/pap-secrets eine Zeile hinzu, die
wie folgt aussieht:
# This is /etc/ppp/pap-secrets
# client server secret IP-addr arcor * internet 0.0.0.0 |
Das war's. Nun können wir es testen. Um sich bei Arcor einzuwählen, tippt man einfach:
pppd call arcorarcor ist dabei der Name der Konfigurationsdatei im Verzeichnis /etc/ppp/peers/
killall pppdIch hoffe, daß dieses Beispiel bei Dir funktioniert hat. Es sollte definitiv genau so funktionieren für unsere Leser aus Deutschland. Für andere Provider und Länder muß man natürlich Telefonnummer, login und password anpassen. Falls es nicht funktioniert hat, dann wirf einen Blick auf den Abschnitt Fehleranalyse am Ende des Artikles.
Jetzt hast Du einen funktionierenden Provider. Um weitere hinzuzufügen, macht man folgendes:
Nun weißt Du in etwa wie die grundlegenden Mechanismen funktionieren. Als nächstes benutzen wir ein paar Skripte, um die Handhabung einfacher zu machen. Speziell werden wir zwei Set-UID Perlskripte benutzen, die es möglich machen, die Internetverbindung auf- und abzubauen, auch wenn man als normaler Benutzer eingeloggt ist (nicht root).
Set-UID ist ein Mechanismus, der es erlaubt, ein Kommando so auszuführen,
als wäre es von der Person ausgeführt worden, der die Datei gehört. Das
Set-UID Programm muß natürlich mit Sorgfalt entwickelt werden, da sonst
ein Sicherheitsloch entsteht. Die Set-UID Perlskripte sind schon in dem
ppp.tar.gz Paket dabei gewesen, das du oben ausgepackt hast. Diese
Perlskripte sollten ein "s" in den Dateizugriffsrechten haben und dem
Benutzer root gehören:
> cd /etc/ppp/scripts
> ls -al ppp-on ppp-off
-rwsr-sr-x 1 root root 1258 Jan 7 13:24 ppp-off
-rwsr-sr-x 1 root root 2619 Jan 9 20:30 ppp-on
Falls das "s" fehlt, kannst Du das als root mit dem Befehl
chmod 6755 ppp-off ppp-on
korrigieren.
Die ppp-off, ppp-on Skripte wickeln (wrapper) die anderen Befehle
gewissermaßen ein. Sie bringen also keine neue Funktion, sondern führen
die schon bekannten Befehle lediglich aus: Sie rufen pppd call
some-config-file oder killall pppd auf.
Der Vorteil ist, daß jetzt jeder Benutzer die Internetverbindung starten
kann. Das ppp-on Skript hat außerdem noch einen speziellen Mechanismus
zur Behandlung von Providern, die statische DNS Adressen benutzen. Falls
das bei Deinen Providern der Fall sein sollte, dann suche einfach nach dem
Wort "static" und ändere das enthaltene Beispiel ab. Man benutzt die
ppp-on/ppp-off Befehle wie folgt:
Um online zu gehen: /etc/ppp/scripts/ppp-on arcor Um die Internetverbindung zu beenden: /etc/ppp/scripts/ppp-offDas sollte jetzt für jeden Benutzer auf deinem Computer funktionieren. arcor ist hier wieder der Name der Datei in /etc/ppp/peers/. Du könntest vielleicht einen anderen Namen gewählt haben.
Letztendlich wollen wir eine grafische Oberfläche benutzen, um die
Internetverbindung zu starten und zu stoppen. Ein cgi-Programm ist ein
Programm, das interaktive Webseiten erzeugen kann. Ein sauber geschriebenes
cgi-Programm funktioniert mit jedem Browser und jedem Betriebssystem. Das
ist der Grund, warum wir diese Lösung wählen.
Es wird etwa so aussehen:
$url="http://127.0.0.1/cgi-bin/pppcontrol";
Das pppcontrol cgi-Skript liest eine Konfigurationsdatei namens /etc/ppp/gpppwrap.conf. Die Syntax dieser Datei ist wie folgt:
ppponarg: <agument_to_pass_to_ppp_on> - some additional comment string |
# This is /etc/ppp/gpppwrap.conf ppponarg: arcor -- arcor.net 3pf/min ppponarg: talknet -- internet by call 3.5pf/minBeachte: Die Preise 3pf/min und 3.5pf/min könnten sich inzwischen geändert haben.
Das war möglicherweise eine ganze Menge neuer Informationen, aber
wenn Du es einmal aufgesetzt hast, dann wirst Du lediglich von
Zeit zu Zeit einen neuen Provider hinzufügen oder einen löschen.
Nun kannst du bequem einen Internetprovider aus der Liste
auf der Webseite (pppcontrol) auswählen und ihn mit einem einzigen
Tastendruck anwählen.
Um dnrd vom Quellcode zu installieren macht, man folgendes:
Das Paket auspacken: tar zxvf dnrd-2.10.tar.gz cd dnrd-2.10/src/ kompilieren: make strip dnrd installieren: cp dnrd /usr/local/sbin/ ein leeres Verzeichnis namens /etc/dnrd/ erzeugen : mkdir /etc/dnrd/Der DNS proxy dnrd wird wie folgt benutzt (in diesem Beispiel sind 195.50.149.33 und 195.50.140.6 die IP Adressen der DNS Server deines Providers):
sobald die ppp-Verbindung aktiv wird: dnrd -s 195.50.149.33 -s 195.50.140.6 wenn die Verbindung beendet wird: dnrddnrd wird in unseren Fall einfach von den Skripten /etc/ppp/ip-up und /etc/ppp/ip-down aus gestartet und das geschieht alles automatisch. Die Skripte, die du oben heruntergeladen hast, sind schon dafür vorbereitet und sie erwarten dnrd im Verzeichnis /usr/local/sbin/.
dnrd kann viel mehr als nur das. Es kann sogar als eigener
kleiner DNS Server arbeiten. Unter Unix kann man immer in /etc/host.conf
die Zeile
order hosts, bind
schreiben und dann allen Rechnern im kleinen privaten Netzwerk
in der Datei /etc/hosts einen Namen geben. Leider können das die dummen
Windows Rechner nicht. Falls dnrd die Datei /etc/hosts findet, dann
spielt er automatisch DNS Server für die Einträge in dieser Datei.
Das löst das Problem!
Die Syntax der /etc/hosts Datei ist wie folgt:
# syntax:
# ip-addr hostname alias1 alias2 ... # example: 192.168.0.1 linuxpc.mynet linuxpc 192.168.0.2 peppermint.mynet pepper mint |
Um dnrd nicht nur als DNS proxy, sondern auch als DNS Server für Einträge in /etc/hosts zu benutzen, sollte man dnrd schon beim Booten starten. Dazu fügt man die Zeile
daemon /usr/local/sbin/dnrdam Ende des Abschnittes start in dem boot Skript /etc/rc.d/init.d/network ein (die Syntax diese Eintrages ist für redhat, mandrake etc... Bei Deiner Distribution mag das anders sein).
# This is /etc/resolv.conf when dnrd is running nameserver 127.0.0.1Der Vorteil ist, daß man nun den internen Pufferspeicher von dnrd auf allen Rechnern im Netz und nicht nur für die Rechner innerhalb des Netzes benutzt.
>nslookup Default Server: localhost Address: 127.0.0.1 >pepper Server: localhost Address: 127.0.0.1 Non-authoritative answer: Name: peppermint.mynet Address: 192.168.0.2nslookup wird durch Tippen von strg-d (crtl-d) beendet.
In diesem Abschnit werde ich erkären, wie man debug Ausgaben für pppd aktiviert. Das wird dir helfen, herauszufinden, was schief gelaufen ist, falls es mal nicht funktioniert. Leider habe ich oft festgestellt, daß es nicht mein Konfigurationsfehler war, sondern ein Problem auf der Seite des Porviders.
Das erste, was pppd in unserem Fall macht, ist die serielle Schnittstelle (/dev/modem, z.b ein Link auf /dev/ttyS0) zu öffnen, um das Skript /etc/ppp/scripts/ppp-on-dialer-pap laufen zu lassen. Dieses Skript wird dann AT Befehle an das Modem schicken. Diese Befehle veranlassen dein Modem dazu, deinen Provider anzurufen. Wenn irgendetwas dabei daneben geht, finden sich die Fehlermeldungen in der Datei /etc/ppp/connect-errors. Meistens wird die Datei connect-errors genügend Hinweise auf das geben, was schief gelaufen ist. Falls das nicht der Fall ist, kann man die AT Befehle manuell eintippen. Dazu braucht man ein Terminalprogramm, das mit der seriellen Schnittstelle reden kann. Hierzu sind minicom (fast bei jeder Linuxdistribution dabei) oder cu (normalerweise Teil eines Paketes namens uucp) oder kermit (kann von http://www.columbia.edu/kermit/ck70.html heruntergeladen werden) geeignet. Man benutzt dieses Terminalprogramm, um mit dem Modem zu "reden". Wenn man AT tippt, sollte das Modem "OK" antworten. Falls nicht, dann überprüfe die Einstellung der Geschwindigkeit, die Stromversorgung usw... Falls es mit OK geantwortet hat, dann kann man den Befehl ATDT1234 probieren. Das Modem sollte dann die Nummer 1234 anrufen. Falls nicht, ist das Handbuch des Modems zu befragen. Das Kommando könnte auch ATD1234 (ohne T) heißen oder irgendeine andere Einstellung ist falsch.
Nachdem das Modem den Provider angerufen hat, ist der nächste Schritt die PPP Verhandlungsphase. Um zu beobachten, was dort passiert, muß man die syslog facility daemon.debug in /etc/syslog.conf einschalten. Editiere die Datei /etc/syslog.conf und füge ";daemon.debug" zu der Zeile, die mit /var/log/messages endet, hinzu. Z.B so:
*.info;mail.none;authpriv.none;daemon.debug /var/log/messagesAls nächstes startet man syslog mit folgedem Befehl neu:
tail -f /var/log/messagesund beobachtet die Debugmitteillungen während sich pppd mit dem Rechner des Providers unterhält:
Ein erfolgereicher Aufbau der Verbindung sieht so aus:
Jan 14 17:18:11 bearix pppd[721]: pppd 2.3.10 started by root, uid 0
Jan 14 17:18:34 bearix pppd[721]: Serial connection established. Jan 14 17:18:34 bearix pppd[721]: Using interface ppp0 Jan 14 17:18:34 bearix pppd[721]: Connect: ppp0 <--> /dev/modem Jan 14 17:18:35 bearix pppd[721]: sent [LCP ConfReq id=0x1 Jan 14 17:18:37 bearix pppd[721]: rcvd [LCP ConfReq id=0x46 Jan 14 17:18:37 bearix pppd[721]: sent [LCP ConfNak id=0x46 Jan 14 17:18:38 bearix pppd[721]: rcvd [LCP ConfReq id=0x47 Jan 14 17:18:38 bearix pppd[721]: sent [LCP ConfAck id=0x47 Jan 14 17:18:38 bearix pppd[721]: sent [LCP ConfReq id=0x1 Jan 14 17:18:38 bearix pppd[721]: rcvd [LCP ConfAck id=0x1 Jan 14 17:18:38 bearix pppd[721]: sent [PAP AuthReq id=0x1 user="arcor" password="internet"] Jan 14 17:18:40 bearix pppd[721]: rcvd [LCP ConfReq id=0x49 Jan 14 17:18:40 bearix pppd[721]: sent [LCP ConfReq id=0x2 Jan 14 17:18:40 bearix pppd[721]: sent [LCP ConfAck id=0x49 Jan 14 17:18:41 bearix pppd[721]: rcvd [LCP ConfAck id=0x2 Jan 14 17:18:41 bearix pppd[721]: rcvd [CHAP Challenge id=0x5 <0c7672840494152025f937ac4f5e135e>, name = "klndiinternet"] Jan 14 17:18:41 bearix pppd[721]: sent [CHAP Response id=0x5 Jan 14 17:18:41 bearix pppd[721]: rcvd [CHAP Success id=0x5 ""] Jan 14 17:18:41 bearix pppd[721]: sent [IPCP ConfReq id=0x1 Jan 14 17:18:41 bearix pppd[721]: sent [CCP ConfReq id=0x1 Jan 14 17:18:41 bearix pppd[721]: rcvd [IPCP ConfReq id=0x8e Jan 14 17:18:41 bearix pppd[721]: sent [IPCP ConfAck id=0x8e Jan 14 17:18:41 bearix pppd[721]: rcvd [IPCP ConfRej id=0x1 Jan 14 17:18:41 bearix pppd[721]: sent [IPCP ConfReq id=0x2 Jan 14 17:18:41 bearix pppd[721]: rcvd [LCP ProtRej id=0xfb 80 fd 01 01 00 0f 1a 04 78 00 18 04 78 00 15 03 2f] Jan 14 17:18:41 bearix pppd[721]: rcvd [IPCP ConfNak id=0x2 Jan 14 17:18:41 bearix pppd[721]: sent [IPCP ConfReq id=0x3 Jan 14 17:18:41 bearix pppd[721]: rcvd [IPCP ConfAck id=0x3 Jan 14 17:18:41 bearix pppd[721]: local IP address 145.253.88.6 Jan 14 17:18:41 bearix pppd[721]: remote IP address 145.253.1.150 Jan 14 17:18:41 bearix pppd[721]: primary DNS address 145.253.2.11 Jan 14 17:18:41 bearix pppd[721]: secondary DNS address 145.253.2.75 Jan 14 17:18:41 bearix pppd[721]: Script /etc/ppp/ip-up started (pid 723) Jan 14 17:18:42 bearix pppd[721]: Script /etc/ppp/ip-up finished (pid 723), status = 0x0 |
Es ist unmöglich jeden Fehlerfall hier zu beschreiben, zum einen, weil ich nicht weiß, was für einen Rechner/Modem du hast und zum anderen, weil es einfach zu viele Möglichkeiten gibt. Mit etwas Kreativität und den Dingen, die du hier gelernt hast, solltest du jedoch in der Lage sein, die meisten Fehler zu finden. Falls du es einfach nicht zum Laufen bekommst und es nicht wie ein Fehler auf deiner Seite aussieht, dann kann es sehr gut ein Fehler beim Provider sein. Nimm einfach einen anderen.