Konfiguracja PPP pod Linuksem

background image

Konfiguracja PPP pod Linuksem

Po prostu połącz

Autor:

Maciej Koziński

Point-to-Point Protocol umożliwia uruchomienie protokołów sieciowych (np. IP, IPX czy

AppleTalk) na łączu szeregowym. Wielu odbiorców indywidualnych i instytucjonalnych

korzysta z PPP na łączach dzierżawionych lub komutowanych.

PPP łączy dwa interfejsy sieciowe, nie służy więc do pracy w sieciach o charakterze rozgłoszeniowym. Protokół

ten jest niezależny od środowiska, jego implementacje dostępne są we wszystkich używanych dziś systemach

operacyjnych, a także w routerach, serwerach dostępowych RAS i innych urządzeniach sieciowych.

PPP jest protokołem punkt-punkt (peer-to-peer). Używane w jego kontekście terminy "klient" i "serwer" oznaczają

odpowiednio stronę inicjującą połączenie oraz stronę świadczącą usługę dostępu i sprawdzającą prawa do niego.

Sprzęt

PPP

Protokół zaprojektowany do uporządkowanej, równoczesnej, dwukierunkowej transmisji pakietów między dwoma punktami.

Struktura ramki PPP wygląda następująco:
Adres (1B) - adres sprzętowy; ponieważ PPP nie przyznaje końcówkom indywidualnych adresów, pole to ma zawsze wartość

0xff,
Sterowanie (1B) - określa sposób sterowania transmisją (domyślnie wartość 0x03, ramki z inną zawartością tego pola są

odrzucane),

Protokół (2B) - typ protokołu, jaki zawiera ramka (IP, IPX, AppleTalk, DECNet, Banyan Vines itp.),
Dane (zmienna długość) - datagram protokołu wskazanego w poprzednim polu,

FCS (Frame Check Sequence)
(2 lub 4B) - suma kontrolna.

Port szeregowy - reprezentowany przez urządzenia COMx w systemach operacyjnych Microsoftu i /dev/ttySx w

Linuksie - wymaga przygotowania do współpracy z PPP, tzn. przygotowania parametrów terminala, portu
szeregowego i modemu. Parametry terminala związanego z portem szeregowym odczytujemy i ustalamy w

Linuksie poleceniem stty, np.:

stty -a < /dev/ttyS1

Najbardziej interesujące są znaczniki: cs8 - oznacza liczbę bitów danych na znak (8), crtscts - sprzętową kontrolę
przepływu danych, clocal - linię lokalną, bez sygnału kontrolnego dla modemu (ignorowanie stanu linii CD -

Carrier Detect - a więc wykrywania nośnej), -parenb - brak bitu parzystości, -cstop - jeden bit stopu (bez "-" to
dwa bity). Niektóre z wymienionych parametrów można ustawić bezpośrednio przez daemon protokołu PPP -

pppd.

Ustawienie parametrów przeprowadzamy tak:

stty cs8 crtscts -parenb -cstop < /dev/ttyS1

Ustawimy w ten sposób parametry linii: osiem bitów danych, brak bitów parzystości, jeden bit stopu (popularne

niegdyś 8N1) i sprzętową kontrolę przepływu danych. Sprzętowa kontrola przepływu danych jest niezbędna przy
stosowaniu PPP, ponieważ protokół ten używa danych ośmiobitowych, tak więc pojawienie się znaków Ctrl-S i

Ctrl-Q w ciągu danych dostarczonych do modemu mogłoby spowodować zatrzymanie transmisji. Możliwe jest
jednak obejście tego ograniczenia w samym PPP poprzez ustawienie opcji xonxoff i wskazanie znaków

odpowiedzialnych za wstrzymanie i wznowienie transmisji parametrem asyncmap.

Parametry portu szeregowego możemy poznać i ustawić w Linuksie poleceniem setserial, np.:

# setserial -a /dev/ttyS1

/dev/ttyS1, Line 1, UART: 16550A, Port: 0x02f8, IRQ: 3

Baud_base: 115200, close_delay: 50, divisor: 0

closing_wait: 3000, closing_wait2: infinte

Flags: spd_vhi hup_notify skip_test

Protokoły pomocnicze

background image

Protokół PPP zawiera zestaw protokołów pomocniczych:

Link Control Protocol - negocjuje podstawowe parametry pracy łącza: rozmiar pakietów, znaki kontrolne, metody autoryzacji,
PPP Multilink (Point-to-Point Multilink) - rozszerzenie PPP umożliwiające "złożenie" kilku łączy PPP (np. połączeń fizycznych) w

