Weiter Zurück Inhalt

5. ISDN

5.1 Einleitung

In diesem Kapitel möchte ich beschreiben welche Hardware ich verwendet und getestet habe um meinen ISDN Zugang mit einigen Besonderheiten zum Laufen zu bringen, die wahrscheinlich viele andere User auch haben werden und wie ich das ganze konfiguriert habe.

5.2 Ablauf des Umstiegs

In der Vorbereitungszeit habe ich mir einen Zyxel-TA gekauft. Bedingungen für den TA waren:

Zuerst habe ich die Umstellung auf ISDN bestellt. Innerhalb weniger Tage wurde durch die Telekom die ISDN Verbindung hergestellt und die NT1 montiert.

Neben der NT1 habe ich meinen Terminaladapter Zyxel-LCD montiert und die beiden Geräte mit einem S0 Kabel verbunden. Dann wurden die Verbindung von einer der beiden a/b Buchsen des Zyxel zu der alten Telephonverkabelung im Haus wiederhergestellt und schon funktionierten alle Telephone und das Modem wie vor dem Umbau. Mit wenigen Stunden Unterbrechung haben alle analogen Komponenten wieder funktioniert. Sogar der analoge Internetzugang funktionierte wieder. Über das analoge Modem, die a/b Buchse des ISDN-TA, und die NT1 kam ich noch immer ins Internet.

Damit konnte ich nun in aller Ruhe einen kleinen Linux-PC in der Nähe des Zyxel TAs installieren und langsam einen Dienst nach dem anderen von der alten analogen Modemverbindung auf den neuen digitalen Zugang übernehmen. Durch die Erhaltung des analogen Zugangs konnte ich noch immer per E-Mail bei Kollegen anfragen oder im Internet blättern.

Der Clou war während der Inbetriebnahmephase konnte ich über den "neuen" PC, den ISDN-TA und den ISDN Zugang ins Netz einwählen, mit ifconfig die IP-Adresse auslesen und dann (gleichzeitig) mit dem analogen Modem und dem alten ISP einwählen und dann mit ping, telnet, rlogin, etc. den "neuen" Rechner "abklopfen". Mit nmap findet man damit schnell die noch offenen Schlupflöcher und kann die firewall hinter der ISDN Leitung abdichten.

5.3 Übersicht der eingesetzten Hardware

Von der Telekom wurde als Abschluß des Zweidraht vom Amt, ein Network-Terminator NT1 installiert. An den NT1 habe ich ein Zyxel-LCD angeschlossen.

Der Firewall/Gateway läuft auf einem Advantech 5820/L Der Winzling verschwindet unter dem ISDN-TA. Außerdem kommt er fast ohne bewegte Teile aus (abgesehen von der Harddisk, besitzt er keine Lüfter, etc.) und sollte daher mit hoher Verfügbarkeit glänzen. Der Stromverbrauch von ca. 10 W (auf der 220V Seite gemessen) hilft beim 24 Stundenbetrieb stromsparen. Das hilft vorallem bei der Diminsionierung einer USV.

5.4 wvdial

wvdial konfigurieren

Die wvdial Konfiguration geht am schnellsten indem Sie mit YAST die Files erstellen. Das geht bei SuSE wie folgt:

dort habe ich folgende Werte eingetragen:

        Telefonnummer: "194040"       
        Benutzerkennung: "<username>" 
        Passwort: "<password>"          
        [*] Automatische Nameserverkonfiguration - wenn möglich 
        (Tone-Dial) Wählverfahren               
        [*] Modem an Telefonanlage (kein Wählton)
        (PAP/CHAP) Einwahlmodus      
  

