Rozdział 38.
SLIP i PPP
Tim Parker
W tym rozdziale:
Konfiguracja protokołu SLIP
Konfiguracja protokołu PPP
Używanie systemu DNS z protokołami SLIP i PPP
Większość systemów linuxowych i UNIX-owych połączonych jest z Internetem za pomocą protokołów SLIP (ang. Serial Line Internet Protocol) lub PPP (ang. Point-to-Point Protocol). Oba te protokoły służą do obsługi połączenia modemowego (przez modem synchroniczny, asynchroniczny lub ISDN). Linux obsługuje również ulepszoną wersję protokołu SLIP - CSLIP (ang. Compressed SLIP).
Konfigurację tych protokołów można przeprowadzić podczas instalowania TCP/IP, ale można również odłożyć ją do czasu, gdy będziesz chciał połączyć się z Internetem (ponieważ większość usługodawców internetowych wymaga łączenia się za pomocą tych protokołów).
Sam proces konfigurowania protokołów SLIP i PPP nie jest skomplikowany. Jeśli będziesz trzymał się podanych niżej wskazówek, całość zajmie Ci tylko kilka minut.
Konfigurowanie interfejsu pozornego
Interfejs pozorny jest sposobem na przydzielenie komputerowi numeru IP w przypadku, gdy korzysta on tylko z interfejsów SLIP i PPP. Interfejs pozorny rozwiązuje problem pojawiający się w systemach nie podłączonych na stałe do sieci, w których jedynym prawidłowym adresem IP, pod który można wysłać dane, jest 127.0.0.1. Problem ten jest szczególne widoczny, gdy musisz używać aplikacji wymagających podania prawidłowego adresu IP, którego zwykle nie posiadasz jeśli nie jesteś podłączony do sieci.
Konfigurowanie takiego interfejsu jest bardzo proste. Jeśli w pliku /etc/hosts jest wpisany adres IP komputera, wystarczy wydać polecenie tworzące odpowiedni interfejs i powiadomić system, że może za jego pośrednictwem przesyłać dane:
ifconfig dummy nazwa_komputera
route add nazwa_komputera
Powyższe polecenia spowodują utworzenie połączenia z Twoim własnym adresem IP. Jeśli wcześniej nie wpisałeś adresu IP do pliku /etc/hosts, musisz to najpierw zrobić, dopisując do niego wiersz:
127.0.0.1 loopback
W niektórych wersjach Linuxa zamiast programów ifconfig i route używa się odpowiednich programów obsługiwanych za pomocą menu. W większości przypadków sterownik pętli zwrotnej jest konfigurowany automatycznie przy instalacji Linuxa. Sprawdź, czy w pliku /etc/hosts znajduje się wiersz zawierający adres 127.0.0.1. Jeśli nie, dodaj go i uruchom ponownie komputer.
Konfiguracja protokołu SLIP
Protokół SLIP używany jest przy kontaktowaniu się z usługodawcą internetowym i do połączeń pomiędzy dwoma komputerami. Nawiązywanie połączenia przez modem odbywa się w zwykły sposób, a następnie SLIP przejmuje kontrolę nad połączeniem. Sterownik SLIP powinien być częścią jądra systemu - jeśli tak nie jest, należy je przekompilować. Większość sterowników SLIP obsługuje również protokół CSLIP, umożliwiający kompresję nagłówków, co prowadzi do uzyskania większej szybkości przesyłania danych (nie każdy usługodawca internetowy pozwala jednak na połączenia CSLIP - powinieneś to sprawdzić, zanim zaczniesz konfigurację).
W większości systemów linuxowych do obsługi protokołu SLIP musi być przeznaczony jeden z portów szeregowych, co oznacza, że nie będzie go można używać do innych celów. Kernel używa programu SLIPDISC (ang. SLIP Discipline) do kontrolowania portu szeregowego i blokowania dostępu do niego aplikacjom próbującym wykorzystać go w inny sposób nawet wtedy, gdy protokół SLIP nie jest wykorzystywany.
Protokół SLIP
Połączenia SLIP obsługiwane są przez dwa programy: dip i slattach. Oba mogą zostać użyte do zainicjalizowania połączenia. Nie można natomiast do tego celu użyć standardowych programów komunikacyjnych.
Przeznaczenie obu programów jest nieco różne. slattach, który po prostu podłącza się do portu szeregowego, używany jest gdy istnieje stałe połączenie z serwerem SLIP (wtedy niepotrzebna jest obsługa modemu ani potwierdzanie transmisji). Program dip obsługuje inicjalizowanie połączenia, logowanie i potwierdzanie transmisji. Powinieneś go używać, jeśli łączysz się przez modem. Można go również użyć, by skonfigurować system jako serwer SLIP, pozwalając innym łączyć się z Twoim komputerem.
SLIP jest protokołem bardzo prostym, ponieważ w transmisji danych biorą udział tylko dwa urządzenia: Twój komputer i serwer. Po nawiązaniu połączenia, SLIP przesyła numer IP, który będzie później używany. Niektóre systemy wysyłają ten sam numer za każdym razem (adresowanie statyczne), inne natomiast mają różne numery przy różnych połączeniach (adresowanie dynamiczne). Konfigurowanie obu typów połączeń wymaga nieco innych zabiegów.
Najłatwiejszym sposobem na to, aby przeznaczyć port szeregowy do połączeń SLIP, jest użycie programu slattach. Jest on dostępny w przeważającej większości systemów linuxowych. Jego argumentem powinna być nazwa portu szeregowego. Przykładowo, aby do połączeń SLIP przeznaczyć drugi port szeregowy, wydaj polecenie
slattach /dev/cua1 &
Gdyby po poleceniu tym nie postawić znaku & powodującego uruchomienie go w tle, konsola przestałaby być dostępna. Powyższe polecenie można również wpisać do któregoś z plików inicjalizacyjnych.
Po uruchomieniu programu slattach, port szeregowy jest podłączany do pierwszego urządzenia SLIP (zwykle /dev/sl0). Jeśli używasz więcej niż jednego portu do połączeń SLIP, musisz uruchomić program slattach odpowiednią liczbę razy. Domyślnie większość systemów linuxowych używa dla takich portów interfejsu CSLIP. Jeśli nie odpowiada Ci taka sytuacja, powinieneś explicite zażądać użycia protokołu SLIP:
slattach -p slip /dev/cua1 &
Ważne jest, aby po obu stronach połączenia ustawiony był taki sam protokół - w przeciwnym przypadku prawidłowe przesyłanie danych będzie niemożliwe (istnieją jeszcze dwie wersje protokołu SLIP: slip6 - protokół sześciobitowy, oraz protokół, który potrafi dostosować się do wersji używanej przez serwer). Nie można na przykład nawiązać połączenia, jeśli jeden komputer używa protokołu slip6, a drugi CSLIP.
Po przydzieleniu protokołowi SLIP portu szeregowego, należy skonfigurować interfejs sieciowy tak samo, jak dla wszystkich innych urządzeń, za pomocą poleceń ifconfig i route. Przykładowo, jeśli Twój komputer nazywa się merlin, a chcesz połączyć się z komputerem arthur, powinieneś wydać polecenia:
ifconfig sl0 merlin-slip pointtopoint arthur
route add arthur
Polecenie ifconfig służy do konfiguracji interfejsu sieciowego o nazwie merlin-slip (lokalny adres interfejsu SLIP), natomiast polecenie route powoduje dodanie odpowiedniego wpisu do tablic kierowania przesyłem danych.
Jeśli chcesz używać protokołu SLIP do łączenia się z Internetem, musisz posiadać adres IP i odpowiedni wpis w pliku /etc/hosts.
Po wykonaniu poleceń ifconfig i route możesz przetestować połączenie - powinno działać bez problemów. Jeśli w przyszłości będziesz chciał usunąć interfejs SLIP, najpierw należy usunąć odpowiedni wpis z tablic kierowania przesyłem danych, później wyłączyć interfejs poleceniem ifconfig, a na koniec zakończyć działanie procesu slattach. Można to zrobić w następujący sposób:
route del arthur
ifconfig sl0 down
Aby zakończyć działanie procesu slattach, trzeba podać jego numer identyfikacyjny (wyświetlany przez polecenie ps) jako argument polecenia kill (patrz rozdział 34. „Procesy”).
Jeśli posiadasz dedykowane połączenie z serwerem SLIP i chcesz używać programu slattach, plik rc.inet1 powinieneś zmodyfikować następująco:
IPADDR="123.12.3.1" #adres IP Twojego komputera
REMADDR="142.12.3.12" #adres IP serwera SLIP
slattach -p cslip -s 19200 /dev/ttyS0 #ustawienie predkosci i portu
/etc/ifconfig sl0 $IPADDR pointtopoint $REMADDR up
/etc/route add default gw $REMADDR
Wiersze podobne do powyższych zwykle znajdują się już w tym pliku, tyle że zaznaczone są jako komentarz. Informacje o prędkości połączenia, protokole i porcie powinieneś oczywiście dostosować do swoich potrzeb. Jeśli serwer nie obsługuje protokołu cslip, zamiast niego jako parametru polecenia slattach użyj wartości slip.
Jeśli serwer SLIP przydziela adresy IP dynamicznie, nie możesz wpisać adresu IP do pliku konfiguracyjnego. Większość serwerów SLIP wyświetla wtedy informację zawierającą przydzielony numer IP, który może zostać przechwycony za pomocą programu dip.
dip
Program dip znakomicie upraszcza łączenie się z serwerem SLIP. Aby go użyć, będziesz potrzebował skryptu, zawierającego wszystkie polecenia związane z nawiązaniem połączenia. W skrypcie takim zwykle następuje również przesłanie identyfikatora i hasła, co jeszcze bardziej upraszcza logowanie.
Przykładowy skrypt dip zamieszczony jest ma stronach man dotyczących tego programu - jeśli chcesz go użyć, skieruj go do pliku i dostosuj do swoich potrzeb. Oto prosty skrypt (jeśli jest taka potrzeba, możesz oczywiście wpisać go ręcznie, nie zapominając o dostosowaniu danych do swojego systemu).
#
# sample.dip Dialup IP connection support program.
#
# Version: @(#)sample.dip 1.40 07/20/93
#
# Author: Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
#
main:
# First of all, set up our name for this connection.
# I am called "uwalt.hacktic.nl" (== 193.78.33.238)
get $local uwalt.hacktic.nl
# Next, set up the other side's name and address.
# My dialin machine is called 'xs4all.hacktic.nl'
*(== 193.78.33.42)
get $remote xs4all.hacktic.nl
# Set netmask on sl0 to 255.255.255.0
netmask 255.255.255.0
# Set the desired serial port and speed.
port cua02
speed 38400
# Reset the modem and terminal line.
# This seems to cause trouble for some people!
reset
# Prepare for dialing.
send ATQ0V1E1X4\r
wait OK 2
if $errlvl != 0 goto modem_trouble
dial 555-1234567
if $errlvl != 1 goto modem_trouble
# We are connected. Login to the system.
login:
sleep 2
wait ogin: 20
if $errlvl != 0 goto login_error
send MYLOGIN\n
wait ord: 20
if $errlvl != 0 goto password_error
send MYPASSWD\n
loggedin:
# We are now logged in.
wait SOMETEXT 15
if $errlvl != 0 goto prompt_error
# Set up the SLIP operating parameters.
get $mtu 296
# Ensure "route add -net default xs4all.hacktic.nl" will be
*done
default
# Say hello and fire up!
done:
print CONNECTED $locip ---> $rmtip
mode CSLIP
goto exit
prompt_error:
print TIME-OUT waiting for SLIPlogin to fire up...
goto error
login_trouble:
print Trouble waiting for the Login: prompt...
goto error
password_error:
print Trouble waiting for the Password: prompt...
goto error
modem_trouble:
print Trouble occurred with the modem...
error:
print CONNECT FAILED to $remote
quit 1
exit:
exit
Obecnie dostępnych jest kilka wersji tego skryptu, również na dołączonej do książki płycie CD-ROM. Jeśli masz dostęp do Internetu, możesz znaleźć je w węzłach FTP i w grupach dyskusyjnych.
Konfiguracja protokołu PPP
Protokół PPP jest używany częściej niż SLIP, głównie dlatego, że ma większe możliwości. Jego funkcje podzielone są na dwie grupy: protokół HLDC (ang. High Level Data Link Control), który definiuje zasady przesyłania bloków informacji pomiędzy maszynami, oraz funkcje rezydentnego programu pppd, obsługującego protokół po nawiązaniu połączenia przez HDLC.
Podobnie jak w przypadku protokołu SLIP, najpierw następuje normalne połączenie pomiędzy dwoma komputerami poprzez modem, a dopiero później PPP przejmuje kontrolę nad połączeniem. Zanim uda Ci się ustanowić połączenie PPP, musisz skonfigurować sterownik pętli zwrotnej. Powinieneś również posiadać prawidłowo działający system tłumaczenia nazw, obojętnie, czy zapisany w pliku /etc/hosts, czy w postaci serwera DNS (patrz podrozdział „Używanie systemu DNS z protokołami SLIP i PPP” w dalszej części tego rozdziału).
Zakładanie konta PPP
Jeśli zamierzasz pozwolić innym użytkownikom łączyć się z Twoim systemem za pomocą protokołu PPP, ze względów bezpieczeństwa najlepiej jest założyć konto przeznaczone tylko do tego celu, o nazwie ppp. Nie jest to konieczne w przypadku, gdy nie przewidujesz, by ktoś miał łączyć się z systemem przez telefon. Możesz również użyć protokołu PPP logując się jako dowolny użytkownik. Jednak dla podniesienia poziomu bezpieczeństwa warto założyć konto PPP, szczególnie jeśli zamierzasz zezwolić na obsługę połączeń przychodzących. Proces zakładania konta PPP nie różni się niczym od zakładania konta dla nowego użytkownika - można użyć skryptu adduser czy newuser, bądź też ręcznie zmodyfikować zawartość pliku /etc/passwd.
Przykładowy wpis w pliku /etc/passwd definiujący konto użytkownika o identyfikatorze ppp (o numerze UID równym 201 oraz numerze GID równym 51) może mieć następującą postać:
ppp:*:201:51:PPP account:/tmp:/etc/ppp/ppscript
W tym przypadku dla użytkownika ppp hasło jest zablokowane (nikt więc nie będzie mógł się zalogować na to konto) i, ponieważ nie zostały utworzone żadne pliki, katalogiem domowym jest /tmp. Program uruchamiany domyślnie po zalogowaniu to /etc/ppp/pppscript, będący skryptem, w którym powinieneś zapisać wszystkie informacje konfiguracyjne.
Oto przykładowa zawartość skryptu pppscript:
#!/bin/sh
mesg n
stty -echo
exec pppd -detach silent modem crtscts
Pierwszy wiersz wymusza uruchomienie programu w interpreterze sh, bez względu na to, jaki jest aktualnie używany (patrz rozdział 14. „Programowanie w języku powłoki”). Drugi wyłącza wszystkie próby zapisu do konsoli używanej przez PPP. Polecenie stty w trzecim wierszu powoduje, że dane wysyłane przez zdalny komputer nie będą wyświetlane na ekranie. Ostatnie polecenie uruchamia program rezydentny pppd, obsługujący protokół PPP. Program pppd zostanie omówiony nieco później.
Nawiązywanie połączenia - program chat
Aby można było uruchomić PPP, wcześniej trzeba nawiązać połączenie z komputerem zdalnym. Można to zrobić na wiele sposobów; jednym z nich jest użycie programu chat. Pogram ten jest popularny głównie dlatego, że korzysta ze skryptów o formacie bardzo podobnym do skryptów UUCP.
Aby użyć programu chat, trzeba wydać polecenie przypominające nieco wiersze pliku konfiguracyjnego protokołu UUCP o nazwie /etc/Systems. Przykładowo, aby połączyć się z komputerem dostępnym pod numerem telefonu 555-1234, można wydać polecenie:
chat "" ATZ OK ATDT5551234 CONNECT "" login: ppp word: secret1
Parametry tego programu to pary spodziewany tekst-tekst do wysłania. Po uruchomieniu programu nie musimy czekać na przesłanie żadnego tekstu, więc pierwszy tekst jest pusty. Wysyłamy polecenie AZT, resetujące modem i oczekujemy na potwierdzenie (OK). Następnie wybieramy numer (ATDT5551234) i oczekujemy na komunikat CONNECT. Po uzyskaniu połączenia nie wysyłamy nic i czekamy na zachętę login: ze strony zdalnego komputera. Po jej uzyskaniu wysyłamy identyfikator ppp i czekamy na pytanie o hasło (word:). Na koniec wysyłane jest hasło (secret1 - tu należy oczywiście podstawić wartość oczekiwaną przez system zdalny) i program chat kończy działanie, pozostawiając jednak otwarte połączenie.
Jeśli druga strona połączenia nie wysyła tekstu login: zaraz po uruchomieniu modemu, możesz być zmuszony do użycia polecenia BREAK, aby „obudzić” system zdalny. Można to zrobić wydając polecenie:
chat - v "" ATZ OK ATDT5551234 CONNECT "" ogin: -BREAK- ogin: ppp word: secret1
Istnieje jednak dość poważny problem związany z bezpieczeństwem, ponieważ dowolny użytkownik, który wykona polecenie ps ef zobaczy na ekranie pełną treść polecenia, jakie wydałeś przy uruchamianiu programu chat - nie wyłączając hasła. Można łatwo obejść ten problem zapisując odpowiednie parametry w pliku, którego nazwę należy następnie przekazać jako parametr polecenia chat:
chat -f nazwa_pliku
Plik nazwa_pliku powinien zawierać następującą treść:
"" ATZ OK. ATDT5551234 CONNECT "" login: ppp word: secret1
W skrypcie można również wykryć często spotykane problemy, np. gdy linia jest zajęta (BUSY) lub nie udało się nawiązać połączenia (NO CARRIER). Takie komunikaty generowane przez modem można poprzedzić słowem ABORT, które powoduje zakończenie działania skryptu, gdy odebrana zostanie któraś z tych informacji. Przykładowo zmodyfikowany skrypt wygląda następująco:
ABORT BUSY ABORT `NO CARRIER` "" ATZ OK. ATDT5551234 CONNECT "" login: ppp word: secret1
Potrzebne były dwa polecenia ABORT, ponieważ pojedyncze polecenie ABORT może przyjąć tylko jeden argument. Reszta skryptu pozostała bez zmian. Pojedynczy cudzysłów wokół składającego się z dwóch wyrazów parametru NO CARRIER zapewnia jego prawidłową interpretację.
Uruchamianie pppd
Po nawiązaniu połączenia i zalogowaniu się na konto PPP, można uruchomić program rezydentny pppd, który przejmie kontrolę nad połączeniem PPP. Jeśli Twój komputer używa portu /dev/cua1 (oznaczenie pierwszego portu szeregowego podłączonego do modemu) do połączeń PPP z prędkością 38400 bodów, odpowiednie polecenie ma postać:
pppd /dev/cua1 38400 crtscts defaultroute
Nakazuje ono kernelowi przełączyć interfejs obsługujący /dev/cua1 na PPP i ustanowić połączenie IP z komputerem zdalnym. Opcja crtscts, używana prawie zawsze przy połączeniach o prędkości powyżej 9600 bodów, załącza potwierdzanie transmisji.
Twój system będzie używał własnego numeru IP, co nie powinno sprawiać problemów większości przypadków. Jeśli jednak chcesz wymusić użycie innego numeru (zarówno dla systemu lokalnego, jak i zdalnego), możesz to zrobić podając go w wierszu poleceń w następującym formacie:
lokalny_adres_IP:zdalny_adres_IP
Jeśli chcesz zmienić tylko jeden adres, drugą część po prostu pozostaw pustą, na przykład tak:
147.23.43.1:
Powyższe polecenie spowoduje wymuszenie użycia przez komputer lokalny adresu 147.23. 43.1.
Za pomocą polecenia chat uruchomionego jako argument polecenia pppd można od razu nawiązać połączenie i przekazać je do programu pppd. Najwygodniej w tym celu zapisać parametry programu chat w pliku i użyć opcji -f:
pppd connect ”chat -f nazwa_pliku” /dev/cua1 38400 -detach crtscts modem * defaultroute
Plik nazwa_pliku zawiera pary tekst wysyłany-tekst oczekiwany, jak omówiliśmy to już wcześniej. Opcja -detach nakazuje programowi pppd nie odłączać się od konsoli i rozpocząć działanie w tle. Opcja modem powoduje obserwację portu szeregowego i rozłączenie „rozmowy” w przypadku zerwania połączenia.
Program pppd rozpoczyna nawiązywanie połączenia PPP od wymiany adresów IP, następnie ustawia parametry transmisji. Później pppd daje znać oprogramowaniu sieciowemu, że w użyciu jest łącze PPP, ustawiając odpowiedni interfejs dla /dev/ppp0 (jeśli jest to pierwsze połączenie PPP). Na koniec wykonane zostaje odpowiednie polecenie route, kierujące dane przez to połączenie.
Testowanie konfiguracji
pppd wysyła komunikaty bezpośrednio do programu syslog (taką samą sytuację mamy w przypadku programu chat, o ile został uruchomiony z opcją -v). Jeśli masz jakieś kłopoty z połączeniem PPP, powinieneś nakazać programowi syslog rejestrowanie wszystkich przychodzących informacji w pliku, a potem je przejrzeć. Musisz być jednak świadomy faktu, że zapisywane są również hasła i identyfikatory użytkowników - z tego powodu nie powinieneś domyślnie używać opcji -v polecenia chat.
Jeśli w pliku /etc/syslog.conf nie ma wpisu określającego nazwę pliku, w którym należy rejestrować komunikaty, wszystkie komunikaty przesyłane do programu syslog są tracone. Jeśli więc chcesz rejestrować informacje pochodzące z programów pppd i chat, powinieneś do tego pliku dodać wiersz:
daemon.* /tmp/ppp-log
Powoduje on zapisywanie wszystkich informacji od programów rezydentnych do pliku /tmp/ppp-log (można oczywiście użyć dowolnej nazwy pliku). W wielu wersjach Linuxa separatorem w tym pliku musi być znak tabulacji, nie spacja. Kiedy skrypt zacznie działać poprawnie, pamiętaj o usunięciu tego wiersza, ponieważ rozmiary pliku z rejestrowanymi danymi szybko stają się nie do przyjęcia.
PPP a bezpieczeństwo
PPP to wspaniały protokół do komunikowania się przez modem, ale luki w bezpieczeństwie, które tworzy, są tak wielkie, że mógłby przez nie przejechać autobus. Drobne błędy w jego konfiguracji powodują, że każdy może uzyskać dostęp do komputera lub użyć połączenia PPP do łączenia się z innymi komputerami. Dla wyeliminowania tych problemów wprowadzono technikę uwierzytelniania (zwaną po angielsku authentication), polegającą na sprawdzaniu, czy komputer/osoba na każdym z końców połączenia faktycznie jest tym, za kogo się podaje, i czy wolno mu używać połączenia.
PPP używa dwóch metod uwierzytelniania: PAP (ang. Password Authentication Protocol, protokół uwierzytelniania haseł) i CHAP (ang. Challenge Handshake Authentication Protocol, protokół uwierzytelniania przez wezwanie do potwierdzenia). PAP przypomina nieco procedurę logowania. Kiedy jeden komputer wysyła identyfikator użytkownika i hasło do drugiego, komputer odbierający sprawdza te informacje po swojej stronie. Metoda ta jest bardzo prosta, ale ma jedną bardzo poważną wadę: każdy może przechwycić połączenie i podsłuchać przesyłane hasło.
CHAP rozwiązuje ten problem, dlatego jest używany o wiele częściej. Pierwszy komputer wysyła dowolny ciąg znaków do drugiego komputera razem ze swoją nazwą. Drugi komputer używa takiego samego ciągu, tej nazwy oraz swojej nazwy do przeprowadzenia pewnych operacji na przesłanym ciągu znaków, po czym odsyła go wraz ze swoją nazwą. Pierwszy komputer przeprowadza podobną operację, po czym jeśli otrzymany ciąg znaków zgadza się z pierwszym wysłanym, połączenie uważane jest za bezpieczne. Dodatkowym zabezpieczeniem jest fakt, że taka procedura powtarzana jest wielokrotnie podczas trwania połączenia.
Kiedy dwa systemy łączą się, domyślnie nie używają mechanizmów uwierzytelniania. Kiedy uwierzytelnianie jest jednak załączone, jeden z końców połączenia próbuje użyć protokołu CHAP. Jeśli nie uda się nawiązać połączenia, wypróbowywany jest protokół PAP. Jeżeli również za pomocą tego protokołu nie uda się potwierdzić tożsamości komputera z drugiej strony połączenia, połączenie jest przerywane. Aby przy połączeniach używać mechanizmów uwierzytelniania, trzeba w pliku /etc/ppp/options podać opcję auth. Jeśli jednak komputery, z którymi się łączysz, nie obsługują tych mechanizmów, nawiązanie połączenia nie będzie możliwe.
Informacje potrzebne do używania CHAP i PAP przechowywane są w plikach /etc/ppp/chap-secrets i /etc/ppp/pap-secrets. Jeśli zamierzasz używać uwierzytelniania dla wszystkich połączeń (co jest bardzo dobrym pomysłem), powinieneś zadbać o odpowiednią zawartość tych plików. Jeśli skonfigurujesz oba te pliki i zastosujesz opcję auth w pliku /etc/ppp/options, nikt nie będzie mógł połączyć się z Twoim systemem bez potwierdzenia swojej tożsamości.
Plik /etc/ppp/chap-secrets składa się z czterech kolumn danych, zawierających odpowiednio nazwę klienta, nazwę serwera, tekst-hasło i opcjonalną listę adresów IP. Zachowanie systemu jest różne w zależności od tego, czy komputer lokalny żąda uwierzytelnienia od komputera próbującego się połączyć, czy też sam jest wzywany do uwierzytelnienia. Kiedy komputer lokalny ma potwierdzić swoją tożsamość, pppd sprawdza, czy w pliku tym znajduje się wpis z nazwą klienta zgodną z nazwą systemu i odpowiednią nazwą serwera, po czym używa podanego tekstu do skonstruowania wysyłanej wiadomości. Pojedynczy wpis w pliku /etc/ppp/chap-secrets może mieć następującą postać:
#client server string adresses
merlin.tpci.com big_guy.big_net.com "I hate DOS"
W takim przypadku do konstruowania wiadomości potwierdzającej używany jest tekst I hate DOS (otoczony cudzysłowem, ponieważ składa się z więcej niż jednego wyrazu). Wraz z nazwą systemu jest on wysyłany do big_guy.big_net.com, gdzie jest kodowany wraz z nazwą tamtego systemu i odsyłany z powrotem. Tu jest odkodowywany i jeśli otrzymany zostanie ponownie tekst I hate DOS, oznacza to, że wszystko jest w porządku. W pliku /etc/ppp/chap-secrets może oczywiście znajdować się więcej wpisów, na przykład:
#client server string adresses
merlin.tpci.com big_guy.big_net.com "I hate DOS"
merlin.tpci.com chatton.cats.com "Meow, meow, meow"
merlin.tpci.com roy.sailing.ca "Hoist the spinnaker"
Kiedy to Twój komputer żąda potwierdzenia, procedura jest odwrócona. Program pppd szuka wpisu z nazwą zdalnego komputera w polu z nazwą klienta i z nazwą lokalnego komputera w polu serwera. Odpowiednie wpisy mają więc postać:
#client server string adresses
big_guy.big_net.com merlin.tpci.com "Size isn't everything"
Jak widać, plik /etc/ppp/chap-secrets powinien składać się z par wpisów, w których pola klienta i serwera są zamienione miejscami (ponieważ uwierzytelnianie może przebiegać w obie strony), na przykład tak:
#client server string adresses
merlin.tpci.com big_guy.big_net.com "I hate DOS"
big_guy.big_net.com merlin.tpci.com "Size isn't everything"
merlin.tpci.com chatton.cats.com "Meow, meow, meow"
chatton.cats.com merlin.tpci.com "Here, Kitty, Kitty"
merlin.tpci.com roy.sailing.ca "Hoist the spinnaker"
roy.sailing.ca merlin.tpci.com "Man overboard"
Rozmiar takiego pliku może być dość znaczny, jeśli łączysz się z większą liczbą komputerów. Na szczęście dozwolone jest użycie symboli wieloznacznych, takich jak symbol gwiazdki:
#client server string adresses
merlin.tpci.com big_guy.big_net.com "I hate DOS"
big_guy.big_net.com merlin.tpci.com "Size isn't everything"
merlin.tpci.com chatton.cats.com "Meow, meow, meow"
chatton.cats.com merlin.tpci.com "Here, Kitty, Kitty"
merlin.tpci.com roy.sailing.ca "Hoist the spinnaker"
* merlin.tpci.com "Man overboard"
W podanym wyżej przykładzie ostatni wpis pozwala każdej innej maszynie połączyć się z komputerem lokalnym za pomocą tego samego tekstu. Oczywiście, w pliku chap-secrets zdalnego komputera musi znajdować się taki sam wpis. Jest to nieco mniej bezpieczny sposób, niż użycie osobnego tekstu dla każdego komputera, ale może zaoszczędzić sporo czasu.
Pole zawierające adresy IP, nie wykorzystane w powyższych przykładach, pozwala używać zarówno adresu IP, jak i nazwy symbolicznej klienta. Jest to konieczne w przypadku, gdy zdalny komputer wysyła inny numer IP za każdym razem, co normalnie spowodowałoby błąd przy uwierzytelnianiu. Jeśli pole to jest puste, akceptowany jest dowolny adres IP. Jeśli jest w nim myślnik, dostęp z danego komputera jest zabroniony.
Plik /etc/ppp/pap-secrets jest podobny do pliku /etc/ppp/chap-secrets. Poszczególne pola określają nazwę klienta, serwera, tekst tajnego hasła i dostępne dla systemu aliasy. Pliki te jednak różnią się nieco wyglądem, ponieważ nazwy klienta i serwera nie są nazwami pełnymi, a hasło jest pojedynczym blokiem tekstu, na przykład:
# /etc/ppp/pap-secrets
# user server string addresses
merlin darkstar yG55Sj28 darkstar.big_net.com
darkstar merlin 5Drbt32 merlin.tpci.com
merlin chatton MeowMeow chatton.cats.com
chatton merlin 74GRr34 merlin.tpci.com
Dwa pierwsze wiersze odpowiadają za połączenia z komputerem darkstar. Pierwszy wiersz określa, w jaki sposób ma przebiegać uwierzytelnianie w przypadku, gdy wymaga go komputer darkstar. Nazwa użytkownika zapisana w pierwszej kolumnie jest przesyłana do komputera zdalnego, druga kolumna określa nazwę, pod jaką widziany będzie serwer. Stwarza to problem: program pppd nie ma możliwości poznania pełnej nazwy komputera zdalnego - może tylko poznać jego numer IP. Można również podać numer IP lub nazwę komputera zdalnego na końcu polecenia uruchamiającego proces pppd, na przykład tak:
pppd ...... remotename chatton user merlin
W powyższym przykładzie serwer nazywa się chatton, natomiast Twój komputer - czyli klient - merlin. Dzięki możliwości podania opcji user można wymusić użycie innej niż rzeczywista nazwy systemu lokalnego.
Używanie systemu DNS
z protokołami SLIP i PPP
Jeśli protokołów SLIP i PPP używasz do czegoś więcej niż czytania poczty czy przeglądania grup dyskusyjnych, prawdopodobnie wygodnym rozwiązaniem będzie użycie systemu DNS. Najłatwiej zrobić to wpisując adres IP serwera nazw do pliku /etc/ resolv.conf. Przykładowo, jeśli masz dostęp do serwera nazw o adresie IP 145.2.12.1, Twój plik /etc/reslov.conf powinien wyglądać tak:
#/etc/resolv.conf
domain merlin.com #domena lokalna
nameserver 145.2.12.1 #serwer nazw internetowych
Jeśli taki wpis istnieje, SLIP czy PPP wysyła prośbę o przetłumaczenie nazwy na adres IP do serwera nazw i czeka na odpowiedź. Im łatwiejszy jest dostęp do serwera nazw, tym wydajniejsza będzie taka procedura. Z tego powodu powinieneś wybierać możliwie najbliższy serwer nazw (pod względem czasu dostępu).
Użycie tego sposobu ma jednak swoje wady. Każde tłumaczenie adresu musi przejść przez linię SLIP czy PPP, co może spowodować zwolnienie działania aplikacji i zwiększenie ruchu w sieci.
Problem zmniejszenia wydajności można obejść konfigurując bufor serwera nazw. W tym celu trzeba zmodyfikować zawartość pliku /etc/named.boot. Jeśli chcesz skonfigurować swój komputer jako bufor serwera nazw, plik ten powinien wyglądać następująco:
; /etc/named.boot
directory /var/named
cache .db.cache ;cache-only
primary 0.0.147.in-addr.arpa db.cache ;loopback
W powyższym przykładzie do określenia sterownika pętli zwrotnej użyta została lokalna nazwa sieciowa w formacie IN-ADDR.ARPA. Lista serwerów nazw będzie przechowywana w pliku .db.cache.
Podsumowanie
Konfigurowanie protokołów PPP i SLIP w systemie linuxowym nie jest skomplikowane, ale wymaga poświęcenia uwagi szczegółom przy modyfikowaniu plików konfiguracyjnych. Po skonfigurowaniu, protokoły te mogą być używane do uzyskiwania dostępu do Internetu czy dostępu do innych maszyn używających tych protokołów. Jeśli chcesz uzyskać informacje na tematy pokrewne, przejdź do innych rozdziałów.
Ogólne zasady pracy w sieci omówione są w rozdziale 37. „Praca w sieci”.
NIS oraz YP, systemy, które dodadzą elastyczności systemowi linuxowemu podłączonemu do sieci, opisane są w rozdziale 44. „NIS oraz YP”.
O konfigurowaniu własnego węzła internetowego przeczytać możesz w rozdziale 47. „Konfigurowanie węzła internetowego”.
614 Część VI ♦ Linux dla administratorów
614 E:\Moje dokumenty\HELION\Linux Unleashed\Indeks\38.DOC
E:\Moje dokumenty\HELION\Linux Unleashed\Indeks\38.DOC 615
Rozdział 38. ♦ SLIP i PPP 615