jedno łącze logiczne,
PAP (Password Authentication Protocol) - protokół autoryzacji,

CHAP (Challenge Handshake Authentication Protocol) - inny protokół autoryzacji,
BAP (Bandwidth Allocation Protocol) - rozszerzenie sterujące zwielokrotnionymi łączami PPP Multilink,

IPHC (IP Header Compression) - kompresja nagłówka IP,
BSD - kompresja datagramów metodą stosowaną w systemach Unix,

MPPC (Microsoft Point-to-Point Compression) - sposób kompresji opracowany przez Microsoft dla dużych ramek (MTU 1500);
jego użycie jest ustalane protokołem CCP (Compression Control Protocol),

DESE - szyfrowanie algorytmem DES.

Polecenie setserial umożliwia ustawienie parametrów portu szeregowego, np.: używane przerwania i porty
wejścia/wyjścia, szybkość transmisji przez port czy zawiadomienie procesu getty, obsługującego dany terminal, o

zakończeniu połączenia. Bezpieczną konfigurację dla PPP ustanawiamy np. poleceniem:

setserial /dev/ttyS1 spd_vhi hup_notify

Wymusza ono szybkość pracy portu 115 Kb/s oraz zawiadomienie getty o zakończeniu pracy PPP. Prędkość ta jest

osiągalna w komunikacji z urządzeniami zewnętrznymi przez porty szeregowe obsługiwane przez UART (Universal
Asynchronous Receiver Transmitter) 16550A, które są już standardowym wyposażeniem płyt głównych i kart

modemowych.

W większości wypadków niezbędnym elementem fizycznej infrastruktury będzie modem. Dla łączy komutowanych

konieczne jest zainicjowanie modemu komendami Hayesa:

&K3 - ustawienie sprzętowej kontroli przepływu,

E1 - echo znaków przesyłane z powrotem do terminala; niezbędne dla programów automatyzujących

"chat" z serwerem,

Q0 - zwracanie numerycznych wyników wykonywanych przez modem komend,

S0=0 - zablokowanie odbierania przychodzących połączeń przez modem,

&C1 - wykrywanie nośnej po nawiązaniu połączenia.

System operacyjny

Aby uruchomić PPP pod kontrolą Linuksa, musimy zainstalować w jądrze sterowniki slhc.o i ppp.o. Niezbędne
mogą okazać się również bsd_comp.o oraz ppp_deflate.o - w zależności od rodzaju kompresji transmitowanych

danych. Jeśli budujemy jądro i sterowniki we własnym zakresie, musimy zaznaczyć w konfiguracji jądra - jako
zintegrowane z nim lub zbudowane jako moduły - opcje "Character devices" "Standard/generic (dumb) serial

port", w "Network device support" "PPP (point-to-point) support" wraz z towarzyszącymi "SLIP (serial line)

support" i "CSLIP compressed headers", które zawierają niezbędne procedury kompresji.

Z punktu widzenia serwera dostępowego PPP lub klienta pełniącego funkcję routera wyjściowego sieci lokalnej

istotne jest wbudowanie w jądro opcji "General setup"/"Sysctl support", która pozwala na konfigurowanie
niektórych parametrów systemu operacyjnego w locie, poprzez wpisy do pseudosystemu plików /proc. Dla routera

konieczne jest wykonanie przy starcie systemu polecenia:

echo "1" > /proc/sys/net/ipv4/ ip_forward

aby możliwe było przesyłanie pakietów z i do pozostałych stacji sieci lokalnej.

Nim ruszy transmisja

Program chat

Jest to program, który automatyzuje "rozmowę" ze zdalnym serwerem dostępowym po stronie Linuksa przed nawiązaniem
połączenia PPP. Reaguje na ciągi znaków otrzymywane za pośrednictwem terminala - portu szeregowego i (najczęściej)

modemu. Może więc zainicjować modem, zareagować na zdarzenia wynikające z prób nawiązania połączenia telefonicznego
oraz przeprowadzić autoryzację przez podanie identyfikatora i hasła. Chat działa na podstawie dostarczonego przez użytkownika

skryptu. Dialog jest prowadzony w formie:

"oczekiwany ciąg znaków" "odpowiedź"
Zamiast "dialogu" mogą się pojawić komendy programu chat, np.:

ABORT - przerwanie wykonywania skryptu w przypadku pojawienia się ciągu znaków podanego jako argument,
TIMEOUT - czas oczekiwania na odpowiedź w sekundach,

background image

HANGUP - określenie, czy odłożenie słuchawki traktować jako błąd,

