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.