Paweł Skonecki e-mail: stona@fizyka.umcs.lublin.pl
Wstęp
Dokument ten opisuje, jak za pomocą Linuxa ustawić połączenie zwrotne przy pomocy modemu.
Program callbeck opracował Gert Doering, <gert@greenie.muc.de>.
Chciałbym podziękować Annie za wyrozumiałość dla pingwinów.
Opinie.
Czekam na wszystkie opinie, czy to dobre, czy złe, na temat zawartości tego dokumentu. Starałem się, aby informacje w nim umieszczone były jak najbardziej pewne i dokładne. Daj mi znać gdy znajdziesz jakieś błędy.
Dziękujemy ludziom którzy przysłali by poprawki lub sugestie. Ich wkład uczynił ten dokument o wiele lepszym, niż gdybym tworzył go sam. Wysyłaj komentarze, sugestie i poprawki na adres email autora podany powyżej. Nie mam nic przeciwko odpowiadaniu na pytania, jednak radzę najpierw przeczytać dokument w całości.
Rozpowszechnianie.
Copyright ? 1999 by Paweł Skonecki. Ten
dokument może zostać rozpowszechniany na warunkach ustalonych przez Licencję
Linux Documentation Project. Skontaktuj się z autorem, jeśli nie jesteś
w stanie otrzymać licencji.
Ta dokumentacja jest darmowa. Jest rozpowszechniana
z nadzieją, że okaże się użyteczna, jednak bez żadnej gwarancji.
Part I A może sieć w domu ...
Większość z nas używa sieci korporacyjnych lub uczelnianych w swoim
miejscu pracy. Pojawia się jednak potrzeba skorzystania z sieci w domu
lub w innym miejscu. Może przecież okazać się iż pracownicy będący w terenie
muszą mieć dostęp do danych znajdujących się w Internecie lub też
w sieci firmowej. Możemy mieć też do czynienia z sytuacją kiedy firmie
będzie opłacać się zapłacić pracownikom za połączenia telefoniczne aby
pracowali w domach. Sądzę że optymalnym rozwiązaniem jest zainstalowanie
na serwerze z Linuxem i oprogramowania typu callback.
Callback to nic innego jak oddzwanianie
pod wskazany numer na koszt firmy. Spróbuję przedstawić jego działanie.
Osoba posiadająca odpowiednie uprawnienia dzwoni pod numer modemu będącego
w serwerze z Linuxem, tam weryfikuje się po raz pierwszy. Wtedy po stronie
użytkownika następuje "zawieszenie modemu" na stan oczekiwania. W tym czasie
serwer dzwoni po wskazany numer. Użytkownik weryfikuje się powtórnie. Następuje
zestawienie połączenia a impulsy bij ,a po stronie serwera (czyli w firmie),
osoba do której oddzwania serwer płaci jedynie za zainicjowanie połączenia.
Podwójna weryfikacja oraz dodatkowe parametry
w programie callback uniemożliwiaj by osoby nie powołane wtargnęły na nasz
rachunek. Można także ograniczyć osobom korzystającym z tej usługi do dostęp
do sieci wewnętrznej lub też całego Internetu. Callback jest elastyczny
i pozwala na wiele opcji w stosunku do osób go używających.
W poniższym mini- HOWTO postaram się przedstawić
konfigurację serwera callback na Linuxe wytłumaczę jak dostosować swoją
maszynę do odbierania połączeń.
Part II Pierwsze kroki z modemem.
Aby wszystko zadziałało jak należy potrzebujemy niezłego modemu do naszego serwera z Linuxem. W tej mierze istniej ,a różne preferencje administratorów i nie można wskazać tutaj żadnej marki jako faworyta. Warto jednak pamiętać przyzakupie o pewnych zasadach jakimi należy się kierować.
* Nie powinniśmy kupować pod żadnym pozorem modemów typu WinModem ponieważ nie zadziałają one z Linuxem.
* Modem zewnętrzny jest szybszy od urządzenia wewnętrznego ponieważ w ograniczonym zakresie korzysta z zasobów komputera. Ich wad ,a natomiast jest to iż zajmuj, a one com-a co może potem utrudniać podłączanie następnych urządzeń korzystających z com-ów.
* Warto zainwestować modem w standardzie v.90 ponieważ daje on możliwość szybszej pracy chociaż nie zawsze się to udaje to udaje na słabych łączach.
* Jeżeli już modem wewnętrzny to lepiej z szyna ISA jak PCI ponieważ szkoda złącza PCI na modem
* Nie zaleca się także modemów typu Plug&Play, jeżeli już jest taki należy wyłączyć opcję Plug&Play i nastawić w nim wzorki na następnego wolnego coma.
Jeżeli mamy już modem który będziemy wykorzystywać
do komunikacji pomiędzy serwerem a osobami do niego dzwoniącymi. Musimy
go zainstalować go w systemie. Aby to zrobić musimy sprawdzić na jaki com-ie
jest nastawiony modem i czy nie pokrywa się z już wykorzystywanym. Jeżeli
tak jest to trzeba przestawić modem na kolejny wolny com.
Instalacja jest prosta i nie powinna nastręczać
problemów. Wystarczy że będziemy się trzymać zasad jakie istniej ,a w systemie.
Aby Linux "zobaczył" modem należy poprowadzić
połączenie symboliczne z com-a do urządzenia /dev/modem. Przykładowo jeżeli
mamy modem na com 2 piszemy.
ln -s /dev/cua1 /dev/modem
sprawdzamy teraz komenda ls -l czy wszystko jest w porządku
lrwxrwxrwx 1 root root 4 Dec 28 15:28 modem -> cua1
Jeżeli wynik jest jak powyżej to oznacza .ze tak właśnie się stało. Jeżeli modem znajduje się na innym com-ie winniśmy zastosować się do poniższych zasad i poprowadzić odpowiednie połączenie symboliczne.
/dev/cua0 to com1
/dev/cua1 to com2
/dev/cua2 to com3
/dev/cua3 to com4
Sprawdzamy teraz czy wszystko chodzi przy pomocy minicoma, który powinien znajdować się w większości dystrybucji. Przy jego pomocy dzwonimy pod jakikolwiek numer gdzie znajduje się modem. Teraz czas na dzwonienie do nas ....
Part III Zadzwoń do Linuxa.
Pierwszym krokiem w udostępnieniu usługi
callback na Linuxe jest ustawienie odpowiednich parametrów w jądrze systemu.
W tym celu musimy sprawdzić czy nasze jądro systemu obsługuje protokół
ppp. Jeżeli tak nie jest to powinno się w kompilować go w jądro systemu
albo pozostawić jako moduł do ładowania. Nie jest to miejsce na przedstawiane
tego problemu. Dlatego też proszę zapoznać się z Kernel-HOWTO.
Jeżeli już mamy odpowiednio przygotowane
jądro czas zabrać się za konfigurację oprogramowania. W tym celu winniśmy
zainstalować na naszym serwerze pakiet o nazwie mgetty-sendfax, ponieważ
on zawiera w sobie program do oddzwaniania. Nie jest to jego jedyna możliwość,
może także wysyłać fax-y oraz pracować jako access-server.
Tu warto wspomnieć o pracy callback-u.
Kiedy inicjujemy połączenie z serwerem następuje pierwotna weryfikacja
użytkownika. Poproszony jest on o wpisanie hasła a kiedy to uczyni następuje
"zawieszenie" modemu po stronie dzwoniącego a serwer oddzwania pod wskazany
numer związany z użytkownikiem. Jeżeli nastąpi połączenie następuje drugi
monit o username oraz hasło. Jeżeli wszystko
pójdzie dobrze to połączenie zostaje zestawione pomiędzy komputerem lokalnym
i zdalnym (user uruchomi protokół ppp po stronie serwera).
Tak więc cała operacja składa się z dwóch
elementów. Mamy więc do czynienia z dwoma rodzajami użytkowników: pierwszy
to użytkownik do callbacku a drugi to ten kóry ma uruchomić protokół ppp
po stronie serwera.
Najpierw zajmijmy się drugim z nich. Zakładamy
konto o dowolnym username testowo niech to będzie user pppuser.
pppuser:klkIOM89mn65H:230:PPP Dialin:/home/pppuser:/etc/ppp/ppplogin
Następnie zmieniamy mu hasło. Jak można
zauważyć nie ma on normalnego shall-a do logowania ale pliczek w /etc/ppp/ppplogin.
Musimy go własnoręcznie przygotować.
Przechodzimy do tego katalogu i przy pomocy jakiegokolwiek edytora
tworzymy plik i wprowadzamy odpowiednie parametry
np.: vi ppplogin. Wewnątrz niego wpisujemy.
#!/bin/sh
exec /usr/sbin/pppd -detach 192.168.1.1:192.168.1.2
gdzie adres 192.168.1.1 to adres serwera w którym jest modem a adres
192.168.1.2 to adres jaki przypisaliśmy naszemu
modemowi. Pamiętajmy nadać temu plikowi prawo wykonywania.
Ponieważ ppp domyślnie sprawdza co znajduje
się w pliku /etc/ppp/options musimy go stworzyć aby wpisać odpowiednie
wartości.
Podobnie jak w powyższym przypadku tworzymy
plik przy pomocy dowolnego edytora i wpisujemy odpowiednio:
netmask 255.255.255.0
proxyarp
lock
crtscts
modem
Najważniejsza z powyższych opcji jest proxyarp,
umożliwia on wyjście na świat poprzez modem w serwerze. Jej brak może być
korzystny jeżeli nie chcemy aby nasi pracownicy używali Internetu a jedynie
sieci lokalnej. Pozostałe z nich oprócz netmask (tego nie trzeba tłumaczyć),
dotyczą kontroli modemu.
Teraz przechodzimy do konfiguracji modemu
w systemie w taki sposób aby zaraz po jego starcie był gotowy do pracy
czyli odbierania połączeń.
Uruchamiamy dowolny edytor a w nim plik
/etc/inittab gdzie dopisujemy poniższą linę.
s1:2345:respawn:/sbin/mgetty ttyS1 -D /dev/ttyS1 vt100
jest ona prawidłowa dla modemów które znajduj ,a się na com2 jeżeli jest inaczej poprawiamy ją. Np dla com-a 1 wyglądać powinna
s0:2345:respawn:/sbin/mgetty ttyS0 -D /dev/ttyS0 vt100
Wykonujemy teraz polecenie init q i jeżeli
nie mamy informacji o błędach w logach sytemu przechodzimy do następnego
etapu.
Wracamy do katalogu /etc/ppp gdzie tworzymy
plik options.ttyS1 (jeżeli mamy modem na com 1 options.ttyS0) a w nim wpisujemy
adesy IP.
IP_localne:IP_dla_modemu_zdalnego
dla naszej sieci będzie to 192.168.1.1:192.168.1.2
Mamy już wiele przed zadzwonieniem do naszego
systemu, sprawdzamy co znajduje się w pliku /etc/mgetty+sendfax/login.config
Najważniejsza jest linia podobna do tej:
/AutoPPP/ - a_ppp /usr/sbin/pppd auth -chap +pap login detach kdebug 7 debug
Pozostałe możemy zaznaczyć znakiem #. Ważna spraw, a jest także nadanie odpowiedniego suida demonowi ppp, tak aby użytkownik pppuser mógł go uruchomić oraz podnieść na nim interfejs.
chmod u+s /usr/sbin/pppd
czego efektem będzie
-rwsr-xr-x 1 root root 106892 Jan 11 1999 /usr/sbin/pppd
Od tego momentu użytkownik pppuser będzie
mógł uruchomić demona ppp. Warto dopisać
zmianę preferencji pppd w cronie, u mnie po restarcie systemu dochodziło
do samoczynnej zmiany preferencji. Aby
zweryfikować nasze dokonania dzwonimy pod numer naszego serwera. Jeżeli
robimy to z Windows-o'w wywołujemy okno terminala a jeżeli wykorzystujemy
do tego Linuxa to poprawiamy skrypty z których korzystamy dzwoniąc do naszego
provaidera. Logujemy się do systemu jako pppuser z haslem mu nadanym. Mam
nadzieję że wszystko jest w porządku.
Part IV Teraz Linux dzwoni do mnie ...
Możemy dodzwaniać się już do naszego Linuxa.
Pora teraz na to aby on do nas zadzwonił. Nie wymaga to specjalnego już
wysiłku wystarczy wyedytować jeden plik. Zanim jednak to zrobimy musimy
zebrać numery telefonów od osób które maj ,a korzystać z tej usługi. Sprawdzamy
teraz czy w katalogu /etc/mgetty+sendfax znajduje się plik o nazwie callback.config.
Jeżeli tam się znajduje to pozostawiamy
go w spokoju. Można wypełnić go treścią ale nie ma najmniejszej potrzeby
ponieważ jego pusta zawartość nie ma wpływu na funkcjonowanie callbacku.
Ważne tylko aby tam był.
Teraz czas na wpisanie numerów telefonów
jakie wcześniej zebraliśmy. Będziemy kreować pseudo użytkowników powiązanych
z numerami ich telefonów.
W tym celu wpisujemy do pliku /etc/mgetty+sendfax/login.conf
linijkę tekstu podobną do poniższej
call - - /usr/sbin/callback - S 123456
gdzie call to pseudo użytkownik potrzebny do zainicjowania połączenia zwrotnego, a linia /etc/mgetty+sendfax/ uruchamia program który oddzwania pod wskazany numer (w tym przypadku jest to 123456). Podobnie czynimy z innymi użytkownikami przypisując pseudo użytkownikom poszczególne numery telefonów. Postaram się teraz wytłumaczyć jak całą operacja wygląda w praktyce. Gdy dzwonimy do naszego serwera ten prosi nas o weryfikację. Wtedy to logujemy się jako pseudo użytkownik, w tym przypadku call. Skrypt w naszym komputerze zawesza modem w oczekiwaniu a połączenie zostaje przerwane. Program callbeck zaczyna działać i oddzwania do nas. Weryfikujemy się powtórnie jako pppuser zestawiamy połączenie oraz postawienie interfejsu ppp na serwerze. I to już wszystko.
Czeka nas teraz skonfigurowanie stacji roboczych pracujących z naszym serwerem.
W przypadku Windows operacja jest dość prosta. Instalujemy Dial-up dla naszego numeru dostępowego a następnie we właściwościach modemu znajdujemy zakładkę "Właściwości" --> Rozszerzone ---> Ekstra gdzie wpisujemy
&c0 s0=1
Zamykamy okienko i dzwonimy. Logujemy się według opisu powyżej. Gdy chcemy zastosować Linux-a, to musimy odwołać się do skryptów. Trudno jest podać jakiś jeden dobry skrypt dla naszego Linuxa. Ważne jest to aby mieć dobrze skonfigurowane ppp w systemie (sprawdź to dzwoniąc jako pppuser najpierw przez skrypty).
Poniżej skrypty napisane przez A. Góździa. Najlepiej jak wsadzisz wszystko do katalogu /etc/ppp i tam będziesz odpalał swoje skrypty. Nie musisz tego koniecznie robić tego w tym miejscu jest to tylko moja sugestia. Dokładnie o pisaniu skryptów pod Linuxem możesz poczytać w PPP-HOWTO.
Najpierw jednak plik konfiguracyjny dla demona ppp (przykład dla modemu na comie 2).
/etc/options
lock
defaultroute
noipdefault
modem
/dev/cua1
33600
crtscts
debug
passive
asyncmap 0
I właściwe skrypty:
teksta="Polaczenie nieudane"
tekstb="Chyba bedziesz polaczony"
# /sbin/setserial /dev/cua1 spd_vhi
killall -INT pppd 2>/dev/null
rm -f /var/lock/LCK* /var/run/ppp*.pid
(/usr/sbin/pppd -detach /dev/ttyS1 115200 \
connect "/usr/sbin/chat -v -f /etc/ppp/pppcallback" &) || \
(echo $teksta; ls marsss >/dev/null; exit 1)
echo $tekstb
exit 0
TIMEOUT 60
ABORT 'ERROR'
ABORT 'BUSY'
ABORT 'NO ANSWER'
ABORT 'NO DIALTONE'
ABORT '\nVOICE\r'
ABORT '\nRINGING\r\n\r\nRINGING\r'
'' AT&FH0
'OK-+++\c-OK' 'AT&C0S0=1'
TIMEOUT 75
OK ATDT5376443
CONNECT ''
ogin:-ogin: ppp_pseudouser
'\nNO CARRIER\r' ''
TIMEOUT 180
'\nRING\r' AT&C1A
CONNECT ''
TIMEOUT 20
ogin:-ogin: pppuser
sword:-sword ppp
Powyższe trzy skrypty dwa skrypty powinny
wystarczyć dla prawidłowego funkcjonowania całości. Pozostaje teraz odpalić
ppp-call :)
Part V Podsumowanie.
Jak widać konfiguracja oddzwaniania nie jest skomplikowana i polega głównie na prawidłowym zestawieniu serwera ppp na Linuxie. Nie znam lepszej drogi na zrobienie acces-servera. Przedstawiona konfiguracja jest wynikiem prób i błędów, można zrobić ją całkowicie inaczej. Dlatego proponuję przejrzenie wszelkiej dokumentacji do tego zagadnienia to jest man pppd, NET3-HOWTO oraz PPP-HOWTO.
Callback może być przyjemną alternatywą
w pracy zdalnej.
Inne moje dokumenty znajdziesz
ftp://ftp.fizyka.umcs.lublin.pl/pub/priv/stona
Paweł Skonecki
e-mail: stona@fizyka.umcs.lublin.pl