Point-to-point (PPP) je protokol pouzivany pro propojeni dvou siti po telefonni, pripadne ISDN lince. Je popsan dokumentem RFC-1661. PPP protokol se sklada ze dvou vrstev:
Link Control Protocol (LCP) uzivany pro navazani spojeni po telefonni lince, konfiguraci a testovani, pripadne i autentizaci. V okamziku, kdy je timto protokolem zavazano spojeni, pouzije se jeden ci vice protokolu typu
Network Control Protocol (NCP) pro prenost dat. Protokolu NCP existuje vice a lze je vyuzivat i soucasne v jednom navazanem spojeni:
IPCP - protokol NCP zajistujici prenos IP verze 4
IPXCP - protokol NCP prenasejici IPX
IPV6 - pro IP verze 6
SNACP, DNCP, OSINLCP a dalsi
moznost on-line konfigurace pripojeni pri navazovani spojeni. Klient pozada server o prideleni IP adresy, pripadne i o adresy nameserveru.
moznost autentizace heslem (Password Authentication Protocol - PAP), pripadne Challenge-Handshake autentizaci (Challenge-Handshake Autentication Protocol - CHAP). Ten pracuje na principu spravne vypoctene odpovedi na polozenou otazku. Server posle klientovi uvodni zpravu, na kterou klient musi podle urciteho klice odpovedet. Server si taktez urci odpoved na svuj dotaz a podle vysledku porovnani odpovedi navaze nebo odmitne spojeni.
nad jednim navazanym spojenim muze pracovat vice protokolu.
monitoring linky obsahuje sluzbu echo umoznujici pravidelne kontrolovat stav spojeni
Pri navazovani spojeni se prochazi nekolika stavy
Linka odpojena
Spojeni jeste nebylo navazano, bylo preruseno nebo jiz bylo ukonceno. V pripade preruseni spojeni (ztrata nosne) se automaticky prechazi do tohoto stavu.
Navazovani spojeni
Pres protokol LCP se navazuje spojeni. Behem navazovani spojeni se neprenaseji zadne datove pakety (NCP). V pripade vyskytu datoveho paketu v teto fazi spojeni se tento paket zahazuje.
Autentizace
V teto fazi dochazi k autentizaci spojeni. Tento krok lze vynechat, pripadne lze pouzit autentizaci jednostranou i oboustranou, kdy si svou totoznost prokazuji obe strany spojeni. Stale se jeste pracuje nad protokolem LCP a prenaseji se pouze data pouzivana k vlastnimu prokazovani totoznosti. Tj. protokol LCP nepopisuje zadny autentizacni algoritmus, ale pouze prenasi data, ktera pak nasledne vyuziji autentizacni protokoly (napr. PAP nebo CHAP)
Spojeni navazano
V okamziku navazani spojeni a pripadne i uspesne autentizace se prestava pouzivat LCP a je nahrazen jednotlivymi protokoly NCP. Pro kazdy protokol, ktery se ma vyuzivat, se musi linka otevrit. V pripade prenosu paketu protokolu, pro ktery linka nebyla otevrena, se tyto pakety zahodi. V pripade otevreni spojeni pro jeden protokol nemuze byt otevreno spojeni i pro jiny protokol. Prenasene pakety protokolu, pro ktery linka neni otevrena, se zahodi.
Ukonceni spojeni
Opet se pouzije protokol LCP a vsechny jine pakety jsou zahazovany. Fyzicke vrstve je signalizovano ukonceni spojeni a ta pote zavesuje linku. Timto se dostavame opet do stavu "Linka odpojena".
Spojeni pres PPP lze sifrovat pomoci algoritmu DES. Sifruje se datova cast ramce a pouziva se pro nej protokol ECP (Encryption Control Protocol). Ten slouzi k tomu, aby se obe strany spojeni ve fazi "spojeni navazano" dohodli na sifrovanem spojeni. (RFC-1968 a RFC-1969)
Je mozne komprimovat zahlavi PPP-ramce, v protokolu TCP/IP zahlavi TCP/IP-paketu a samozrejme prenasena data. Pro kompresi dat se pouziva Compression Control Protocol (CCP), ktery umoznuje obema strana spojeni douhodnout se na konkretnim algoritmu komprese dat. (RFC-1962)
V jednotlivych Linuxovych distribucich existuji dva hlavni zpusoby inicializace PPP
BSD system initialization (napr. Slackware)
/etc/rc /etc/rc.local /etc/rc.serial
System V system initialization (Red Hat - ale jeste trochu pozmeneny, Debian)
/etc/rc.d/.......
kppp (pro nastaveni a vytaceni PPP v prostredi KDE)
WvDial (jednoduchy konfiguracni program)
RP3 (zkratka z Redhat PPP - zepta se na radu otazek a pak podle odpovedi zkonfiguruje PPP)
Linuxconf
zakompilovat podporu PPP do jadra - "PPP (point-to-point) support"
povolit seriovy port (v pripade externiho modemu)
ziskat IP adresu (a dalsi cisla), spravne je nastavit (pokud nepouzivam DHCP)
Navazovani spojeni vyzaduje prava roota
oznaceni seriovych portu
com1 = /dev/cua0 (/dev/ttyS0) com2 = /dev/cua1 (/dev/ttyS1) . . .
oznaceni cuaX se pouziva pro dial-out a ttySX pro dial-in (od verze 2.0.x pro oboje ttySX)
nastaveni irq seriovym portum
/bin/setserial -b /dev/ttyS2 IRQ 11 /bin/setserial -b /dev/ttyS3 IRQ 15 (v pripade nepouziti ide)
pro zjisteni typu UART (Universal Asynchronous Receiver Transmitter) pro porty kvuli vyssi rychlosti nez 14,400 baudu
setserial -a /dev/ttySx
AT prikazy k ovladani modemu AT A - otevreni (zvednuti) linky a provedeni vymeny potvrzeni (handshake) s volanym (volajicim) modemem. Obvykle se pouziva k odpovedi na prichazejici spojeni AT Dcislo - otevreni (zvednuti) linky a vytoceni cisla uvedeneho v retezci volby D AT H - zaveseni linky AT H1 - zvednuti linky (pripraven k volbe cisla) AT P - nastaveni pulsni volby jako implicitni AT T - nastaveni tonove volby jako implicitni AT Z - inicializace modemu - reset modemu na nacteni konfigurace AT &Dn - urcuje cinnost modemu na zaklade signalu DTR (Data Terminal Ready) AT &F - vyvolani defaultni konfigurace vyrobce AT &Tn
- testovani a diagnostika:
n = 0 - konec testovani n = 1 - analogovy lokalni test smycky mezi lokalni koncovou datovou jednotkou (DTE) a lokalnim modemem
AT &Xn - volba zdroje hodin
n = 0 - modem pouzije svuj vlastni signal hodin pro prenos
AT &Zn - ulozeni telefonnich cisel do pameti (napr. AT &Z1=xxxxxx ulozi do pameti 1 cislo xxxxxx)
AT \Gn - rizeni prenosu mezi modemy (XON/XOFF vysilac)
n = 0 - deaktivace rizeni prenosu n = 1 - aktivace
nastaveni pro TCP/IP
/etc/host.conf /etc/resolv.conf
k vytvoreni PPP spojeni je potreba opravneni roota, proto pokud ma mit moznost otevrit spojeni i bezny uzivatel, je potreba nastavit suid-bit pro pppd (/usr/bin/pppd)
soubory s konfiguraci PPP
/etc/ppp/scripts/ppp-on # the dialer/connection script /etc/ppp/scripts/ppp-on-dialer # part 1 of the dialer script /etc/ppp/scripts/ppp-off # the actual chat script itself /etc/ppp/options # the options pppd uses for all connections /etc/ppp/options.ttyXX # the options specific to a connection on this port
v distribuci Red Hat jsou skripty umisteny v adresari /usr/doc/ppp-2.2.0f-2/scripts
v pripade pripojeni vice modemu lze spolecne body konfigurace zapsat do souboru /etc/ppp/options a pote do jednotlivych souboru /etc/ppp/options.ttyXX prislusnym portum nastavit dalsi specificke vlastnosti.
autentizace
soubor /etc/ppp/options obsahuje i nastaveni autentizace (PAP i CHAP, pripadne MSCHAP - Microsoft CHAP). V pripade nutnosti pouziti MSCHAP - pozna se v debugovem vypisu radkou:
rcvd [LCP ConfReq id=0x2 <asyncmap 0x0> <auth chap 80> <magic 0x46a3>]
(vyznamny retezec je "auth chap 80"), je nutne pppd znovu prelozit s podporou pro MSCHAP.
pokud se pro autentizaci pouziva PAP s loginem a heslem pridelenym providerem, je potreba pridat radku:
name your_user name_at_your_ISP
do souboru /etc/ppp/options Tato volba je platna i pro CHAP
dalsi nastaveni autentizace
/etc/ppp/pap-secrets #user server passw akceptovatelna lokalni adresa login servername password somethig.somewhere.com
pro vice serveru se stejnym loginem lze pouzit i
#user server passw akceptovatelna lokalni adresa login * password somethig.somewhere.com
obdobne i pro CHAP
Po konfigurace vsech techto souboru lze jiz navazat spojeni. Napr. prikazem:
pppd -d -detach /dev/ttySx 38400 -d zapina debugovaci mod -detach zabrani spusteni daemona na pozadi /dev/ttySx je port, pres ktery se ma spojeni navazat 38400 je pripojovaci rychlost
Takto vanazane spojeni by se melo objevit i ve vypisu prikazu ifconfig:
ppp0 Link encap:Point-Point Protocol inet addr:0.0.0.0 P-t-P:0.0.0.0 Mask:0.0.0.0 POINTOPOINT MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 TX packets:0 errors:0 dropped:0 overruns:0
Spojeni se ukonci prikazem ppp-off a pokud je to nutne, smazou se zamky portu:
rm -f /var/lock/LCK..ttySx
Toto pripojovani lze zautomatizovat skripty ppp-off, ppp-on a ppp-on-dialer:
ppp-on
#!/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 /dev/ttySx 38400 \ $LOCAL_IP:$REMOTE_IP \ connect $DIALER_SCRIPT
ppp-on-dialer
#!/bin/sh /usr/sbin/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
ppp-off
#!/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 # # The ppp process is not running for ppp0 echo "ERROR: PPP link is not active on $DEVICE" exit 1
pro zprovozneni PPP na serverove strane je do jadra nutne zakompilovat sluzbu "IP forwarding"
server pouziva pouze jednotlive konfiguracni soubory /etc/ppp/options.ttyXX pro kazdy port
pro komunikaci se pouziva program mgetty (getty), ktery je schopen detekovat i spojeni pouzivajici PAP/CHAP a automaticky zavolat pppd
taktez je nutne mit k dispozici DNS server pro valajici (pro TCP/IP)
"bezne" nastaveni /etc/ppp/options pro PPP server
asyncmap 0 netmask 255.255.254.0 proxyarp lock crtscts modem
pri dynamickem pridelovani IP staci pro kazdy konkretni port (/etc/ppp/options.ttyXX) nastavit konkretni IP adresu:
server_IP:client_IP