Für alle "nicht SuSE-User" sollte dann in /etc/wvdial.conf folgendes stehen. Auch SuSE-User sollten nocheinmal kontrollieren ob die wvdial.conf die folgenden Werte erhalten hat.

        [Dialer Defaults]
        Username = <username>
        Modem = /dev/ttyS0
        Password = <password>
        Init1 = ATZ
        # Erläuterung zu Init2:
        # B40 ... ppp async auf sync umsetzen
        # &O2 ... (O wie Oje ;-) ATDs, ATDPs, ATDTs werden zu ATDIs (ISDN-Call) umgesetzt 
        Init2 = ATB40&O2                                                                       
        Compuserve = 0
        Tonline = 0
        Dial Command = ATX3DT
        Phone = 194040
        Baud = 115200
        Auto DNS = 1
        Stupid Mode = 1
        New PPPD = 1
  

Nun ist man schon so weit, daß man den Zugang über ppp einmal ausprobieren kann, indem man in einem Fenster mit root Rechten das Kommando wvdial eingibt. Damit sollte über den ISDN-TA die ppp Verbindung aufgebaut werden.

Anmerkung: Der Init2 String muß händisch angepaßt werden und stimmt hier nur für das Zyxel omninet LCD. Bitte konsultieren Sie das Handbuch Ihres Terminaladapters. (Der INIT2 String der von den wvdial-tools bei mir eingetragen wurde, hat zu einigen Problemen geführt).

5.5 pppd

pppd konfigurieren

Bei der wvdial Konfiguration sollte von Yast schon die Datei /etc/ppp/pap-secrets generiert worden sein, in der am Ende des Files folgende Zeile stehen sollte:

   "<username>"    *       "<password>"   *
  

<username> und <passord> müssen mit Ihrer Teilnehmerkennung und Ihrem Passwort aus dem Provider-Kuvert übereinstimmen. Damit auch bei CHAP-Authentifizierung alles klappt, tippen Sie:

       cp /etc/ppp/pap-secrets /etc/ppp/chap-secrets
  

Damit wird dann sowohl für PAP, als auch für CHAP ein korrekter Eintrag mit Ihren Providerdaten gefunden. Achten Sie darauf, daß Sie danach Änderungen immer in beiden Files führen, damit Sie keine bösen Überraschungen erleben, wenn dann doch das Anmeldeverfahren durch Ihren Provider gewechselt wird.

Wenn die Verbindung läuft, kann man /var/log/messages schonen indem man den ppp-daemon ein bischen weniger verbose macht. Hierfür wird in /etc/ppp/options die Zeile debug hinter Kommentarzeichen gestellt:

   # Increase debugging level (same as -d). The debug output is written
   # to syslog LOG_LOCAL2.
   #debug
  

5.6 Terminaladapter

Dieses Kapitel soll Besonderheiten verschiedener TAs beschreiben.

Zyxel

Das Kapitel ISDN wird anhand eines externen Zyxel TA erklärt. Daher sind für die Zyxel TA IMHO keine speziellen Anmerkungen erforderlich.

Lasat Speed II

Reinhard Schlager <reinhard.schlager@jk.uni-linz.ac.at> brachte seinen Lasat Speed II Adapter mit folgender Einstellung zum laufen:

   Dial Command = ATX3 &B2DT
 

interne TAs

Nach einem Posting in der Newsgroup at.linux, erarbeitete Andreas Werschlan <andreas.werschlan@gmx.at> den Tip, wie wvdial auch mit internen TA verwendbar ist, wenn man wvdial.conf wie folgt gegenüber den obigen Einstellungen, ändert:

   Modem = /dev/ttyI0
   Init2 = AT&E(Deine MSN)  <--- MSN einfügen (ohne Klammern!)
   Dial Command = ATD   1. man startet sein Lieblings-Terminalprogramm (z.B. minicom)
 
Nähere Informationen zu den AT Befehlen und der "Modem Emulation" (natürlich keine richtige, es wird nur das serielle Interface simuliert) findet sich in /usr/src/linux/Documentation/isdn/README.

