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.
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.
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.
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).
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
Dieses Kapitel soll Besonderheiten verschiedener TAs beschreiben.
Das Kapitel ISDN wird anhand eines externen Zyxel TA erklärt. Daher sind für die Zyxel TA IMHO keine speziellen Anmerkungen erforderlich.
Reinhard Schlager <reinhard.schlager@jk.uni-linz.ac.at> brachte seinen Lasat Speed II Adapter mit folgender Einstellung zum laufen:
Dial Command = ATX3 &B2DT
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:
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
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.
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
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).
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.
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.
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.