Kapitel 9 - Linux

9.1 Hur använder jag pppd i Linux?
För att koppla upp sig med hjälp av pppd mot Algonet så är det en del saker som behöver göras. Det finns en kortfattat beskrivning samt skriptexempel på http://www.algonet.se/~stwi/algonet.html för PPP, Slirp samt ISDN SyncPPP mot Algonet. Beskrivningen nedan som är mer genomgående och fungerar även bra för andra operativsystem såsom Solaris, FreeBSD som använder pppd. pppd programmet hittar man för övrigt på ftp://cs.anu.edu.au/pub/software/ppp/.

En grundförutsättning är att du har PPP i kärnan eller som en modul. Om du inte har detta så måste du kompilera om kärnan.

Följande filer behöver skapas eller editeras, bör ägas av root samt deras rekommenderade filmod är:

/etc/ppp/pap-secrets 600
/etc/ppp/options 644 (eller 640)
/etc/ppp/chat.algonet 644 (eller 640)
/etc/resolv.conf 644
/usr/local/bin/start-algo 755 (eller 750)

Optionella filer:

/etc/ppp/ip-up 700
/etc/ppp/ip-down 700
/usr/local/bin/stop-algo 755 (eller 750)

1) PAP filen (/etc/ppp/pap-secrets)

Algonet använder PAP (Password Authentication Protocol) för autentifiering, så du måste lägga in din Algonet användarid samt ditt lösenord i PAP filen /etc/ppp/pap-secrets.

Exempel för användaren med Algonet id: kalle och lösenordet: kallespassword.

# Filen /etc/ppp/pap-secrets
# användarid ISP lösenord
kalle * kallespassword

Om du har flera ISPer (Internet Service Providers) så kan filen se ut så här:

# Filen /etc/ppp/pap-secrets
# användarid ISP lösenord
kalle algonet kallespassword
kalle tele2 xyz109
hugo telia 123AbC

Du måste då ange ISP namn (remotename) som parameter till pppd samt byta /etc/resolv.conf fil i /etc/ppp/ip-up skriptet. Parameter ipparam behöver du också sätta för att kunna styra /etc/ppp/ip-up skriptet. Mer om detta längre ner.

2) pppd options filen (/etc/ppp/options)

Standardparametrar (options) för pppd anges i filen /etc/ppp/options.

Exempel på innehåll för modem förbindelser:

lock
modem
crtscts
asyncmap 0
mtu 552
mru 552

Om du använder ISDN och synchron PPP tillsammans med modem (Async PPP) så bör du flytta ut alla options och specificera dem explicit i pppd bortsett från asyncmap 0 som gäller både för modem samt synchron PPP.

3) pppd startup skriptet (/usr/local/bin/start-algo)

Exempel på startup skript för användare kalle:

#! /bin/sh
# Filen /usr/local/bin/start-algo
DEVICE=/dev/modem
SPEED=115200
USER=kalle
REMOTENAME=algonet

# 115200 bps when 38400 is set
#setserial $DEVICE spd_vhi

# start PPP session
/usr/sbin/pppd connect '/usr/sbin/chat -v -f /etc/ppp/chat.algonet' debug \
user $USER defaultroute passive $DEVICE $SPEED

# Use this instead if you have a multi-ISP setup
#/usr/sbin/pppd connect '/usr/sbin/chat -v -f /etc/ppp/chat.algonet' debug \
# remotename $REMOTENAME ipparam $REMOTENAME user $USER defaultroute passive \
# $DEVICE $SPEED

DEVICE skall vara satt till den seriella porten där ditt modem sitter.

/dev/cua0 för COM1
/dev/cua1 för COM2
osv

Det kan vara bra att ha en symbolisk länk till ditt modem device.

ln -s /dev/cua0 /dev/modem

I vissa äldre Linuxsystem samt pppd versioner så var man tvungen att anropa setserial med spd_vhi parametern för att få högre DTE hastighet än 38400.

Ta bort debug flaggan samt -v flaggan när du har ett fungerande system. Dessa är endast till för att få spårningsinformation i vissa system loggar.

För att starta en PPP session så anropar du detta skript, och du terminerar
sessionen genom att exempelvis skicka en TERM signal till pppd. Exempelvis:

kill `cat /var/run/ppp0.pid`

Du kan lägga det senare kommandot i filen /usr/local/bin/stop-algo.

/usr/sbin/pppd programmet måste vara chmodad till 4755 (eller 4750), och ägas av root för att du skall kunna starta PPP sessioner som en vanlig användare.

4) DNS (Domain Name Server) konfigurering (/etc/resolv.conf)