Bei SUSE-Distributionen kann der interne TA auch über YAST eingestellt werden, ohne ihn mit wvdial wie ein Modem zu betrieben:

   Administration des Netzwerks
   Hardware ins System integrieren
   ISDN Hardware konfigurieren
 
Jedoch dürfte es zur Zeit noch keine geeigneten Reconnect Mechanismen geben, um den 8 Stunden Timeout meines ISDN-Providers zu umgeben. Daher wird z. Zt. AFAIK zumeist die wvdial-Methode verwendet.

Hier noch einige Links zu internen TAs:

interne TAs

In der at.linux schrieb adi@selingers.com (adi) am 26.11.2001 im Beitrag <591f5097.0111260526.30ea04a2@posting.google.com> folgendes:

Ich habs geschafft, fritz!x usb unter suse 7.3 Anleitung:
1.  fxsuse7.2 von avm runterladen
2.  suse kernelquellen installieren
3.  fxsuse entpacken
4.  ins verzeichnis fritz wechseln
5.  datei install: zeile 11 auf KERNEL=2.4.10-4GB ändern
6.  als root: ln -s /usr/src/linux-2.4.10.SuSE /lib/modules/2.4.10-4GB
7.  als root: cp /boot/vmlinuz.version.h /lib/modules/2.4.10-4GB/build/include/linux/version.h
8.  im verzeichnis fritz/src.drv/ das makefile editieren:
    zeile 9:  CCFLAGS = -c $(DEFINES) -O2 -Wall -I /lib/modules/2.4.10-4GB/build/include
10. im verzeichnis fritz: make eingeben
11. cp fritz/src.drv/fxusb.o fritz/
12. ./install
13. rpm -i usbmgr-0.4.8-1.i386
14. pppd-2.4.0 installieren (pppd-2.4.1 funkt nicht)
15. "pppd call isdn/provider usepeerdns" und es funkt (die
    providerdateien einfach im verzeichnis 
    /etc/ppp/peer/isdn abändern)

thats ist

PS: die dateien die ihr benötigt, und einen anleitung für teledat ist auf http://ds9.esmartweb.com
   

5.7 pppd beim Booten starten:

Nun macht es aber keinen Spaß nach jedem Boot wieder die Modemverbindung mit dem Kommando wvdial neu zu starten. Daher fügt man in der Datei /etc/inittab die folgende Zeile ein:

   9:123:respawn:/bin/mywvdial tty9
  

Das Script /bin/mywvdial könnte wie folgt aussehen.

   #! /bin/bash

   # wvdial starter /bin/mywvdial
   #
   # Copyright (C) 1999 Heimo Schön <heimo.schoen@gmx.at>
   #
   # This program is free software; you can redistribute it and/or modify
   # it under the terms of the GNU General Public License as published by
   # the Free Software Foundation; either version 2, or (at your option)
   # any later version.
   #
   # This program is distributed in the hope that it will be useful,
   # but WITHOUT ANY WARRANTY; without even the implied warranty of
   # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   # GNU General Public License for more details.
   #
   # You should have received a copy of the GNU General Public License
   # along with this program; if not, write to the Free Software
   # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.


   # clear screen on tty9 an print startmessage
   clear > /dev/tty9
   echo mywvdial is starting at `date` on $HOSTNAME ... > /dev/tty9

   # do some logging and counting
   xx=`cat /tmp/wvdial_counter`
   expr $xx + 1 > /tmp/wvdial_counter
   echo $xx `date` >> /tmp/wvdial.log

   # start wvdial
   /usr/bin/wvdial Defaults 0< /dev/tty9 2>&1 3>&0 | tee -a /tmp/wvdial.out

   echo wvdial died at `date` >> /tmp/wvdial.log

   # sleep a little bit for not so fast restarting
   sleep 1

   # Die nachfolgenden Zeilen sind ein Sicherheitsnetz für
   # eventuell noch hängende pppd und wvdial Prozesse:
   # zuerst schießen wir mit Platzpatronen (vielleicht schreckt er sich ;-)
   /usr/bin/killall wvdial
   /usr/bin/killall pppd
   # und jetzt wird scharf geschossen
   /usr/bin/killall -9 wvdial
   /usr/bin/killall -9 pppd
  

