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}