Filen /etc/resolv.conf innehåller de DNS servrar du vill använda för hostnamn till IP address uppslagning.

Exempel på /etc/resolv.conf fil:

#
# /etc/resolv.conf
#
domain algonet.se
nameserver 194.213.74.1
nameserver 194.213.74.11
search algonet.se algonet.se

Den sista raden med search algonet.se algonet.se talar om vilken default domän du vill ha, om du inte anger ett explicit domännamn. Ex: Om du skriver telnet kairos, så byter resolvern (namnuppslagaren) ut kairos mot kairos.algonet.se och skickar det sen vidare till specificerad primär DNS server för att få tag i IP adressen.

Om du har flera olika ISP konton och vill ha olika DNS servrar, så kan du lägga filerna under /etc/ppp/ och sedan kopiera upp rätt version till /etc/resolv.conf i /etc/ppp/ip-ip skriptet.

Exempel på /etc/ppp/ip-up skript:

#! /bin/sh
# Filen /etc/ppp/ip-up körs när PPP förbindelse har etablerats.
# $1=interface $2=device $3=speed $4=localip $5=remoteip $6=ipparam

if [ "$6" = telia ]; then
cp -p /etc/ppp/resolv.conf.telia /etc/resolv.conf
elif [ "$6" = algonet ]; then
cp -p /etc/ppp/resolv.conf.algo /etc/resolv.conf
elif [ "$6" = tele2 ]; then
cp -p /etc/ppp/resolv.conf.tele2 /etc/resolv.conf
fi

Skriptet /etc/ppp/ip-down anropas när förbindelsen bryts. Där kan du återställa saker om det skulle behövas.

#! /bin/sh
# Filen /etc/ppp/ip-down körs när PPP förbindelsen bryts.
# $1=interface $2=device $3=speed $4=localip $5=remoteip $6=ipparam
cp -p /etc/ppp/resolv.conf.org /etc/resolv.conf

5) Modem samt inloggnings chat sekvensen. (/etc/ppp/chat.algonet)

Chat sekvensen för äkta PPP mot Algonet har vi definierat i filen /etc/ppp/chat.algonet, vilken anropas av pppd vid uppkopplingsfasen:

ABORT BUSY
ABORT 'NO CARRIER'
ABORT '** Bad Password'
"" ATZ OK
ATDT57822222 CONNECT

Du måste byta ut telefonnumret ovan (57822222) mot den modempool du vill koppla upp dig mot. Du kan lägga till en modem initialiserings sträng efter ATZ OK om du vill, exempelvis ATM0 OK för att slå av modemljudet.

Om man vill köra Slirp (emulerad SLIP/PPP) istället så kan man utöka chat sekvensen något. Se exempel på http://www.algonet.se/~stwi/algonet.html för mer info.

6) Problemsökning

Det händer tyvärr alltför ofta att saker och ting inte fungerar vid första försöket. Då kan det vara aktuellt att spåra för att se vad som händer. Slå på alla debug flaggorna till chat och pppd. -v för chat samt debug för pppd.

Editera filen /etc/syslog.conf och lägg in följande:

# log ppp
daemon.* /var/log/ppp

Starta om syslogd processen genom att skicka en HUP signal till den.

Nu kommer PPP protokoll meddelandena att loggas i filen /var/log/ppp. Chat sekvensen loggas i filen /var/log/messages. Försök att analysera vad som händer genom att titta i dessa loggar.

Vanligt misstag är att man inte avslutat filer med ett newline tecken, och då ignoreras den raden. Ett annat misstag är att man hämtat ner filerna via DOS/Windows i ASCII format och sedan inte konverterat dem till Unix format, dvs filtrerat bort carriage return (CR) teckena.

Om du inte får det och fungera och inte kan hitta felet själv så kan du prova och posta ditt problem till algonet.unix. Posta då hela loggarna /var/log/messages samt /var/log/ppp från start av pppd till slutet, kom dock ihåg att byta ut lösenordet som kan finnas i loggen.

7) Relaterade program

irqtune är ett program för att trimma avbrottshanteringen i Linux. Om man har problem med tappade paket speciellt under skrivning till disk så kan man öka prioriteten för serieporten. Se http://www.best.com/~cae/irqtune/.

diald, dial on demand daemon, är ett program för att automatiskt koppla upp förbindelser vid behov samt ta ner dem vid inaktivitet. Se http://www.loonie.net/~eschenk/diald.html.

Diverse flora av PPP program (trevliga GUI klienter m.m.) hittar man på ftp://ftp.funet.fi/pub/Linux/sunsite/system/network/serial/

eller

http://sunsite.unc.edu/pub/Linux/system/network/serial/

- Skrivet av Stefan Wikström