wvdial hat sich aber trotzdem massiv dagegen gewehrt auf /dev/tty9 auszugeben. Daher habe ich noch das console-device verbogen:

   mv /dev/console /dev/console.old
   ln -s /dev/tty9 /dev/console
  

Dann noch einmal killen von wvdial, mywvdial und pppd (processids erhält man mit ps xafe oder man nimmt killall wvdial mywvdial pppd) und dann hat es endlich funktioniert, daß wvdial nur noch auf /dev/tty9 geschrieben hat.

5.8 route

In /etc/route.conf darf keine default-route gesetzt sein. Die Zeile

   # default                 192.168.0.1
  
ist daher hinter Kommentarzeichen # zu stellen. Die einzige Zeile in meiner route.conf ist
   192.168.1.0             0.0.0.0                 255.255.255.0           eth0
  

5.9 DNS-Cache

Nun ist es an der Zeit einen DNS-Cache zu aktivieren. Zwei Vorschläge hierzu finden Sie in den Kapiteln bind und DNSmasq (siehe dort).

5.10 firewall

Wenn man mit dem ISDN Zugang 24 Stunden online sein möchte, dann sollte man den Linux Rechner vor den 100 Millionen potentiellen Angreifern schützen. Dieser Schutzwall vor dem Internet wird firewall genannt.

Die Firewall habe ich aktiviert durch folgende Zeilen in /sbin/init.d/network (die Zeilen habe ich vor dem exit 0 eingefügt):

   # Firewall aktivieren (1.12.99 / Heimo)
   /sbin/ipchains -F
   /sbin/ipchains-restore < /etc/ipchains.default
   /sbin/ipchains -L > /tmp/ipchains.bootup
   # Firewall Ende
  

Setzen Sie die Variable »IP_FORWARD« in /etc/rc.config auf »yes«

Eine andere Variante für den Start der Firewall wäre in /sbin/init.d/boot.loacl die oben gezeigten Zeilen einzufügen. Welchen Weg Sie wählen, bleibt ganz Ihrem Geschmack überlassen.

Hierzu benötigt man noch eine Datei /etc/ipchains.default die wahrscheinlich 1:1 von mir übernommen werden kann:

   :input ACCEPT
   :forward ACCEPT
   :output ACCEPT
   -A forward -s 192.168.1.0/255.255.255.0                        -i ppp0      -j MASQ
   -A input -s 0.0.0.0/0.0.0.0             -d 0.0.0.0/0.0.0.0  80 -i ppp0 -p 6 -j ACCEPT    -y
   -A input -s 0.0.0.0/0.0.0.0             -d 0.0.0.0/0.0.0.0  22 -i ppp0 -p 6 -j ACCEPT    -y
   -A input -s 0.0.0.0/0.0.0.0             -d 0.0.0.0/0.0.0.0 113 -i ppp0 -p 6 -j ACCEPT    -y
   -A input -s 0.0.0.0/0.0.0.0 20          -d 0.0.0.0/0.0.0.0     -i ppp0 -p 6 -j ACCEPT    -y
   -A input -s 0.0.0.0/0.0.0.0             -d 0.0.0.0/0.0.0.0     -i ppp0 -p 6           -l -y
   -A input -s 0.0.0.0/0.0.0.0             -d 0.0.0.0/0.0.0.0     -i ppp0 -p 6 -j DENY      -y
  

(Anm.: Beim Ausdrucken bitte landscape wählen, da sonst u. U. rechts ein paar Spalten verloren gehen. Ich möchte aber nicht backslash umbrechen, da sonst möglicherweise die Newbies Probleme haben).

