Następna strona Poprzednia strona Spis treści

3. PPPD

Potrzebny ci będzie pppd (Point to Point Protocol Daemon) i odpowiednia wiedza o jego działaniu. Przeczytaj odpowiednie RFC i Linux PPP HOWTO, jeżeli jest to potrzebne. Ponieważ nie będziesz używał procedury logowania, nie musisz używać (m)getty ani (fałszywego) użytkownika skojarzonego z pppd kontrolującym połączenie. Nie będziesz musiał wybierać numeru, nie będą więc potrzebne żadne skrypty chat. Obwód modemowy i konfiguracja, którą właśnie wykonałeś jest właściwie kablem null-modem. Znaczy to, że będziesz musiał skonfigurować pppd w sposób, w jaki konfigurowałbyś go do kabla null-modem.

Dla dobrego połączenia, twoje ustawienia powinny spełniać następujące wymogi:

Zakładam, że modem jest podłączony do COM2, lokalny adres IP to ,,Loc_IP'', a zdalny to ,,Rem_Ip''. Chcemy użyć 576 jako nasze MTU. /etc/ppp/options.ttyS1 powinno wyglądać tak:

crtscts
mru 576
mtu 576
passive
Loc_Ip:Rem_Ip
-chap
modem
-pap
persist

A więc, jeżeli system lokalny to 192.168.1.1, a system zdalny to 10.1.1.1, /etc/ppp/options.ttyS1 powinien wyglądać następująco:

crtscts
mru 576
mtu 576
passive
192.168.1.1:10.1.1.1
-chap
modem
-pap
persist

options.ttyS1 na zdalnym systemie powinien wyglądać tak:

crtscts
mru 576
mtu 576
passive 10.1.1.1:192.168.1.1
-chap
modem
-pap
persist

Opcja passive limituje numer (ponownych) połączeń. Opcja persist będzie próbowała trzymać pppd uruchomionym w razie rozłączenia, lub jeżeli nie będzie mógł odrazu się połączyć. Jeżeli telnetujesz się dużo podczas transferu plików (FTP lub przeglądanie WWW), możesz użyć mniejszego MTU i MRU, takiego jak 296. System zdalny będzie wtedy czujniejszy. Jeżeli nie będziesz telnetował się podczas FTP, może ustawić MTU i MRU na 1500.

3.1 Skrypty

Uruchamianie pppd i utrzymywanie go w działaniu

Skrypt /usr/local/sbin/PRem_Host.sh poniżej startuje pppd. Musisz uruchomić go po skonfigurowaniu portów szeregowych (zamień Rem_Host na nazwę zdalnego systemu).

#!/bin/bash
# Opcjonalnie sleep
#/usr/bin/sleep 30
( /usr/sbin/pppd /dev/ttyS1 115200 ) &

Może on być uruchamiany ze skryptu konfigurującego kartę sieciową (/etc/init.d/network w systemie Debian), w tym przypadku musisz odkomentować sleep, żeby być pewnym, że porty com zostały skonfigurowane jako pierwsze. Jeżeli używasz setserial, możesz uruchomić go z tego skryptu. Innym sposobem jest uruchomienie go z rc.local. W systemach Debian istnieje katalog /etc/rc.boot/. Według Rolf'a Raar'a, skrypty w tym katalogu są uruchamiane w kolejności alfabetycznej. Skrypt setserial nazywa się 0setserial. Jeżeli wywołasz swój skrypt z pliku o nazwie 2linie-dzierżawione, będzie wykonany po 0setserial.

Chociaż opcja persist czyni to powierzchownym, pppd może być też restartowany przez ip-down:

#! /bin/bash
case $s in
     /dev/ttyS1)
          /usr/bin/sleep 30
          /usr/local/sbin/PRem_Host.sh &
          ;;
esac

Jeżeli pppd zginie, powinien być restartowany opcją w skrypcie ip-up (opcjonalnie). Jeżeli to się nie dzieje, skrypt /usr/local/sbin/test-Rem_Host-ppp robi to za ciebie. Ten skrypt sprawdza, czy zdalny interfejs istnieje - jeżeli nie, spróbuje uruchomić pppd:


#!/bin/bash
if ! ( /sbin/ifconfig | grep Rem_Ip > /dev/null )
then
     # PPP nie żyje
     logger "Rem_Host PPP nie żyje! ; uruchomiony ponownie"
     /usr/local/sbin/PRem_Host.sh &
fi

Następująca linia w crontab uruchamia powyższy skrypt co 5 minut. Możesz uruchamiać skrypt częsciej, ale ja nie uruchamiałbym go częściej niż co dwie minuty.

*/5 * * * *        /usr/local/sbin/test-Rem_Host-ppp

Możesz edytować crontab poleceniem ,,crontab -e''. Zrestartuje on crona po edycji. Używa edytora podanego w zmiennej środowiskowej ,,EDITOR'', która może być ustawiona przez /etc/profile lub  /.profile (export EDITOR=Twoj_Ulubiony_Edytor).

Niektórzy ludzie uruchamiają pppd z /etc/inittab, ale ja nigdy tego nie testowałem.

Ustawianie routingu

Domyślny routing może zostać ustawiony opcją defaultroute, albo przez skrypt /etc/ppp/ip-up:

#! /bin/bash
case $2 in
     /dev/ttyS1)
          /sbin/route add -net 0.0.0.0 gw Rem_Ip netmask 0.0.0.0
          ;;
esac

Ip-up może być też używany do synchronizacji zegara używając netdate.

Oczywiście routing ustawiony w ip-up nie musi być domyślnym routingiem. Twoj skrypt ip-up ustawia routing do zdalnej sieci, kiedy ip-up w zdalnym systemie ustawia trasę do twojej sieci. Jeżeli jest nią 192.168.1.0, a interfejsem ppp jest 192.168.1.1, skrypt ip-up na zdalnej maszynie powinien wyglądać podobnie do tego:

#!/bin/bash
case $2 in
   /dev/ttyS1)
   /sbin/route add -net 192.168.1.0 gw 192.168.1.1 netmask 255.255.255.0
   ;;
esac

Bity ,,case $2'' i ,,/dev/ttyS1'' są tam na wypadek gdybyś używał więcej niż jednego połączenia ppp. Ip-up będzie uruchamiany za każdym razem kiedy pojawi się połączenie, ale tylko część pomiędzy ,,/dev/ttySx'' i ,,;;'' zostanie wykonana, ustawiając poprawny routing dla poprawnego ttyS. Możesz dowiedzieć się więcej o routingu z sekcji o routingu NET-3-HOWTO.

3.2 Testowanie

Przetestuj to wszystko tak jak modemy. Jeżeli działa, wsiądź na rower i przewieź modem na drugą stronę połączenia.


Następna strona Poprzednia strona Spis treści