SAY - wypisanie komunikatu na terminalu użytkownika,
ECHO - kontrola nad wypisywaniem poleceń skryptu na terminalu użytkownika.

Można skorzystać ze znaków specjalnych:
"" - pusty ciąg znaków,

\b - backspace,
\c - pominięcie znaku końca linii w wysyłanym ciągu znaków,

\d - jednosekundowe opóźnienie,
\n - znak nowej linii,

\p - pauza 1/10 sekundy,
\q - pominięcie zapisu ciągu znaków via syslog,

\r - znak carriage return,
\s - spacja,

\t - tabulator,

\\ - backslash.

W tak przygotowanym środowisku możemy już uruchomić program /usr/sbin/pppd. Transmisja pakietów
protokołu sieciowego wymaga jednak jeszcze kilku czynności - w przypadku połączenia komutowanego będzie to
zestawienie tego połączenia. Gdy połączenie na poziomie fizycznym zostanie nawiązane, możliwe jest ustalenie

parametrów pracy PPP. Implementacje PPP po obu stronach łącza uzgadniają wówczas przy użyciu Link Control
Protocol (LCP) parametry połączenia PPP: maksymalne rozmiary nadawanych i odbieranych pakietów, znaki

specjalne (asyncmap), rodzaj autoryzacji (PAP lub CHAP), typ stosowanej kompresji. Następnie do działania
zaprzęgany jest Internet Protocol Control Protocol (IPCP), odpowiedzialny za uzgodnienie adresów IP na obu

końcach łącza (chyba że adresy zostały przydzielone statycznie). Równolegle można dokonać autoryzacji PAP lub
CHAP, jeśli jedna ze stron (lub obie) jej zażąda. Wartości parametrów konfiguracyjnych narzuca z reguły strona

zwana umownie serwerem.

Niezbędne parametry połączenia PPP zawiera plik /etc/ppp/options. Minimalna konfiguracja pppd zawarta w pliku

do pracy bez autoryzacji PAP lub CHAP obejmuje parametry:

lokalny_adres_IP:zdalny_adres_IP - para adresów IP łącza PPP po stronie lokalnej i zdalnej; pola mogą

być puste, wówczas adresy ustalane są w drodze negocjacji,

/dev/ttySx 115200 - port szeregowy i prędkość transmisji,

nodetach - pozostawanie na pierwszym planie, w stałej łączności z terminalem, z którego pppd został

uruchomiony,

modem - użycie kontrolnych linii modemu,

lock - uzyskanie wyłącznego dostępu do wybranego portu szeregowego,

crtscts - sprzętowa kontrola przepływu,

defaultroute - ustawienie domyślnej trasy routingu przez zestawione łącze PPP,

asyncmap 0 - wyłączenie wszystkich "escape sequences" w transmisji.

Jeśli korzystamy z łącza komutowanego, przydatne mogą się okazać opcje:

noipdefault - adres naszej końcówki łącza PPP musi być przydzielony przez serwer,

ipcp-accept-local - podczas negocjacji IPCP nasz klient PPP zgadza się na adres IP naszej końcówki

sugerowany przez serwer niezależnie od zdefiniowanych w opcjach adresów,

ipcp-accept-remote - w toku negocjacji IPCP nasz klient PPP zgadza się na adres IP zdalnej strony

sugerowany przez serwer niezależnie od zdefiniowanych w opcjach adresów,

noauth - pozwalamy stronie zdalnej na zestawienie połączenia bez autoryzacji po stronie lokalnej.

Program chat - skrypty

Oto skrypt, który umożliwia połączenie z serwerem dostępowym TP SA:

TIMEOUT 5

"" ATZ

background image

OK "AT Q0 W2 V1 E1 S0=0 X4 &C1 &S0 &D2 &Q5 %C1 S11=55

S38=0 \\Q3"

OK "ATDT 0202122"

ABORT "BUSY"

ABORT "NO CARRIER"

ABORT "NO DIALTONE"

ABORT "WAITING"

TIMEOUT 75

CONNECT ""

"name:" ppp

"word:" ppp

Windows 95 nie ma możliwości połączenia via PPP bezpośrednim połączeniem kablowym, tylko poprzez

zestawienie połączenia komutowanego przez modem. Używając programu chat, możemy symulować zachowanie

modemu na komputerze z Linuksem. Poniższy skrypt pomoże "oszukać" klienta dial-in pod Windows 95:

TIMEOUT 500

"AT" "OK\r\n"

"ATE0V1" "OK\r\n"

"AT" "OK\r\n"

"DT" "CONNECT 115200\r\n"

