Referát: PPP a modemy

Miloš Malík, xmalik1@fi.muni.cz


Obsah


Úvod

Nahrazuje starší SLIP (Serial Line Internet Protocol,
RFC 1055). PPP (Point-to-Point Protocol, RFC 1661) byl původně vyvinut pro zapouzdření přenosu IP nad 2-bodovými spoji. Toto zapouzdření vychází z HDLC (High-level Data Link Control) protokolu. Ale slouží i jako standard pro přidělováni a následnou manipulaci s IP adresami, multiplexovaní různých síťových protokolů, konfiguraci linek, testování linek a vyjednávání podmínek při komunikaci. Schopnosti PPP jsou opřeny o LCP (Link Control Protocol - vytvoření, konfigurace, testování linky) a celou rodinu NCP (Network Control Protocol - konfigurace a zavedení protokolů síťové vrstvy).

LCP (RFC 1570, RFC 1661) používá 3 druhy paketů

Rodina NCP

Způsob komunikace

Důkazem toho, že PPP se nepoužívá jen na sériových linkách jsou:

Jaderná část PPP

Pokud chcete provozovat dialing server, budete se muset podívat, jestli existuje soubor /proc/sys/net/ipv4/ip_forward a pokud ano, jestli je v něm 1. Když je tam 0, tak do něj zapište 1. Pokud neexistuje výše zmíněný soubor, tak vaše jádro neumí IP Forwarding. Např. na RedHatu se IP Forwarding zapíná v souboru /etc/sysconfig/network nebo /etc/sysctl.conf

Buď máte podporu PPP zakompilovanou do jádra, objeví se to ve výpisu příkazu dmesg, nebo máte zkompilované příslušné moduly někde v adresáři /lib/modules/<verze_jádra>, které se jmenují:
bsd_comp.o		# stejné pro řadu 2.2 i 2.4
ppp_async.o		# ppp.o
ppp_deflate.o		# stejné pro řadu 2.2 i 2.4
ppp_generic.o		# pro jádro řady 2.2 není třeba
ppp_synctty.o		# pro jádro řady 2.2 není třeba
slhc.o			# stejné pro řadu 2.2 i 2.4
Pokud používáte jádro řady 2.4, měli byste vytvořit zařízení /dev/ppp.
# mknod /dev/ppp c 108 0
# chmod 600 /dev/ppp
Do souboru /etc/modules.conf (/etc/conf.modules nepoužívat) přidejte následující řádky:
alias /dev/ppp		ppp_generic	# pro jádro řady 2.2 není třeba
alias char-major-108	ppp_generic	# pro jádro řady 2.2 není třeba
alias tty-ldisc-3	ppp_async	# tty-ldisc-3	ppp
alias tty-ldisc-14	ppp_synctty	# pro jadro řady 2.2 není třeba
alias ppp-compress-21	bsd_comp	# stejné pro řadu 2.2 i 2.4
alias ppp-compress-24	ppp_deflate	# stejné pro řadu 2.2 i 2.4
alias ppp-compress-26	ppp_deflate	# stejné pro řadu 2.2 i 2.4

Kompilace, instalace a nastavení pppd

Pokud jste si stáhli balík ppp v podobě .rpm nebo .deb, tak kompilaci přeskočte.
$ bzip2 -dc ppp-2.4.1.tar.bz2 | tar -xv
$ cd ppp-2.4.1
$ ./configure
$ make
$ su
# make install
Výsledkem by měly být programy pppd, chat, pppstats, pppdump, jejich manuálové stránky a několik souborů v /etc/ppp. Protože PPP vyžaduje nastavení síťového zařízení, změnu směrovací tabulky v jádře a další záležitosti, musí takto činit s oprávněnim roota.
-rwsr-x---    1 root     dialout    173800 Oct 27 08:34 /usr/sbin/pppd
Program pppd může pracovat jak v režimu server tak i v režimu klient.

Sériové porty

Aktuální nastavení lze zjistit v souboru /proc/interrupts nebo /proc/tty/driver/serial. Jestliže váš modem sdílí přerušení s jiným zařízením, tak by mohly nastat problémy. Pro manipulaci se sériovými porty slouží program setserial.
/dev/ttyS0 (jinak COM1) přerušení IRQ4 (obvykle)
/dev/ttyS1 (jinak COM2) přerušení IRQ3 (obvykle)
/dev/ttyS2 (jinak COM3) přerušení IRQ4 (obvykle)
/dev/ttyS3 (jinak COM4) přerušení IRQ3 (obvykle)

Důležité skripty pro PPP

Všechny kromě posledního lze nalézt v balíku ppp-2.4.1.
/etc/ppp/scripts/ppp-on		# zahajuje spojení k PPP serveru
/etc/ppp/scripts/ppp-on-dialer	# druhá část skriptu ppp-on
/etc/ppp/scripts/callback	# rozběhne odpovídací režim
/etc/ppp/scripts/redialer	# jako ppp-on-dialer ale zkouší více čísel
/etc/ppp/scripts/ppp-off	# ukončí existující spojení
/etc/ppp/options		# parametry společné všem spojením
/etc/ppp/options.ttyXX		# parametry pro každý port zvlášť

Příklad ppp-on skriptu

#!/bin/sh
TELEPHONE=555-1212	# The telephone number for the connection
ACCOUNT=george		# The account name for logon (as in 'George Burns')
PASSWORD=gracie		# The password for this account (and 'Gracie Allen')
LOCAL_IP=0.0.0.0	# Local IP address if known. Dynamic = 0.0.0.0
REMOTE_IP=0.0.0.0	# Remote IP address if desired. Normally 0.0.0.0
NETMASK=255.255.255.0	# The proper netmask if needed
export TELEPHONE ACCOUNT PASSWORD
DIALER_SCRIPT=/etc/ppp/ppp-on-dialer
exec /usr/sbin/pppd debug lock modem crtscts /dev/ttyS0 38400 \
    asyncmap 20A0000 escape FF kdebug 0 $LOCAL_IP:$REMOTE_IP \
    noipdefault netmask $NETMASK defaultroute connect $DIALER_SCRIPT

