Następna strona Poprzednia strona Spis treści

15. Zautomatyzowanie połączenia - tworzenie skryptów do nawiązywaniapołączenia

Skrypt o którym mowa automatyzuje procedurę logowania się i uruchamiania połączenia PPP, tak aby administrator lub członek grupy PPP do zestawienia połączenia musiał jedynie eydać polecenie ppp-on.

15.1 Skrypty w przypadku weryfikacji Identyfikatr//Hasło

Jeśli twój dostawca nie korzysta z PAP/CHAP, te skrypty są dla ciebie.

Jeśli pakiet PPP jest zainstalowany poprawnie powinieneś być w posiadaniu dwóch przykładowych plików. W przypadku PPP 2.1.2 będą to

/usr/sbin/ppp-on
/usr/sbin/ppp-off

a w przypadku PPP-2.2

/etc/ppp/scripts/ppp-off
/etc/ppp/scripts/ppp-on
/etc/ppp/scriptsppp-on-dialer

Jeśli korzystasz z PPP 2.1.2 mocno namawiam cię do usunięcia tych plików. Są źródłem potencjalnych klopotów - nie mów mi że działają poprwnie - korzystałem z nich przez długi czas i rekomendowałem w pierwszej wersji tego dokuemntu.

Dla użytkowników PPP 2.1.2 przedstawiam LEPSZE wersje wzorcowe tych plików, pobrane z dystrybucjie PPP 2.2. Sugeruję skopiowanie i korzystanie z tych skryptów zamiast startych skryptów z wersji 2.1.2.

15.2 ppp-on script

Pierwszy z PARY skryptów, uruchamiający połączenie.


#!/bin/sh
#
# Script to initiate a PPP connection. This is the first part of the
# pair of scripts. This is not a secure pair of scripts as the codes
# are visible with the 'ps' command.  However, it is simple.
#
# These are the parameters. Change as needed.
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 them so that they will be available to 'ppp-on-dialer'
export TELEPHONE ACCOUNT PASSWORD
#
# This is the location of the script which dials the phone and logs
# in.  Please use the absolute file name as the $PATH variable is not
# used on the connect option.  (To do so on a 'root' account would be
# a security hole so don't ask.)
#
DIALER_SCRIPT=/etc/ppp/ppp-on-dialer
#
# Initiate the connection
#
#
exec /usr/sbin/pppd debug /dev/ttySx 38400 \
        $LOCAL_IP:$REMOTE_IP \
        connect $DIALER_SCRIPT

A oto skrypt ppp-on-dialer:-


#!/bin/sh
#
# This is part 2 of the ppp-on script. It will perform the connection
# protocol for the desired connection.
#
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

15.3 Poprawianie dostarczonych skryptów startowych

Ponieważ nowe skrtypty są podzielone na dwie częście, bedziemy je zmieniać po kolei.

Skrypt ppp-on

Muszisz zmienić ten skrypt podając TWÓJ identyfikator u teojego prowajdera, TWOJE haslo dla tego konta i numer telefonu TWOJEGO prowajdera.

Każdy z wierszy postaci TELEPHONE= tworzy zmienne którcy warość to tekst występujący po prawej stronie znaku '='. (oczywiście poza wierszami komentarza). Popraw wszystkei te wiersze, aby zawierały poprawną inforamcje na temat twojego konta u dostawcy internetu.

Jeśli w pliku /etc/ppp/options podajesz numery IP (jeśli potrzebujesz to robić) to USUŃ ze skryptów odpowiednie wiersze zawierające


        $LOCAL_IP:$REMOTE_IP \

Upewnij się również, że zmienna DIALER_SCRIPT wskazuje na pełną ścieżkę dostępu do skryptu, którego chcesz ostatecznie używać. Więc jeśli przeniosłeś ten skrypt w inne miejsce, lub zmieniłeś jego nazwę pamiętaj o poprawieniu informacji w pliku ppp-on.

Jeśli skonfigurowałeś pp-on poprawnie i twój serwer PPP korzysta z weryfikacj toższamości za pomocą pary identyfikator/hasło, nie musisz już modyfikować skryptu ppp-on-dialer!!!

Pomimo, że port szeregowy może być konfigurowany w plikach startowych systemu (/etc/rc.serial), stwierdziłem, że dobrym pomysłem jest ponowne skonfigurowanie portu szeregowego w skrypcie ppp-on. W ten sposób moge wykorzystywać modem do innych celów, i nie muszę pamiętać o konieczności sprawdzania aktualnej konfiguracji portu szeregowego.

Tuż przed wierszem uruchamiającym pppd dodaj


/bin/setserial /dev/cuaX spd_vhi

W ten sposób port szeregowy jest ostatecznie ustawiany za prędskość 115200 bps, zamiast 38400. Jest to poprawna prędkość dla modemów 28.8k (i szybszych). Jednakże wiele modemów 14.4k nie potrafi skonfigurować swojego interfejsu modem-kompueter na taką prędkość.

Sprawdź w dokumentacji modemu, jeśli maksymalna prędkość modemu wynosi 38400, korzystaj z polecenia


/bin/setserial /dev/cuaX spd_normal

Uruchamianie PPP po stronie serwera