Wer diese Standardkonfiguration erweitern möchte, oder andere Verbindungen benötigt, sollte unbedingt das Firewall HOWTO gelesen haben, bevor er sich an die Konfiguration seiner Firewall wagt. Der Vollständigkeit halber sei noch erwähnt, daß obiges script /etc/ipchains.default nur eine "Idee" sein sollte wie andere Leute Ihre Firewall konfiguriert haben. Jeder gewissenhafte Betreiber eines High-speed Internetzugangs sollte sich des Risikos bewußt sein, und sich mit dem Script so weit auseinandersetzen, daß er einigermaßen versteht was es tut. Hierzu kann ich nur nocheinmal auf Firewall HOWTO verweisen.

5.11 /etc/ppp/ip-up

Das File /etc/ppp/ip-up wird vom pppd gestartet, wenn eine Verbindung hochkommt oder abgebaut wird. Das gibt uns die Möglichkeit, Dinge zu tun, sobald sind im Status unserer ppp-Verbindung etwas ändert. Da bei bei meinem Provider die Verbindung nur maximal 8 Stunden besteht und dann vom Provider gekappt wird, ist die Wiederherstellung der Verbindung vermutlich die interessantere Phase.

Ich will an dieser Stelle nur ein paar Ideen geben was man mit ip-up "treiben" kann. Es soll aber keine vollständige Liste sein.

Z. B. kann es sinn machen andere Kollegen oder sich selber im Büro mitzuteilen, über welche IP-Adresse man erreichbar ist. Symbolisch angedeutet ist nachfolgend die structur des ip-up scripts.

   :
case "$INTERFACE" in
ippp*)
   :
ppp*)
   :
    case "$BASENAME" in
    ip-up)
       :
  

Ich habe im case INTERFACE=ppp* und BASENAME=ip-up folgende Zeilen eingefügt (Die Zeile mit wwwoffle kann entfallen, wenn squid verwendet wird):

        /usr/bin/wwwoffle -online

        echo "http://$LOCALIP" | mail -s "http://$LOCALIP" anybody@anywhere
        echo "http://$LOCALIP" | mail -s "http://$LOCALIP" heimo@office


        case "$INTERFACE" in
          ppp0)
            su - <username> -c "/bin/push-index $LOCALIP"
          ;;
        esac

        su - <localuser> -c "/usr/bin/ssh -l <remoteuser> <ip-adr> <dosomething>"
  

Mit der ersten Zeile wird wwwoffle online geschaltet (siehe auch Kapitel wwwoffle.)

Per Mail wird die aktuelle IP-Adresse weitergeleitet (einmal an einen Kollegen anybody und ins Büro)

Es kann auch ein Script gestartet werden, daß z. B. eine neue Homepage mit der aktuellen IP-Adresse generiert und mit ftp irgendwo hinkopiert (hier mit push-index angedeutet). Für <username> fügen Sie jenen account-namen ein unter dem push-index laufen soll. (wie so ein Script push-index aussehen könnte, ist im Kapitel homepage beschrieben).

mit der letzten Zeile wird eine Secure-shell Verbindung symbolisch dargestellt, die auf einem anderen Rechner Funktionen ausführt.

5.12 Probleme beim Verbindungsaufban