Příklad ppp-on-dialer skriptu

#!/bin/sh
exec chat -v                                            \
        TIMEOUT         3                               \
        ABORT           '\nBUSY\r'                      \
        ABORT           '\nNO ANSWER\r'                 \
        ABORT           '\nRINGING\r\n\r\nRINGING\r'    \
        ''              \rAT                            \
        'OK-+++\c-OK'   ATH0                            \
        TIMEOUT         30                              \
        OK              ATDT$TELEPHONE                  \
        CONNECT         ''                              \
        ogin:--ogin:    $ACCOUNT                        \
        assword:        $PASSWORD

Příklad ppp-off skriptu

#!/bin/sh
if [ "$1" = "" ]; then
        DEVICE=ppp0
else
        DEVICE=$1
fi
if [ -r /var/run/$DEVICE.pid ]; then
        kill -INT `cat /var/run/$DEVICE.pid`
        if [ ! "$?" = "0" ]; then
                rm -f /var/run/$DEVICE.pid
                echo "ERROR: Removed stale pid file"
                exit 1
        fi
        echo "PPP link to $DEVICE terminated."
        exit 0
fi
echo "ERROR: PPP link is not active on $DEVICE"
exit 1

Autentizační soubory

Obsahují řádky tvaru klient server heslo akceptovatelná_IP_adresa, kde jednotlivé položky jsou od sebe odděleny bílým znakem. Poslední položku na řádku lze vynechat, což znamená, že nám bude dynamicky přidělena IP adresa.
/etc/ppp/chap-secrets	# pro Challenge/Handshake Authentication Protocol
/etc/ppp/pap-secrets	# pro Password Authentication Protocol

Závěr

Zda linka funguje zjistíme pomocí příkazu ifconfig. Výstup by měl obsahovat přibližně něco takového:
ppp0    Link encap:Point-to-Point Protocol
	inet addr:212.11.117.56  P-t-P:212.11.105.2  Mask:255.255.255.255
        UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
	RX packets:414 errors:0 dropped:0 overruns:0 frame:0
	TX packets:461 errors:0 dropped:0 overruns:0 carrier:0
	collisions:0 txqueuelen:3
	RX bytes:208481 (203.5 Kb)  TX bytes:54777 (53.4 Kb)
Pro další testování linky zkuste příkazy ping, netstat nebo route.

Program mgetty

Dovoluje vám použít jeden modem pro příjem hovorů i vytáčení, rozpozná hlasovou komunikaci od datové. Umí přijímat faxy (přesněji faxy class 2 a 2.0) a plno dalšich činností.

Po rozbalení zdrojáků ještě před kompilací je nutné vyeditovat soubory Makefile a policy.h (cp policy.h-dist policy.h) a změnit je k obrazu svému. Pak stačí jen make && make install a můžeme konfigurovat.

Je doporučeno spouštět mgetty ze souboru /etc/inittab:
id:runlevels:respawn:/sbin/mgetty [parametry] <zarizeni>
Některé důležité parametry jsou:
-x <level>		# debugging level
-s <speed>		# rychlost portu
-p <login_prompt>	# prompt při logování
-n <rings>		# kolik zvonění než se začne odpovídat
-i /etc/issue		# před loginem zobrazí /etc/issue
Konfigurační soubory:
/etc/mgetty+sendfax/mgetty.config	# hlavní konfigurační soubor
/etc/mgetty+sendfax/sendfax.config	# konfigurace sendfaxu
/etc/mgetty+sendfax/login.config	# kvůli komu spouštět který program
/etc/mgetty+sendfax/callback.config	# konfigurace callbacku
/etc/mgetty+sendfax/dialin.config	# kontrola vstupu podle volajícího 
Více podrobností v manuálových stránkách a v souboru policy.h, který jste editovali před kompilací.

AT příkazy

Sada AT příkazů byla vyvinuta společností Hayes Microcomputer Products za účelem ovladání modemů. Zkratka AT pochazí ze slova "attention".

Některé důležité AT příkazy:
ATA           - otevření linky a pokus o odpověd na příchozí spojení
ATD<cis>      - otevření linky a vytočení čísla <cis>
ATDS=<c1>     - volba čísla uloženého v paměti modemu, viz příkaz AT&Z
ATH0          - zavěšení linky
ATL<cis>      - nastavení hlasitosti modemu, kde <cis> je z {0,1,2,3}
ATP           - při vytáčení použít pulsní volbu
ATT           - při vytáčení použít tónovou volbu
ATX<cis>      - standartně je <cis>=4 a kontroluje se oznamovací i obsazovací signál,
                v případě chyby zkuste ATX3, <cis> je z {0,1,2,3,4}
ATZ<cis>      - reset modemu a načtení uloženého profilu, nepovinné <cis> je z {0,1}
AT&F<cis>     - nahrát konfiguraci od výrobce, nepovinné <cis> je z {0,1}
AT&V          - zobrazení konfigurace
AT&W<cis>     - zapsání aktuální konfigurace do profilu <cis>, <cis> je z {0,1}
AT&Z<c1>=<c2> - uloží do paměti <c1> číslo <c2>, <c1> je z {0,1,2,3}

Front-endy a konfigurační utility pro PPP


Zdroje