Podczas gdy skrypt ppp-on-dialer jest dobry dla serwera, który automatycznie uruchamia pppd jak tylko zalogujesz się na serwerze, niektóre systemy wymagają jawnego uruchomienia PPP.

Jeśli w celu uruchomienia PPP na serwerze musisz wydać określone polecenie, MUSISZ poprawić skrypt ppp-on-dialer.

Na KOŃCU skryptu (po wierszu z hasłem) dodaj wiersz zawierający parę expect send - taką , która będzie oczekiwała na zachętę (uwaga na znaki o specjalnym znaczeniu w powłoce Bournea - np $ , [ lub ] (otwierający i zamykający nawais kwadratowy).

Kiedy chat rozpozna zachęte powłoki, musi wydać polecenie, które uruchamia PPP na serwerze twojego dostawcy.

W moim przypadku serwer PPP korzysta ze standardowego wiersza zachety powłaoki Bash


[hartr@kepler hartr]$

i wymaga aby w celu uruchomienia PPP na serwerze wydał polecenie


ppp

Zawsze dobrze jest przewidzieć możliwości pewnych pomyłek. Dlatego w moim przypadku używam


        hartr--hartr    ppp

To znaczy - jeśli nie doczekamy się zachęty w określonym czasie wyślij znak enter i czekaj na zachęte raz jeszcze.

Kiedy jesteś pewien, ze otrzymałeś zachętę , wyślij ciag 'ppp'.

Uwaga: pamiętaj o doadniu znaku \ na końcu wiersza, tak aby chat nadal myślał, że cały skrypt znajduje się w jednym wierszu!

Niestety część serwerów generuje bardzo zmienne zachęty! Być może będzisz musiał zalogować się kilkakrotnie za pomocą programu komunikacyjnego, zanim dokladnie zrozumiesz jak to jest i co można przyjąć za zachętę do wydania polecenia.

Skrypt ppp-on-dialer

To jest drugi ze skryptów, który ostatecznie zestawia połączenie PPP.

Uwaga: skrypt chat zawiera się zwykle w jednym wierszu. Znaki '\' pozwalają na kontynuwanie jednego logicznego wiersza skryptu przez wiele fizycznych wierszy pliku (aby człowiek mogł się w tym lepiej połapać) i nie tworzą same z siebie części skryptu.

Dobrze jest się temu przypatrzeć z bliska, abyśmy dobrze rozumieli co tu się dzieje.

15.4 Co to jest skrypt chat ...

Skrypt chat to sekwencja par "oczekiwany ciąg znaków " "ciąg znaków do wysłania". W szczególności zanim cokolwiek wyślemy ZAWSZE czegoś oczekujemy.

Jeśli mamy coś wysłać, BEZ wstępnego oczekiwania na cokolwiek, musimy użyć putsego napisu oczekiwanego (oznaczanego w skryptach tak: "") i podobnie jeśli czekamy na cos, lecz nie mamy zamiaru w odpowiedzi niczego wysyłać! Również w przypadku, napis składa się z kilku słów (np. NO CARRIER), musimy otoczyć napis apostrofami tak aby char rozpoznał go jako pojedynczy element.

Wiersz chat w naszym wzorcu wygląda następująco:-

Pwyższy skrypt ma sensowne możliwości radzenia sobie z niekturymi sytuacjami wyjątkowymi. Sam program chat ma znacznie większe możliwości, zapoznaj się ze stroną podręcznika, która go dotyczy (man 8 chat).

15.5 Skrypt chat dla połączeń wymagających weryfiakcaji PAP/CHAP.

Jeśli twój dostawca korzysta z możliwości PAP/CHAP, wtedy twój skrypt jest znacznie prostszy. Wszystko co muszisz zrobić to wybrać numer, poczekać na połączenie i pozwolić pppd na wejście do systemu i zestawienie połączenia PPP.


#!/bin/sh
#
# This is part 2 of the ppp-on script. It will perform the connection
# protocol for the desired connection.
#
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         ''                              \

15.6 Opcja debug i -f option_file programu pppd

Jak już to pokazaliśmy, w programie pppd istnieje możliwość włączenia wyprowadzania i rejestracji komunikatów odpluskiwających. Służy do tego opcja -d lub debug.

Podczas uruchamiania nowego połączenia PPP pozostaw w skrupcie opcję -d. (Ostrzeżenie: jesli masz mało wolnej przestrzeni dyskowej włączenie rejestracji odpluskwiających pppd może bardzo szybko zapełnić wolne miejsce i możesz mieć z tego powodu kłopoty - wystarczy aby nie udało ci się połączyć, a będziesz próbował nawiązać połączenie jescze przez kila minut).

Kiedy będziesz pewien, że wszystko działa poprawnie, możesz ją wtedy usunąc.

Jeśli swoj plik z opcjami ppp nazwałeś incaczej niż /etc/ppp/options lub /etc/ppp/options.ttySx możesz go uaktywnić podając jego nazwę w wierszu poleceń jako wartość opcji -f programu pppd - np.


exec /usr/sbin/pppd debug -f options.myserver /dev/ttySx 38400 \


Następna strona Poprzednia strona Spis treści