Do zarządzania połączeniem komutowanym możemy skorzystać z opcji:

connect '/usr/sbin/chat -V -v -f /etc/ppp/chat.txt' - zestawienie połączenia komutowanego na podstawie

polecenia zewnętrznego,

disconnect "/usr/sbin/chat - \d+++\d\c OK ath0 OK" - zakończenie połączenia komutowanego na

podstawie polecenia zewnętrznego,

maxconnect 660 - czas trwania połączenia komutowanego (w sekundach),

idle 30 - czas nieaktywności łącza, po którym połączenie komutowane zostanie zakończone,

active-filter - filtr pakietów ograniczający definicję nieaktywności łącza dla opcji idle, zgodny ze składnią
programu tcpdump; umożliwia wybranie najważniejszych transmisji, krytycznych dla połączenia; może

przyjąć np. postać "tcp port 25", wówczas czas do opcji idle będzie liczony od momentu przejścia
ostatnich pakietów związanych z usługą SMTP,

pass-filter - proste filtrowanie pakietów przy użyciu składni tcpdump; tylko pakiety dopasowane do

wyrażenia podanego jako argument pass-filter są przepuszczane,

ipparam - dodatkowy parametr przekazywany skryptowi /etc/ppp/ip-up (opis poniżej).

Jeśli budujemy serwer dostępowy na podstawie Linuxa, przydatne mogą być opcje:

proxyarp - adresy sprzętowe MAC w sieciach rozgłoszeniowych, np. Ethernet, są wówczas przedstawiane
jako powiązane z adresem IP zdalnego klienta PPP - umożliwia to nawiązanie łączności pozostałych

komputerów z sieci lokalnej (w tym routera wyjściowego) z klientem PPP,

persist - dla łączy dzierżawionych - po przerwaniu połączenia pppd nie kończy pracy, lecz próbuje je

odtworzyć.

Opcje związane z autoryzacją PAP to:

require-pap - wymóg autoryzacji zdalnego punktu protokołem PAP,

login - użycie systemowej bazy użytkowników /etc/passwd|/etc/shadow jako podstawy do autoryzacji

background image

PAP,

name - nazwa użytkownika, którą przedstawia zdalnemu serwerowi lokalny system podczas autoryzacji

PAP.

Ważną cechą konfiguracji daemona pppd jest to, że plik /etc/ppp/options zawiera uzupełnienie w postaci plików

/etc/ppp/peers/nazwa, gdzie nazwa jest wybierana na podstawie wywołania programu:

pppd call nazwa

i może zawierać opcje konfiguracyjne specyficzne dla połączenia z konkretnym punktem dostępowym, np.

większość opcji używanych w /etc/ppp/options.

Do podanych wcześniej opcji PAP należy dodać plik zawierający nazwy użytkowników i związane z nimi hasła. Jeśli
pppd nie ma korzystać przy autoryzacji z systemowej bazy użytkowników, będzie pobierał dane z pliku

/etc/ppp/pap-secrets, który służy zarówno autoryzacji naszego lokalnego punktu w zdalnych serwerach, jak i
autoryzacji zdalnych klientów do połączenia z naszym portem szeregowym. Składnia pliku wygląda następująco:

klient serwer has•o adresy IP

gdzie:

klient - nazwa podana jako argument parametru name w pliku /etc/ppp/options,

serwer - nazwa komputera zdalnego (można zastąpić znakiem globalnym "*"),

adresy IP - adresy hostów autoryzowanych protokołem PAP w naszym punkcie lokalnym.

Wpis do pap-secrets wygląda następująco:

"ppp" * "ppp"

Oznacza to, że pppd ma, w przypadku podania jako parametru opcji name nazwy ppp, podawać zdalnemu

punktowi hasło ppp w autoryzacji PAP.

Gdy ruszają pakiety

Po uzgodnieniu przez IPCP adresów IP pppd uruchamia skrypt /etc/ppp/ip-up. Rolą tego skryptu jest zazwyczaj
zdefiniowanie nowych tras w tablicy routingu. Możliwe jest również umieszczenie w treści skryptu innych poleceń,

np. ustawienie filtrów bardziej wyrafinowanych niż pass-filter firewalla, np. ipfwadm (linux 2.0) czy ipchains (linux
2.2). Dla łącza komutowanego skrypt ten może uruchamiać także wysyłanie i sprowadzanie poczty protokołami

SMTP i IMAP czy POP3, wymianę wiadomości Usenetu, wsadowe pobieranie stron WWW itp.

Skrypt ip-up jest wywoływany z parametrami:
$1 - nazwa interfejsu tworzonego przez nowe połączenie PPP,

