ISDN to system telefonii cyfrowej dostępny już na rynku od dłuższego czasu. Urządzenia do jego obsługi mogą występować w kilku formach:
terminale podłączane przez port szeregowy (rs232) albo ethernet
terminale w formie kart rozszerzeń (ISA/PCI)
Pierwszym etapem jest konfiguracja samej karty ISDN. Obecnie w jądrze Linuksa istnieją dwa podsystemy do obsługi urządzeń ISDN: isdn4linux oraz mISDN (modular ISDN). Konfigurację oprzemy na pierwszym z nich ponieważ jest standardowo dostępny w jądrach Debiana, natomiast mISDN wymaga kompilacji dodatkowych modułów.
Musimy odnaleźć moduł odpowiedni dla danej karty. Większość kart jest wspieranych przez moduł HiSax. Na podstawie pliku /usr/src/linux/Documentation/isdn/README.HiSax lub strony http://www.linuxpowered.com/html/editorials/isdn/hisaxreadme.html musimy odnaleźć odpowiedni identyfikator typu dla posiadanej karty (np. dla karty opartej na układzie HFC 2BDS0 PCI będzie to 35).
Lista przetestowanych kart: Sekcja 3.14.
W Debianie należy utworzyć plik w katalogu /etc/modprobe.d/ o nazwie np. isdn z zawartością:
options hisax protocol=2 type=35gdzie w miejsce 35 wpisujemy znaleziony typ. Po utworzeniu pliku można załadować moduł poleceniem:
modprobe hisax
W RedHacie tworzymy plik /etc/sysconfig/isdncard o zawartości:
MODULE=hisax RESOURCES="protocol=2 type=35"po czym restartujemy serwis isdn:
service isdn restart(musimy także pamiętać o tym, by serwis ten był ładowany w czasie uruchamiania komputera - możemy to zrobić np. przy użyciu narzędzia ntsysv).
Po tych operacjach karta terminala ISDN jest już gotowa do dalszej konfiguracji.
Należy zadbać o to, by były zainstalowane następujące pakiety:
isdnutils-base isdnlog ipppd(są one dostarczone z naszą dystrybucją).
Poniżej zamieszczamy zalecane odpowiedzi na pytania zadawane w trakcie instalacji tych pakietów:
isdnutils Na pytanie o ładowanie firmware'u - należy wybrać odpowiedź 'none'.
isdnlog Należy wybrać 'other' a następnie wpisać kod PL oraz wpisać numer kierunkowy.
ipppd Instalator pyta o numer telefonu, z którym będziemy się łączyć. Należy pozostawić wartość domyślną manual i ręcznie skonfigurować połączenie.
Po zakończeniu instalacji konieczne jest również poprawienie pliku /etc/isdn/isdn.conf ponieważ kod kraju ustawiany jest nieprawidłowo. Należy wpisać:
COUNTRYCODE = 48
Pliki konfiguracyjne ISDN znajdują się w katalogu /etc/isdn/. Z każdą kartą powiązane są dwa interfejsy ippp, które mogą być wykorzystywane niezależnie. Dla każdego interfejsu potrzebne są dwa pliki konfiguracyjne device.ipppX i ipppd.ipppX. Pierwszy z nich ustawia parametry urządzenia, drugi zawiera opcje dla daemona ipppd. Poniżej zamieszczamy przykładową konfigurację. Pliki te można również utworzyć przy pomocy narzędzia isdnconfig. Tworzy ono przykładową konfigurację, którą należy dostosować do własnych potrzeb.
Najpierw omówiona zostanie konfiguracja połączeń wychodzących. Zwykle sprawia ona mniej problemów może więc posłużyć do przetestowania karty.
Konfiguracja urządzenia device.ipppX
#!/bin/sh set -e # Adresy IP. # Jezeli sa przydzielane dynamicznie nalezy pozostawic wartosci # domyslne. W wypadku gdy sa statyczne nalezy je wpisac. LOCALIP=169.255.255.169 # IP klienta REMOTEIP=10.0.0.2 # IP serwera # Numery telefonow LOCALMSN=203123456 # numer lokalny REMOTEMSN=221345789 # numer serwera z kierunkowym, bez 0 # moze byc lista rozdzielona spacjami LEADINGZERO=0 # dodawane do numeru serwera # Tryb pracy urzadzenia, nie zmieniac. DIALMODE=auto # Czy ustawiac default route na to urzadzenie? DEFROUTE=1 # urzadzenie - ipppX devnums=`basename $0`; devnums=${devnums##device.ippp} device=ippp$devnums dowhat="$1" masterslave="$2" case "x$masterslave" in xmaster) master=true; slave=false;; xslave) master=false; slave=true; masterdevice="$3";; x) master=false; slave=false;; *) echo "Error, $0 called with unknown 2nd arg '$masterslave', aborting!" exit 1;; esac # Configuration (start) case "$dowhat" in start) [ -f /proc/sys/net/ipv4/ip_dynaddr ] && echo 5 > /proc/sys/net/ipv4/ip_dynaddr # Utworzenie interfejsu if $slave then isdnctrl addslave ${masterdevice} ${device} else isdnctrl addif ${device} fi # Ustawienie MSN isdnctrl eaz ${device} $LOCALMSN # Ustawienie numeru, pod ktory dzwonimy if [ ! -z "$REMOTEMSN" ]; then for MSN in $REMOTEMSN; do isdnctrl addphone ${device} out $LEADINGZERO$MSN done fi # Rozlaczanie po X sekund nieaktywnosci, 0 wylaczone isdnctrl huptimeout ${device} 0 # Enkapsulacja isdnctrl encap ${device} syncppp # Protokoly isdnctrl l2_prot ${device} hdlc isdnctrl l3_prot ${device} trans # Gadatliwosc isdn, UWAGA dotyczy wszystkich urzadzen isdnctrl verbose 2 # zwiazanie z deamonem ipppd bindnum=`expr $device : 'ippp\(.*\)'` || true if [ ! -z "$bindnum" ]; then isdnctrl pppbind ${device} $bindnum fi # KONFIGURACJA SIECI if ! $slave; then ifconfig ${device} $LOCALIP pointopoint $REMOTEIP netmask 255.255.255.255 set +e # ignore errors from here on route del -host $REMOTEIP ${device} 2>/dev/null route add -host $REMOTEIP ${device} # default route if [ "$DEFROUTE" = 1 ]; then route del default 2>/dev/null route add default netmask 0 ${device} fi fi # not slave if $slave then isdnctrl dialmode $device auto >/dev/null 2>&1 else isdnctrl dialmode $device $DIALMODE >/dev/null 2>&1 fi ;; # Usuwanie interfejsu stop) set +e isdnctrl dialmode $device off >/dev/null 2>&1 if ! $slave; then route del $REMOTEIP $device 2> /dev/null # usuwanie default route if [ "$DEFROUTE" = 1 ]; then route del default netmask 0 2>/dev/null fi ifconfig $device down 2> /dev/null isdnctrl delif $device 2> /dev/null fi ;; *) echo "Usage: $0 {start|stop}" exit 1 ;; esac exit 0W docelowym pliku należy ustawić:
numery telefonów w zmiennych LOCALMSN i REMOTEMSN - odpowiednio lokalny i zdalny,
adresy ip - jeśli są znane, w przeciwnym wypadku pozostawić domyślne,
czy urządzenie ma być wykorzystywane jak domyśla brama (zmienna DEFROUTE).
Konfiguracja daemona ipppd ipppd.ipppX
# Komunikaty daemona debug # wlacz dodatkowe komunikaty kdebug 1 # poziom logowanych komunikatow lcp-restart 1 # Set timeout for LCP # Autoryzacja user ppp # nazwa uzytkownika noauth # # Kompresja wylaczona noccp nolzs # Adresy IP noipdefault netmask 255.255.255.255 # Routing nohostroute # nie ustawiaj routingu #usepeerdns # uzyj serwerow dns podanych przez interfejs mru 1524 # maksymalny rozmiar odbieranych pakietow mtu 1500 # maksymalny rozmiar wysylanych pakietow ipcp-accept-local # Accept peer's address for us ipcp-accept-remote # Accept peer's address for itPrzedstawione ustawienia powinny umożliwić nawiązanie połączenia. Konieczne jest ustawienie nazwy użytkownika (user) oraz dodatnie wpisu z hasłem do pliku /etc/ppp/pap-secrets w postaci:
nazwa_użytkownika * hasło *na przykład:
ppp * ppp *Nie należy dodawać opcji defaultroute nawet gdy połączenie ISDN będzie podstawowym łączem. Routing ustawiany jest przez skrypt device.ipppX. Do bardziej zaawansowanej konfiguracji routingu wykorzystuje się skrypty:
/etc/ppp/ip-up.d/00-ipppd /etc/ppp/ip-down.d/99-ipppd
Konfiguracja urządzania device.ipppX
#!/bin/sh set -e # Adresy IP. LOCALIP=192.168.8.1 # IP serwera REMOTEIP=192.168.8.8 # IP klienta # Numery telefonow LOCALMSN=203123456 # numer serwera bez 0 REMOTEMSN='*' # akceptowane numery klientow, * - wszystkie LEADINGZERO=0 # dodawane do numeru serwera # Tryb pracy urzadzenia, nie zmieniac. DIALMODE=auto # Czy ustawiac default route na to urzadzenie? DEFROUTE=0 # urzadzenie - ipppX devnum=`basename $0`; devnums=${devnum##device.ippp} device=ippp$devnum dowhat="$1" masterslave="$2" case "x$masterslave" in xmaster) master=true; slave=false;; xslave) master=false; slave=true; masterdevice="$3";; x) master=false; slave=false;; *) echo "Error, $0 called with unknown 2nd arg '$masterslave', aborting!" exit 1;; esac # Configuration (start) case "$dowhat" in start) [ -f /proc/sys/net/ipv4/ip_dynaddr ] && echo 5 > /proc/sys/net/ipv4/ip_dynaddr # Utworzenie interfejsu if $slave then isdnctrl addslave ${masterdevice} ${device} else isdnctrl addif ${device} fi # Ustawienie MSN isdnctrl eaz ${device} $LOCALMSN # Ustawienie numeru, pod ktory dzwonimy if [ ! -z "$REMOTEMSN" ]; then for MSN in $REMOTEMSN; do isdnctrl addphone ${device} out $LEADINGZERO$MSN done fi # Rozlaczanie po X sekund nieaktywnosci, 0 wylaczone isdnctrl huptimeout ${device} 0 # Enkapsulacja isdnctrl encap ${device} syncppp # Protokoly isdnctrl l2_prot ${device} hdlc isdnctrl l3_prot ${device} trans # Gadatliwosc isdn, UWAGA dotyczy wszystkich urzadzen isdnctrl verbose 2 # zwiazanie z deamonem ipppd bindnum=`expr $device : 'ippp\(.*\)'` || true if [ ! -z "$bindnum" ]; then isdnctrl pppbind ${device} $bindnum fi # KONFIGURACJA SIECI if ! $slave; then ifconfig ${device} $LOCALIP pointopoint $REMOTEIP netmask 255.255.255.255 set +e # ignore errors from here on route del -host $REMOTEIP ${device} 2>/dev/null route add -host $REMOTEIP ${device} # default route if [ "$DEFROUTE" = 1 ]; then route del default 2>/dev/null route add default netmask 0 ${device} fi fi # not slave if $slave then isdnctrl dialmode $device auto >/dev/null 2>&1 else isdnctrl dialmode $device $DIALMODE >/dev/null 2>&1 fi ;; # Usuwanie interfejsu stop) set +e isdnctrl dialmode $device off >/dev/null 2>&1 if ! $slave; then route del $REMOTEIP $device 2> /dev/null # usuwanie default route if [ "$DEFROUTE" = 1 ]; then route del default netmask 0 2>/dev/null fi ifconfig $device down 2> /dev/null isdnctrl delif $device 2> /dev/null fi ;; *) echo "Usage: $0 {start|stop}" exit 1 ;; esac exit 0Podobnie jak przy połączeniach wychodzących należy ustawić prawidłowy numer telefonu linii, do której podłączony jest modem, oraz adresy IP. Zmienna REMOTEMSN odpowiada za numery, z których połączenia będą akceptowane. * oznacza, że przyjmowane będą wszystkie połączenia.
Uwaga! Komunikaty
kernel: isdn_net: ippp0: No phone number, signalling dst_link_failure ... kernel: isdn_tty: Incoming call without CPN, assuming '0' kernel: isdn_tty: call from 846385042 -> 0 ignoredoznaczają, że modem odbierający połączenie nie otrzymuje informacji pod jaki numer dzwoni modem nawiązujący połączenie. W tej sytuacji należy ustawić LOCALMSN na 0.
Konfiguracja daemona ipppd.ipppX
# Komunikaty daemona debug # wlacz dodatkowe komunikaty kdebug 1 # poziom logowanych komunikatow lcp-restart 1 # Set timeout for LCP # Autoryzacja auth +pap # Kompresja wylaczona noccp nolzs # Adresy IP 192.168.8.1:192.168.8.8 # serwer:klient netmask 255.255.255.255 # Routing nohostroute # nie ustawiaj routingu #usepeerdns # uzyj serwerow dns podanych przez interfejs mru 1524 # maksymalny rozmiar odbieranych pakietow mtu 1500 # maksymalny rozmiar wysylanych pakietowPrzed uruchomieniem należy sprawdzić czy adres IP w pliku device.ipppX jest zgodny z ipppd.ipppX.
Poniżej omówiona zostanie konfiguracja dla systemu RedHat 7.3. Ten sposób konfiguracji może być również wykorzystany jako alternatywa dla Debiana w wypadku, gdy podany wyżej opis nie zadziała.
Mając skonfigurowany terminal, możemy spróbować połączyć się z czymś na zewnątrz. Do połączenia się z naszym ulubionym dostawcą (TPSA - numer 0-202422) można wykorzystać następujący skrypt (/opt/szarp/bin/isdn-up-out.sh):
#!/bin/sh if [ x$1 = x ]; then devicenum=0 device=ippp0 else devicenum=$1 device=ippp$1 fi #numer telefonu number=0202422 #konfiguracja dla dial-out isdnctrl addif $device isdnctrl addphone $device out $number isdnctrl huptimeout $device 0 isdnctrl l2_prot $device hdlc isdnctrl l3_prot $device trans isdnctrl encap $device syncppp /usr/sbin/ipppd \ user ppp \ ipcp-accept-local ipcp-accept-remote noipdefault lock \ mru 1500 mtu 1500 usepeerdns useifip \ /dev/$device isdnctrl pppbind $device $devicenum ifconfig $device upi możemy go wywołać np. tak:
/opt/szarp/bin/isdn-up-out.sh 0
Musimy jeszcze skonfigurować hasło dla użytkownika ppp. Robimy to poprzez dodanie do pliku /etc/ppp/pap-secrets linijki:
ppp "*" pppW tym momencie terminal już jest skonfigurowany do połączeń z tpsa. W celu dokonania właściwego połączenia wywołujemy komendę:
isdnctrl dial ippp0Możemy jeszcze ustawić właściwy routing:
route add default ippp0Jeśli będziemy chcieli się rozłączyć, to wystarczy wywołać coś takiego:
isdnctrl hangup ippp0
Uruchomienie połączeń przychodzących wymaga trochę innego skryptu: (/opt/szarp/bin/isdn-up-in.sh):
#!/bin/sh if [ x$1 = x ]; then devicenum=0 device=ippp0 else devicenum=$1 device=ippp$1 fi #konfiguracja dla dial-in isdnctrl addif $device isdnctrl eaz $device 19 isdnctrl addphone $device in "*" isdnctrl huptimeout $device 0 isdnctrl l2_prot $device hdlc isdnctrl l3_prot $device trans isdnctrl encap $device syncppp /usr/sbin/ipppd \ auth +pap \ proxyarp netmask 255.255.224.0 192.168.8.1:192.168.8.8 \ mru 1500 mtu 1500 usepeerdns useifip \ /dev/$device isdnctrl pppbind $device $devicenum ifconfig $device upWywołujemy go podobnie jak poprzedni:
/opt/szarp/bin/isdn-up-in.sh 0Musimy jeszcze skonfigurować hasło dla użytkownika ppp. Robimy to poprzez dodanie do pliku /etc/ppp/pap-secrets linijki:
ppp "*" pppW tym momencie terminal już jest skonfigurowany do przyjmowania połączeń przychodzących.
Może się także zdarzyć, iż chcemy, by na danej maszynie istniały obydwie konfiguracje. Wtedy wystarczy, iż wywołamy coś takiego:
/opt/szarp/bin/isdn-up-out.sh 0 /opt/szarp/bin/isdn-up-in.sh 1
W tym momencie powinniśmy już mieć możliwość jednoczesnego dzwonienia i przyjmowania połączeń.
Jeśli chcemy, by połączenia były konfigurowane przy starcie systemu musimy dodać wywołania skryptów isdn-up-*.sh do /etc/rc.local (RedHat). Możliwe jest jednoczesne używanie połączeń przychodzących i wychodzących. Należy tylko zadbać aby numer urządzeń w wywołaniach skryptów były różne (np. 0 - wychodzące, 1 - przychodzące).
W Debianie uruchomienie połączeń przy starcie systemu można uzyskać tworząc skrypt/etc/isdn/device.ipppX o następującej zawartości:
#!/bin/sh #prefix - skąd skrypty do isdn (kopiowane z palca) prefix= #dir - kierunek (in/out) dir=out #id - nr device'a (0/1 - ippp0/ippp1) id=0 case "$1" in start) /opt/szarp/$prefix/isdn-up-$dir.sh $id ;; stop) /opt/szarp/bin/isdn-down.sh $id ;; *) echo "$0: (start|stop)" exit 1 ;; esacW miejsce X i do zmiennej id przypisujemy numer urządzenia. By przetestować konfigurację wywołujemy:
invoke-rc.d isdn restart
Poprzedni | Spis treści | Następny |
Instalacja i konfiguracja CDI | Początek rozdziału | Konfiguracja połączeń z Internetem przez Sferię |