Vytáčené připojení a možnosti pppd

22. 7. 2002
Doba čtení: 7 minut

Sdílet

Mnoho z nás se stále ještě připojuje na Internet vytáčenou linkou. Dnes se dozvíme více o PPP připojení programem pppd. Názorně si předvedeme jeho běžnou konfiguraci a podíváme se na programy, které umožňují zlepšit práci na vytáčené lince.
Vytáčená linka

Pryč jsou doby, kdy provideři nabízeli vytáčené spojení s pevnou síťovou adresou a SLIP protokolem. Dnes převažuje připojení PPP. K přihlašování se již nepoužívá přihlašování heslem, ale ověřování PAP nebo CHAP.

Jak probíhá připojení

K připojení nelze použít standardní ifconfig – před připojením je nutné provést přihlášení a ověření, a o to se stará buď balík ppp, nebo některý GUI program s podobnou funkcí. V článku budeme psát o ppp.

Pokud je pppd suid root, může jej spustit každý uživatel. V některých distribucích se o vytáčení stará program wvdial, my si však popíšeme cestu, jak vytáčet i bez něj –

připravíme si jednoduchý skript (v některých distribucích se jmenuje pppon nebo ip-on):

#! /bin/sh
/usr/sbin/pppd /dev/modem call mujprovider

Program pppd načte nastavení z /etc/ppp/options, z /etc/ppp/op­tions.jméno_za­řízení a z příkazové řádky a zahájí připojování. Příkaz call

argument přitom znamená, že se načte soubor z /etc/ppp/pe­ers/argument.

Stejně jednoduchý bývá i skript pro zavěšení (jmenuje se pppoff nebo ip-off, jméno souboru může záležet na distribuci; zavěsit linku může jen ten uživatel, který pppd spustil, nebo root):

#! /bin/sh
kill `cat /var/run/ppp0.pid`

V mém případě je /etc/ppp/options jednoduchý:

# používat zámky
lock

Protože používám symbolické zařízení /dev/modem, bude se číst též skript /etc/ppp/opti­ons.modem. Ten není o nic složitější:

# používat signály Carrier Detect a Data Terminal Ready
modem
# používat hardwarové řízení toku dat (RTS/CTS)
crtscts
# rychlost sériové linky modemu
115200

Pro tuto konfiguraci by měl být modem nastaven tak, aby bylo možné zavěsit signálem DTR. (Pokud se vám zavěšování signálem DTR nelíbí, lze běžné modemy zavěsit sekvencí +++ATH, kde úvodní +++ jsou z obou stran odděleny zhruba sekundovou pauzou.)

Nyní přichází zajímavější soubor /etc/ppp/peer­s/mujprovider. Jeho detainím popisem se již na Rootu zabýval tento článek, takže jen popíšu své nastavení:

# připojovací skript (zde vyplňte seznam čísel providera)
connect "/etc/ppp/chat/pap_chap 0971xxxxxxx 0971xxxxxxx"
# odpojovací skript (pro standardně nastavený modem není nutný)
#disconnect "chat -v -f /etc/ppp/chat/hang"
# použít DNS providera
usepeerdns
# nastavit jako implicitní cestu pro směrování
defaultroute
# IP se přiděluje až po připojení
noipdefault
# odpojení po 300s nečinnosti
idle 300
# linka přenese všechny znaky
asyncmap 0
# pppd nebude ověřovat server
noauth
# přihašovací jméno
name moje_jméno
# ladění příkazů
#debug
# ladění paketů přes jádro (zdržuje!)
#kdebug 4

Máme-li nastaveno usepeerdns (a provider tuto funkci podporuje), vznikne po připojení soubor /etc/ppp/resol­v.conf

s adresami DNS serverů providera.

Připojovací skript /etc/ppp/chat/p­ap_chap může vypadat takto:

! /bin/sh
# hlasité tónové vytáčení
#DIAL=DT
# tiché tónové vytáčení
DIAL=M0DT
# hlasité pulsní vytáčení
#DIAL=DP
# tiché pulsní vytáčení
#DIAL=M0DP