$2 - terminal, do którego przypisany jest proces pppd,
$3 - prędkość transmisji,

$4 - adres IP lokalnego końca połączenia,
$5 - adres IP zdalnego końca połączenia,

$6 - parametr przekazywany z pliku /etc/ppp/options opcją ipparam.
Na podstawie tych parametrów administrator połączenia PPP może tworzyć własne, elastyczne procedury

startowe.

Po zakończeniu transmisji pakietów IP wywoływany jest skrypt /etc/ppp/ip-down. Zasada działania i parametry są
identyczne jak ip-up, dlatego często ip-down jest dowiązany do ip-up, zaś procedury wykonywane są przy użyciu

parametru $0, czyli nazwy aktualnie wykonywanego programu. Skrypt ten zazwyczaj kasuje trasę w tablicy

routingu odpowiadającą likwidowanemu połączeniu PPP oraz interfejs sieciowy związany z tym połączeniem.

Najczęstsze wpadki

Zajrzyj

-

www.protocols.com/...

- opis protokołu PPP i protokołów sterujących

-

www.in.net/...

- informacja o konfigurowaniu modemów

-

axion.physics.ubc.ca/...

- różne informacje o PPP pod Linuksem

-

linux-mp.terz.de

- strona łaty jądra Linuksa pozwalającej rozbudować implementację PPP o PPP Multilink

-

nodevice.com/...

- najczęściej zadawane pytania nt. PPP

-

www.zeuter.com/...

- konfiguracja PPP dla routera brzegowego sieci LAN

background image

Możliwości popełnienia błędu przy konfigurowaniu PPP jest sporo. Styki modemu, terminala, protokołu warstwy

łącza i protokołów sieciowych tworzą skomplikowane środowisko, w którym o pomyłkę nietrudno, zaś o jej
wyśledzenie - wręcz przeciwnie. Wspomniany już problem ze sterowaniem kontrolą przepływu danych jest tego

wymownym przykładem. Inny problem, z którym możemy się spotkać, to spadek wydajności przy transmisji

danych protokołem usługowym FTP. Przyczyna jest prozaiczna - jeśli nie ma ustawionej opcji

asyncmap 0

nasz "rozmówca" po drugiej stronie łącza musi specjalnie zaznaczać znaki kontrolne o kodach 0x0 do 0x1f, co
zmniejsza efektywność transmisji. Brak kontroli przepływu danych może z kolei doprowadzić do zapchania bufora

modemu i zawieszenia transmisji wychodzącej.

Mimo że prędkość transmisji portu szeregowego ustawia się poleceniami stty i setserial, należy jednak podać
prędkość samemu pppd - bez tego transmisja przez modem będzie odbywała się przy aktualnie ustawionej

prędkości, zazwyczaj dużo niższej od maksymalnie możliwej do osiągnięcia.

archiwum.pckurier.p

Linux ze słuchawką?

nr 2/2001, str. 80, ID = 4524

Do prawidłowej pracy niezbędne jest też skonfigurowanie ośmiu bitów danych bez bitu parzystości. Inne

skonfigurowanie linii szeregowej będzie przyczyną kłopotów.

Wpadką po stronie serwera PPP może okazać się pominięcie opcji proxyarp. Powoduje to, że od strony sieci
rozgłoszeniowych, do których podłączony jest serwer, klient łącza PPP nie jest widziany. Ma on wówczas łączność

tylko z serwerem PPP, a poza nim nie.


Wyszukiwarka

Podobne podstrony:
Konfiguracja PPP pod Linuksem
budowa tuneli sieciowych pod linuksem
Konfiguracja PPP
Bezpieczny i wydajny serwer plików pracujący pod Linuksem
Jak używać klawiszy Windowsowych pod Linuksem
Zmiana adresu MAC pod Linuksem
PPP w Linuksie
AWHG 25 Konfiguracja pod neostrade (modecom mc 420)
instalacja i konfiguracja apache 2 2 z php 5 x pod windows xp eioba
Instrukcja konfiguracji modemu ADSL Router Request pod Neostrade
podstawy sieci i ich konfiguracja w linuksie
instalacja i konfiguracja apache 2 2 z php 5 x pod windows xp eioba
Konfiguracja modemo-routera z WiFi pod Internet Netii [Linksys WAG200G]
podstawy sieci i ich konfiguracja w linuksie IQJ2JHY5GJSWPZ35JOMBOGDIN745MLENXXTBJGI
Konfigurowanie połączenia PPP Natalia Litwin
Poradnik konfiguracja total comander pod dreambox

więcej podobnych podstron