original in en Guido Socher
en to nl Guus Snijders
Guido is reeds lange tijd een Linux fan. Hij houdt niet alleen van Linux om de goede technische kwaliteit maar ook vanwege de mensen en de gemeenschap achter Linux.
Toegang tot Internet is recentelijk erg eenvoudig geworden. De meeste ISPs vragen niet meer om maandelijkse bijdragen en langlopende contracten. Als een ISP technische problemen heeft of slechte service levert, kun je gewoon de volgende nemen. In Duitsland noemen we dit "Internet by call" (Internet per oproep) en het gaat zelfs nog een stap verder. Je registreerd niet en ondertekend geen enkel papier. Je betaald gewoon via je normale telefoon rekening. Merk op dat dit niet hetzelfde is gratis Internet. Gratis Internet is meestal de staat van je ISP alvorens bankroet te gaan en vaak gelinkt aan slechte data doorvoer. In het geval van "Internet by call" betaal je wel degelijk, soms zelfs flinke bedragen, maar je kunt een goede bandbreedte krijgen. Onwillekeurig hoe de details in jouw land ervoor staan, dit artikel legt uit hoe je snel de ISP kunt veranderen en veschillende inbel-verbindingen kunt gebruiken op verschillende momenten.
Het type Internet toegang die we in dit artikel behandelen is een inbel point-to-point (ppp) verbinding van jouw PC naar je ISP. Onder Linux is een programma genaamd pppd ervoor verantwoordelijk om deze verbinding op te zetten. pppd is erg goede software en zeer flexibel maar helaas bevat de documentatie die bij pppd wordt meegeleverd alleen voorbeelden met nogal oude en heel byzondere gevallen voor authenticatie en login bij je ISP. Het gebruik van deze voorbeelden om een connectie op te zetten naar een moderne ISP zal meestal falen. De meeste ISPs vandaag de dag gebruiken
Met Linux en IP masquerading
is het erg eenvoudig om niet slechts een computer, maar een hele groep te
verbinden via 1 PPP link naar je ISP. Om dit te doen, heb je minstens 1
Linux machine nodig en een willekeurig aantal andere computers. Dit ziet
er dan uit als volgt:
Als je gebruik maakt van zo'n masquerading Linux gateway en je gebruikt verschillende ISPs, loop je meestal tegen 2 problemen aan:
Alle configuratie bestanden van pppd bevinden zich normaal gesproken in /etc/pppd en meestal zul je pppd als root moeten starten. Gedurende de installatie en eerste testen zul je ingelogd moeten zijn als gebruiker root. Later zullen we zien hoe iedereen de pppd kan starten en stoppen. Het is niet verstandig om altijd als root in te loggen. De root gebruiker heeft erg weinig restricties en kan eenvoudig je configuratie per ongeluk vernietigen.
De belangrijkste bestanden voor pppd zijn:
cd /etc mv ppp ppp_old tar zxvf ppp.tar.gz
Laten we eens kijken naar het configuratie bestand voor een ISP genaamd
arcor:
# 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 modem
Tot zover hebben we het telefoon nummer gedefinieerd (0192070 in dit
voorbeeld), de snelheid van de modem, welke seriële lijn te gebruiken en
een paar configuratie opties van pppd. De algemene configuratie opties van
/etc/ppp/options zullen hier niet besproken worden. Je kunt een blik
werpen op het voorbeeld bestand en ze opzoeken in de man page van pppd.
In plaats daarvan zullen we nu inbellen bij onze ISP (arcor). Om dit te
doen, hebben we nog 2 gegevens nodig (dit is een werkend voorbeeld voor
lezers in Duitsland) :
login name: arcor
password: internet
Deze informatie dient te worden ingevoerd in het bestand
/etc/ppp/pap-secrets en de login naam komt ook in het /etc/ppp/peers/arcor
bestand (zie hierboven). Voeg een regel aan /etc/ppp/pap-secrets toe:
# This is /etc/ppp/pap-secrets
# client server secret IP-addr arcor * internet 0.0.0.0 |
Dat is het. Nu kunnnen we dit testen. Om uit te bellen, type:
pppd call arcor
killall pppd
Nu heb je 1 werkende ISP. Om andere toe te voegen, ga door als volgt:
Ik hoop dat je op dit punt ruw weg weet hoe de onderliggende mechanismes werken. Hierna zullen een paar scripts gebruiken om het gebruik makkelijker te maken. In het byzonder zullen we twee Set-UID perl scripts introduceren welke het mogelijk zullen maken om je Internet connectie te starten en te stoppen, ook als je als gewone gebruiker (dus niet als root) bent ingelogd.
Set-UID is een mechanisme dat een gewone gebruiker toestaat een specifiek
commando uit te voeren en dat commando zal zich gedragen alsof de eigenaar
van dat commando het heeft uitgevoerd. Vanzelfsprekend dient dit met enige
zorg ontworpen te worden, om geen beveiligings probleem op te leveren.
De Set-UID perl scripts zijn opgenomen in ppp.tar.gz dat je eerder hebt
uitgepakt. Ze zouden een "s" in de bestandspermissies moeten hebben en
eigendom zijn van de gebruiker root:
> 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
Als ze deze permissies niet hebben, kun je ze veranderen met het commando
chmod 6755 ppp-off ppp-on.
De ppp-off ppp-on scripts zijn slechts wrapper scripts. Het enige dat ze
doen is pppd call een-config-bestand of killall pppd
uitvoeren. Het voordeel is dat iedere gebruiker ze nu kan gebruiken. Het
ppp-on script heeft ook een speciale optie voor ISPs die geen gebruik
maken van automatische DNS configuratie. Mocht jij zo'n ISP hebben,
bewerk het bestand, en zoek naar "static". Er zijn daar voorbeelden welke
je kunt aanpassen. Je gebruikt die ppp-on/ppp-off scripts als volgt:
Om online te gaan: /etc/ppp/scripts/ppp-on arcor Om de Internet connectie te stoppen: /etc/ppp/scripts/ppp-off
Ten slotte zullen we een graphische interface gebruiken om onze Internet
connectie te starten en te stoppen. Een cgi-programma is een programma dat
interactieve web-pagina's genereerd. Een goed ontworpen cgi-programma
werkt met elke browser en ieder besturingssysteem. Daarom zullen we een
cgi-programma gebruiken. Het zal er zo uitzien:
$url="http://127.0.0.1/cgi-bin/pppcontrol";
Het pppcontrol cgi-script leest een configuratie bestand genaamd
/etc/ppp/gpppwrap.conf in, welke de volgende syntax heeft:
ppponarg: <argument_om_aan_ppp_on_te_geven> - een additionele commentaar string |
# This is /etc/ppp/gpppwrap.conf ppponarg: arcor -- arcor.net 3pf/min ppponarg: talknet -- internet by call 3.5pf/min
Dit was misschien heel veel nieuwe informatie voor je, maar als je het
eenmaal draaiende hebt, hoef je alleen van tijd tot tijd een ISP toe te
voegen/verwijderen, en dat is echt heel simpel, zoals je hierboven hebt
kunnen zien.
Je kunt nu eenvoudig een ISP selecteren uit de lijst op de web-pagina,
en uitbellen met een druk op de knop.
Om dnrd vanuit de broncode te installeren, dien je:
uit te pakken: tar zxvf dnrd-2.10.tar.gz cd dnrd-2.10/src/ te compileren: make strip dnrd te installeren: cp dnrd /usr/local/sbin/ en de lege lege directory /etc/dnrd/ aan te maken: mkdir /etc/dnrd/
als de ppp-link actief wordt: dnrd -s 195.50.149.33 -s 195.50.140.6 als je de verbinding afsluit, gebruik je: dnrd
dnrd kan nog veel doen dan dat. Je kunt het zelfs inzetten als een kleine
DNS server op zich. Onder Unix kun je altijd in het /etc/host.conf
bestand, de regel
order hosts, bind
toevoegen en dan alle machines in je kleine, lokale netwerk symbolische
namen geven in het bestand /etc/hosts. Helaas voor de domme Windows
machines in je netwerk heb je daar niet die mogelijkheid. Als dnrd een
/etc/hosts bestand op je Linux PC aantreft, zal het automatisch dienen als
DNS server voor de entries die hierin genoemd staan. Dat lost dat probleem
ook weer op!
De syntax van het /etc/hosts bestand is als volgt:
# syntax:
# ip-addr hostname alias1 alias2 ... # example: 192.168.0.1 linuxpc.mynet linuxpc 192.168.0.2 peppermint.mynet pepper mint |
Om dnrd niet alleen als DNS proxy maar ook als DNS server voor de entries
in /etc/hosts in te zetten, zou je het moeten starten tijdens het booten.
Om dit te doen, voeg de regel
daemon /usr/local/sbin/dnrd
# This is /etc/resolv.conf when dnrd is running nameserver 127.0.0.1
>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.2Je kunt nslookup afsluiten door op ctrl-d te drukken.
In deze sectie zal ik uitleggen hoe de debugging output van pppd te activeren. Het kan je helpen uit te vinden wat er fout gaat als het niet werkt. Ik ontdekte dat het niet altijd een configuratie fout aan mijn kant was, als het niet werkte.
Het eerste dat pppd in ons geval doet, is de seriële poort openen (/dev/modem, een link naar bijv. /dev/ttyS0) om het script /etc/ppp/scripts/ppp-on-dialer-pap uit te voeren. Dit script zal AT commando's naar de modem sturen. Deze commando's laten de modem uitbellen naar je ISP. Als er iets fout gaat, kun je de meldingen vinden in het bestand /etc/ppp/connect-errors. Meestal zal het connect-errors bestand je voldoende aanwijzingen geven om te achterhalen wat er fout ging. Mocht dit niet het geval zijn dan kun je AT commando's handmatig ingeven. Om dit te doen heb je een seriële lijn communicatie programma nodig, zoals minicom (onderdeel van de meeste Linux distro's), of cu (meestal onderdeel van een pakket genaamd uucp) of kermit (verkrijgbaar op http://www.columbia.edu/kermit/ck70.html). Gebruik dit seriële lijn communicatie programma om te "praten" tegen je modem. Als je typt AT, de modem zou moeten antwoorden met "OK". Zoniet, check de modem snelheid instellingen, de voedingskabel, etc... Indien het "ok" antwoordde, probeer dan het commando ATDT1234. De modem zou nu het nummer 1234 moeten bellen. Zoniet, check de manual van je modem. Het commando zou ook ATD1234 (zonder T) kunnnen zijn, of een andere instelling klopt niet.
Nadat de modem heeft uitgebeld naar je ISP, is de volgende stap de
ppp-negotiation (onderhandeling) fase. Om te zien wat hier gebeurt, moet
je de syslog facility ";daemon.debug" in /etc/syslog.conf activeren.
Bewerk het bestand /etc/syslog.conf en voeg ";daemon.debug" toe aan de
regel die eindigt op /var/log/messages. Bijvoorbeeld zoiets als dit:
*.info;mail.none;authpriv.none;daemon.debug /var/log/messages
tail -f /var/log/messages
Een succesvolle PPP connectie setup ziet er ongeveer zo uit:
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 |
Het is onmogelijk om hier iedere mogelijke fout te beschrijven, ten eerste omdat ik jouw setup niet ken en ten tweede omdat er simpelweg teveel dingen zijn die fout zouden kunnen gaan. Met een klein beetje creativiteit en de dingen in gedachten houden die je hier hebt geleerd, zou je in staat moeten zijn de meeste fouten te vinden. Als je het echt niet aan werk kunt krijgen en het lijkt niet op een fout aan jouw kant, probeer dan gewoon een andere ISP. Het zou heel goed een fout bij de ISP kunnen zijn.