for i in $@
do
    if /usr/sbin/chat -f /etc/ppp/chat/pap_chap.chat -T $DIAL$i
    then
        exit 0
    fi
done
exit 1

A vlastní skript pro chat – /etc/ppp/chat/p­ap_chap.chat (je stejný pro všechny providery) může být např.:

#! /usr/sbin/chat -f
# skript pro PAP/CHAP ověřování
ABORT "NO CARRIER"
ABORT "NO DIALTONE"
ABORT "ERROR"
ABORT "NO ANSWER"
ABORT "BUSY"
TIMEOUT 5
"" "ATZ"
OK\r\n "AT\T"
TIMEOUT 90
CONNECT "\c"
\r\n "\c"

Oboje lze vyřešit i jednodušeji, ale uvedené skripty jsem vytvořil době, kdy někteří provideři nabízeli více čísel. Navržené řešení může procházet i čísla různých providerů, dokud neuspěje (pokud však používáme SMTP server nebo proxy providera, museli bychom vyřešit jeho dynamickou změnu, například tím, že by skript obsahoval požadované hodnoty pro všechny providery a zapisoval je do souboru).

A slíbený alternativní zavěšovací skript /etc/ppp/chat/hang:

! /usr/sbin/chat -f
# Zavěšovací skript pro modemy, které ignorují DTR.
TIMEOUT 5
"" "\d+++\dATH"
"OK" "ATZ"

Soubory /etc/ppp/pap-secrets a /etc/ppp/chap-secrets mohou být totožné (nebo jeden může být odkazem na druhý):

# klíče pro ověřování PAP/CHAP
# klient    server  klíč       IP adresy
moje_jméno  *       moje_heslo

Pokud máme u různých providerů různá hesla nebo přihlašovací jména (pozor, někteří provideři vyžadují přihlašovací jména „holá“, jiná i s následujícím @provider.cz), musíme je v kolonce server (nebo IP adresa) specifikovat. Soubor může být čitelný jen pro superuživatele, ale přesto se může s jeho pomocí přihlásit i obyčejný uživatel (heslo si ovšem nezjistí).

Všechny skripty, které pppd volá, se vykonávají s právy superuživatele.

To však není všechno, co pppd umí! Ještě jsou zde další dva soubory: /etc/ppp/ip-up (ten se spouští sekundu pro uspěšném ověření) a /etc/ppp/ip-down (ten se spouští při odpojení). Pppd je ke své činnosti nepotřebuje, ale my si je můžeme vyplnit spoustou užitečností.

Užitečnosti pro vytáčenou linku

WWWOFFLE

je zajímavá proxy, přizpůsobená pro uživatele vytáčeného spojení. Její pomocí můžete surfovat offline, pohybovat se po stažených stránkách a objednávat nové. Můžete také povolit úpravy ve stránce a třeba barevně odlišit odkazy na strany, které má WWWOFFLE v paměti. WWWOFFLE lze propojit s místním vyhledávačem. O WWWOFFLE již na Rootu pojednává tento článek. K tomu mohu jen přidat malou kolekci bookmarkletů, která vám ulehčí práci s touto proxy. Na mých stránkách pak najdete záplatu a nedokončený český překlad.

Někteří provideři nabízejí vlastní http proxy. Můžete ji používat jak přímo z webového prohlížeče, tak jako nadřazenou proxy pro WWWOFFLE. Zda dojde k urychlení prohlížení, záleží na tom, jaké weby navštěvujete a jak velkou proxy a silnou linku má provider. Pokud prohlížíte podobné stránky jako ostatní klienti providera, můžete pocítit výrazného zrychlení (zejména mají-li stránky pomalou odezvu). Pokud navštěvujete jiné stránky, zrychlení nenastane.

Program pdnsd je dlouhodobou pamětí DNS záznamů (na rozdíl od programů nscd nebo bind si je ukládá na disk). Ušetří nám čas strávený dotazy na DNS záznamy. (I o tomto programu jsme již na Rootovi psali – pozn. redakce)

V minulých týdnech jsme popisovali, jak nastavit poštu, a to i pro vytáčenou linku. I s ní budeme ve spouštěcím uživatelském skriptu počítat.

Uživatelské skripty