Häufig haben die Rechner bei meinem Provider ein Problem beim Verbindungsaufbau. Manchmal funktioniert die automatische Einwahl bei meinem Provider wochenlang problemlos und dann bleibt oft mehrmals hintereinander der Verbindungsaufbau regelrecht stecken. IMHO wird beim Provider nach der Einwahl keine Authentizierung gestartet und dadurch kommt keine ppp-Verbindung zustande. Als workaround für dieses Problem hat sich folgendes script bewährt. Das Script gibte es hier für externe TAs:

    #! /bin/bash

    # checkisdn - check if isdn connection is up-and-running and kill
    #             wvdial, when no isdn found for more then 10 seconds
    #
    # Copyright (C) 1999 Heimo Schön <heimo.schoen@gmx.at>
    #
    # This program is free software; you can redistribute it and/or modify
    # it under the terms of the GNU General Public License as published by
    # the Free Software Foundation; either version 2, or (at your option)
    # any later version.
    #
    # This program is distributed in the hope that it will be useful,
    # but WITHOUT ANY WARRANTY; without even the implied warranty of
    # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    # GNU General Public License for more details.
    #
    # You should have received a copy of the GNU General Public License
    # along with this program; if not, write to the Free Software
    # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

    export ISDN_UNREACHABLE=`fping -t8500 195.3.96.67 | grep unreachable`
    if test -n "$ISDN_UNREACHABLE" ; then

      echo `date` : $ISDN_UNREACHABLE - 1st test >> /tmp/checkisdn.log
      sleep 10

      export ISDN_UNREACHABLE=`fping -t 8500 195.3.96.67 | grep unreachable`
      if test -n "$ISDN_UNREACHABLE" ; then
        echo `date` : $ISDN_UNREACHABLE - 2nd test >> /tmp/checkisdn.log

        # here you can do, what you think that should be done

        # User with external TAs can do this:
        killall wvdial

      fi

    fi
  

Und hier gibt es noch den Vorschlag von Leo Eibler <leo_eibler@gmx.at> für interne TAs:

    #! /bin/bash

    # checkisdn - check if isdn connection is up-and-running and kill
    #             wvdial, when no isdn found for more then 10 seconds
    #
    # Copyright (C) 1999 Heimo Schön <heimo.schoen@gmx.at>
    #
    # This program is free software; you can redistribute it and/or modify
    # it under the terms of the GNU General Public License as published by
    # the Free Software Foundation; either version 2, or (at your option)
    # any later version.
    #
    # This program is distributed in the hope that it will be useful,
    # but WITHOUT ANY WARRANTY; without even the implied warranty of
    # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    # GNU General Public License for more details.
    #
    # You should have received a copy of the GNU General Public License
    # along with this program; if not, write to the Free Software
    # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

    export ISDN_UNREACHABLE=`fping -t8500 195.3.96.67 | grep unreachable`
    if test -n "$ISDN_UNREACHABLE" ; then

      echo `date` : $ISDN_UNREACHABLE - 1st test >> /tmp/checkisdn.log
      sleep 10

      export ISDN_UNREACHABLE=`fping -t8500 195.3.96.67 | grep unreachable`
      if test -n "$ISDN_UNREACHABLE" ; then
        echo `date` : $ISDN_UNREACHABLE - 2nd test >> /tmp/checkisdn.log

        # here you can do, what you think that should be done

        # User with internal TAs can do this:
        isdnctrl hangup ippp0
        /sbin/init.d/i4l stop
        /sbin/init.d/i4l_hardware stop
        /sbin/init.d/i4l_hardware start
        /sbin/init.d/i4l start
        isdnctrl dial ippp0
      fi

    fi
  

Wählen Sie nun das script aus, je nachdem ob Sie einen internen oder einen externen TA haben. Legen Sie es z. B. in die Datei /bin/checkisdn. Vergessen Sie nicht das Script exekutierbar zu machen mit:

    chmod a+x /bin/checkisdn
   

Um das script regelmäßig laufen zu lassen, wird folgende Zeile in die crontab eingefügt:

    0-59/3  * * * * root  test -x /bin/checkisdn       && /bin/checkisdn
   

Nun müssen Sie nur noch cron neu starten und schon wird alle 3 Minuten überprüft ob die Einwahl hängegeblieben ist. Wird länger als 10 Sekunden keine Verbindung zum Provider gefunden, wird die ISDN-Verbindung geschlossen und eine neue Einwahl gestartet.


Weiter Zurück Inhalt