Nyní si můžeme popsat vzorový skript /etc/ppp/ip-up:

#! /bin/sh

# případné zprávy lze přesměrovat do protokolu
#exec >>/var/log/ppp 2>&1

# vygenerovat /etc/resolv.conf pro usepeerdns
# Vyžaduje /etc/resolv.conf.default s implicitními hodnotami!!!
# (Alternativou je prostý symbolický odkaz)
if [ -f /etc/ppp/resolv.conf ] ; then
rm /etc/resolv.conf
cat /etc/resolv.conf.default /etc/ppp/resolv.conf >/etc/resolv.conf
fi

# vymazat případné negativní výsledky dotazů na DNS v nscd
nscd --invalidate=hosts

# přepnout se do režimu online
wwwoffle -online

# standardní metoda pro odeslání pošty
# sendmail < 8.12
#/usr/sbin/sendmail -q &

# sendmail >= 8.12
/usr/sbin/sendmail -L sm-msp-queue -Ac -q &
/usr/sbin/sendmail -L sm-mta -q &

# stáhnout poštu, opakovat každých 15 minut
/usr/bin/fetchmail -d 900 --syslog

# stáhnout objednané webové stránky
wwwoffle -fetch &

# Ukázky dalších možností:

# Je levný tarif? (nepozná státní svátky!)
HOUR=`date +%H`
WEEKDAY=`date +%w`
if [ $WEEKDAY = 6 -o $WEEKDAY = 0 -o $HOUR -lt 6 -o $HOUR -ge 18 ]
then
# Levný tarif Telecomu

# synchronizovat mé stránky na Penguinu
#/usr/bin/rsync -e ssh -l -rltz --delete\
# --force --safe-links --exclude="*~"\
# --exclude="upload" ~sb/penguin/public_ftp/\
# utx@penguin.cz:/home/ftp/pub/users/utx/
#/usr/bin/rsync -e ssh -l -rltz --delete\
# --force --safe-links --exclude="*~" --exclude="upload"\
# ~sb/penguin/public_html/ utx@penguin.cz:public_html/

# stáhnout si aktuální stav překladatelských stránek
# (mnoho rsync serverů je přístupných pro každého)
#/usr/bin/rsync -azv --delete penguin.cz::preklady-cs/ /dist/recent/preklady-cs/

# tento řádek smažte
# (je tu jen kvůli tomu, že je vše zakomentované)
true

#else
# Drahý tarif Telecomu
fi

Vidíme, že pomocí tohoto skriptu lze zautomatizovat mnoho užitečných činností.

ict ve školství 24

Podobně lze použít i skript /etc/ppp/ip-down:

#! /bin/sh

# případné zprávy lze přesměrovat do protokolu
#exec >>/var/log/ppp 2>&1

# vrátit /etc/resolv.conf
if [ -f /etc/ppp/resolv.conf ] ; then
rm /etc/resolv.conf
cat /etc/resolv.conf.default >/etc/resolv.conf
fi

# odstranit pomocné resolv.conf
rm -f /etc/ppp/resolv.conf

# přepnout se do režimu offline
wwwoffle -offline

# zastavit fetchmail
fetchmail -q

# takto lze po odpojení indexovat stažené www stránky
# ve vyhledávači htdig (který neumí česky)
# spustit upravenou konfiguraci:
# (viz záplata na CP1250 z http://www.penguin.cz/~utx)
# recode-ms-chars = yes a enable-modify-html = no
#/usr/sbin/wwwoffled -c /var/cache/wwwoffle/wwwoffle-search.conf
#sleep 2
#/var/cache/wwwoffle/html/search/htdig/scripts/wwwoffle-htdig-lasttime
#/usr/sbin/wwwoffle -c /var/cache/wwwoffle/wwwoffle-search.conf -kill

To je pro dnešek vše. Nezmínili jsme se o možnosti vytáčení na žádost (které vyžaduje jinou konfiguraci pppd, případně i Sendmailu), o komprimovaném přenosu po PPP lince (který vyžaduje podporu od providera) a o mnoha dalších věcech. Většina z toho je popsána v manuálech příslušných programů.

Autor článku