Der Linuxserver als Einwahlrechner

Gliederung
1 Einleitung
2 Voraussetzungen
3 Einwahlrechner für eine Modemverbindung
3.1 Konfiguration des Modems
3.2 Anlegen eines Einwahlbenutzers
3.3 Einwahl nur zu bestimmten Zeiten ermöglichen
3.4 Weitere Systemeinstellungen für die Modemeinwahl
4 Einwahlrechner für eine ISDN-Verbindung
5 mehrere ISDN-Karten in einem Rechner
6 Sonstige allgemeine Systemeinstellungen
7 Sicherheitsaspekte

1 Einleitung

Ein Linuxrechner ist mit sehr einfachen Mitteln als Einwahlrechner zu konfigurieren. Einwahlrechner meint dabei nicht nur, daß mensch sich mittels eines Terminalprogramms auf den Rechner einwählen kann und dann dort wie auf einem lokalen Rechner arbeiten kann. Sondern hier geht es darum, daß der sich einwählende Rechner zu einem vollwertigen Mitglied des Netzes wird, in dem sich der Einwahlrechner befindet. Wenn dieses Netz über einen Internetzugang verfügt, steht dieser dann auch dem Einwahlrechner zur Verfügung. Zudem kann dem gesamten Netz hinter dem einwählenden Rechnern dieser Internetzugang ermöglicht werden, wenn dort "Masquerading" aktiviert ist. Details dazu sind in den vorhergehenden Seiten ausführlich beschrieben.
Im folgenden werden zwei verschiedene Konfigurationen beschrieben, einmal für eine Modemeinwahlverbindung und zum anderen eine für eine ISDN-Verbindung.

Das folgende Bild zeigt das Zugangsprinzip am Beispiel der Modemverbindung.

2 Voraussetzungen

Auf dem Einwahlrechner muß logischeweise Linux inclusive der Netzwerkoptionen installiert sein. Wenn der Einwahlrechner seinerseits in einem Netz hängt, muß er (ebenfalls logischerweise) über eine Netzwerkkarte verfügen. Dann benötigen wir noch ein Modem, damit sich andere Rechner hier einwählen können. Da in meinem Büro leider zu Beginn kein ISDN-Anschluß zur Verfügung stand, mußte ich mich anfänglich auf die Modemeinwahl beschränken. Die ISDN-einwahl konnte ich dann etwas später realisieren.

Als Pakete müssen mindestens installiert sein:
ppp
Für die Modem-Verbindung:
mgetty
Für die ISDN-Verbindung:
i4l
 

3 Einwahlrechner für eine Modemverbindung

3.1 Konfiguration des Modems

Das Modem sollten Sie bei der Systeminstallation einrichten, dann wird in der Datei /etc/rc.config für ein Modem an der ersten seriellen Schnittstelle (COM1 unter DOS) eine Zeile mit dem Inhalt
MODEM="dev/ttyS0"
bzw.
MODEM="dev/ttyS1"
für die zweite serielle Schnittstelle (COM2 unter DOS) eingerichtet. Und zudem wird im Verzeichnis /dev ein Link von der entsprechenden Datei auf die Datei /dev/modem erstellt. Wenn Sie ohne YaST arbeiten, tun Sie dies von Hand.

Dafür, daß das Modem bei Anruf abhebt, sorgt das Programm mgetty. Dieses Programm überwacht die serielle Schnittstellen. Es kann noch viel mehr, als "nur" eine ppp-Verbindung intiieren, aber das ist ein anderes Thema. Um mgetty regelmäßig beim Systemstart zu starten, muß die Datei /etc/inittab verändert werden. Öffnen Sie diese Datei mit einem Editor und suchen Sie nach den Zeilen
# modem getty
# mo:23:respawn:/usr/sbin/mgetty -s 38400 modem
entfernen Sie das Kommentarzeichen und passen Sie ggf. die Geschwindigkeitsvorgabe an. Wenn Sie ein schnelles Modem und eine entsprechende serielle Schnittstelle (mit einem Baustein vom Typ 16550A) können Sie dort auch die maximale Geschwindigkeit für aktuelle serielle Schnittstellen von 115200 einstellen.
mo:23:respawn:/usr/sbin/mgetty -s 115200 modem

Wenn diese Zeilen nicht zu finden sind, tragen Sie sie selbst dort so ein, wie oben beschrieben.

Wenn Sie vorgeben möchten, daß das Modem erst nach z.B. 6 Klingelzeichen abheben soll, tragen Sie noch den Parameter -n 6 ein.
mo:23:respawn:/usr/sbin/mgetty -s 115200 -n 6 modem
Das wäre eine Möglichkeit, das Modem und das normale Telefon gemeinsam an einer Leitung zu betreiben. Sie müssen nur den Wert für die Anzahl der Klingelzeichen so hoch setzen, daß ein normaler Anrufer mit großer Wahrscheinlichkeit aufgelegt hat (z. B. 6 oder 8). Diese Lösung hat aber den Nachteil, daß Sie zu Hause doch relativ lange auf die Verbindung warten müssen. Deshalb wird unten eine andere Lösung beschrieben.

Das war's bereits mit dem Modem. Nach einem Systemneustart müßte das Modem jetzt aktiv sein.

Ich bekomme häufiger Hinweise von Linux-Profis, daß natürlich hier kein vollständiger Systemneustart wie etwa unter Windows notwendig sei, sondern daß es ausreicht, den runlevel durch Eingabe von init 1 und danach von init 2 (bzw. init 3 bei grafischem Login) ausreicht. Ich denke, daß das den erfahreneren Benutzern klar ist, daß aber für die Neulinge der Neustart einfacher nachzuvollziehen ist.

3.2 Anlegen eines Einwahlbenutzers

Für die Einwahl definieren wir einen speziellen Benutzer. Dieser soll zu einer speziellen Gruppe im System gehören. Sagen wir zur Gruppe mit dem Namen "einwahl". Diese Gruppe legen wir an mit dem Befehl "groupadd einwahl" an. Dann legen wir den Benutzer einwahl_user an mit "useradd -g einwahl -s /etc/ppp/ppplogin einwahl_user". Die Besonderheit ist hier, daß für diesen User ein spezielles loginscript, nämlich die Datei /etc/ppp/ppplogin definiert wird. Das heißt, sobald sich dieser User im System einloggt, wird dieses Skript gestartet. Vergeben Sie noch ein Passwort für den Benutzer einwahl: passwd einwahl_user.
Das Skript hat folgenden Inhalt:

#!/bin/sh
exec /usr/sbin/pppd

Bei neueren Versionen von pppd gibt es eine unterschiedliche Behandlung von Optionen, die über die Kommandozeile angegeben werden und von denen, die in der Datei /etc/ppp/options stehen. Deshalb habe ich jetzt alle Parameter nur noch in der Datei stehen. Im Grunde könnte somit auch direkt /usr/sbin/pppd als Einwahlshell angegeben werden.

Diese Skript soll von allgemeinen Nutzern nur ausgeführt werden, aber nicht geändert werden  können. Deshalb stellen wir sicher, daß root der Eigentümer ist (chown root ppplogin) und setzen die entsprechenden Rechte (chmod 644 ppplogin).

Besonders wichtig sind in dieser Beispielskonfiguration die Rechte des Programms pppd.  Wir ordnen das Programm der Gruppe einwahl zu: chgrp einwahl /usr/sbin/pppd. Da das Programm in wichtige Systemdetails (v.a. das routing des Kernels) eingreift, muß es mit root-Rechten (suid) laufen. Also: chmod 4750 /usr/sbin/pppd.

Wichtig: Wenn Sie diese Konfiguration so durchführen wollen, dürfen Sie bei S.u.S.E. Distributionen YaST nicht in der Standarkonfiguration laufen lassen, da dieses die Rechte standardgemäß anders setzt, bzw. Sie müssen den entsprechenden Teil von SuSEConfig abschalten! Oder Sie müssen hinterher die Installation entsprechend überprüfen bzw. wiederherstellen. Falls hier die Rechte nicht richtig gesetzt sind, erhalten Sie in der Datei /var/log/messages eine entsprechende Meldung mit dem Inhalt "persission denied", wenn debugging eingeschaltet ist (s.u.).
Die einfachste Lösung ist, die Standardvorgabe für die Rechte der Datei /usr/sbin/pppd in der Datei /etc/permissions entsprechend zu ändern. Suchen Sie in dieser Datei nach der Zeile
/usr/sbin/ppd                root.dialout        4754
und ändern Sie diese in
/usr/sbin/ppd                root.einwahl        4750
(Danke für den Hinweis an Joerg Menke)

Sie können jetzt überprüfen, ob die Installation soweit funktioniert, indem Sie sich an einer der Konsolen als Benutzer "einwahl" einloggen. Wenn alles stimmt, sehen Sie nach einem kurzen Moment eine Reihe merkwürdiger Zeichen auf dem Bildschirm, unter den Zeichen finden Sie eine Menge von geschweiften Klammern. Was Sie da sehen, sind die Ausgaben von pppd, der versucht, mit Ihnen über die Details der ppp-Verbindung zu verhandeln. In der Regel beendet sich pppd dann nach erfolglosen Versuchen (Sie sind ja in diesem Moment kein Modem) von selbst. Andernfalls beenden Sie die Verbindung oder fahren Sie das System herunter.

In den man-pages ist auch beschrieben, daß der mgetty einen AutoPPP-modus beherrscht. Das heißt, daß der Prozeß, der sozusagen an der Telefonleitung lauscht, dann bei Anruf den pppd startet. Das hätte den Vorteil, daß das spezielle Einwahlscript für den Benutzer nicht notwendig wäre, aber ich habe das bei meinen Versuchen nicht zum Laufen bekommen. (Wenn da jemand eine laufende Konfiguration hat, wäre ich für einen Hinweis dankbar ...).

3.3 Einwahl nur zu bestimmten Zeiten ermöglichen

Wenn im Büro nur eine Telefonleitung zur Verfügung steht, an der das normale Telefon und das Modem parallel angeschlossen sind, können Sie dafür sorgen, daß der Einwahlrechner nur außerhalb der Bürostunden eine Verbindung zuläßt. Das Modemprogramm (mgetty) überprüft nämlich, bevor es abhebt, ob für die serielle Schnittstelle (in unserem Beispiel ttyS0) des Modems eine Datei nologin.ttyS0 im Verzeichnis /etc existiert. Wenn ja, wird nicht abgehoben, wenn nein, wird abgehoben.

Mit Hilfe des cron-Programms können wir dafür sorgen, daß Werktags zu Bürobeginn diese Datei erstellt wird und zu Büroende wieder gelöscht wird. Es gibt eine systemweite Datei für das Programm cron (/etc/crontab) und für jeden Benutzer/jede Benutzerin eine eigene. Bei meinem Einwahlserver habe ich in die systemweite Datei zwei Zeilen wie folgt eingetragen:
0 18 * * 1-5 root rm /etc/nologin.ttyS0
0  7 * * 1-5 root cp /etc/dummy /etc/nologin.ttyS0
Die erste davon bewirkt, daß um 18 Uhr und 0 Minuten mit der Benutzerkennung root der Befehl rm /etc/nologin.ttyS0 ausgeführt wird, das heißt die Datei /etc/nologin.ttyS0 gelöscht wird.
Die zweite bewirkt, daß um 7 Uhr und 0 Minuten diese Datei erstellt wird, indem eine Datei aus dem /etc-Verzeichnis entsprechend umkopiert wird. Diese Datei kann leer sein oder einen beliebigen Inhalt haben (Sie sollten wenigstens hineinschreiben, wofür sie gut ist, falls sich später einmal Alsheimer ankündigt). Das heißt, Sie müssen diese Datei erst einmal mit einem beliebigen Editor erstellen.

Achtung: Je nach Konfiguration von mgetty kann es auch sein, daß mgetty auf ihr Modem nicht über /dev/ttyS0 oder /dev/ttyS1 zugreift, sondern über den symbolischen Link /dev/modem. Wenn also obiges nicht funktionieren sollte, versuchen Sie es mit /etc/nologin.modem als Dateinamen.

3.4 Weitere Systemeinstellungen für die Modemeinwahl

Die lokale Netzwerkkarte muß natürlich richtig installiert sein und vernünftig laufen, wenn Sie auf das Netz zugreifen wollen, in dem sich der Einwahlserver befindet. Das setze ich im folgenden voraus.

Wichtig für das Modem-Einwahlsystem ist vor allem die Datei /etc/ppp/options.modem, in der die Details für das Programm pppd festgelegt werden. Ganz wichtig: Das PPP-System verlangt, daß eine Datei /etc/ppp/options im System vorhanden ist. Da aber diese Beschreibung so ausgelegt ist, daß parallel die Einwahl per Modem und per ISDN-Karte möglich sind und unterschiedliche Optionen für ISDN-Karte und Modem erforderlichj sind, hat diese hier keine Funktion.  Sie muß aber vorhanden sein! Deshalb sollten Sie eine Datei dieses Namens erstellen, die z.B. lediglich einen Kommentar enthält!
Wenn Sie nur eine einwahl per modem einrichten wollen, können Sie sich die Datei options.modem sparen und alles in die Datei options schreiben.
Die Datei des Einwahlservers ist nachfolgend kommentiert wiedergegeben (Kommentare beginnen mit einem #)

#
# Datei /etc/ppp/options.modem

# es sollen Meldungen über den Verbindungsaufbau in die Datei
# /var/log/messages geschrieben werden, die bei der Fehlersuche helfen
# wenn das Ganze läuft besser wieder herausnehmen, da die Datei sonst zu groß wird
debug
# benutze die modem control lines
modem
# benutze hardware flow control
crtscts
# alle Zeichen der Verbindung koennen genutzt werden
asyncmap 0
# Groesse der Uebertragungspakete fuer die Uebertragung
mtu 1500
# Groesse der Uebertragungspakete fuer Empfangen
mru 1500
# die beiden obigen Werte können bei schlechten Telefonleitungen verkleinert werden
# und liefern dann einen etwas besseren Durchsatz
#
# Spiegle dem System vor, die IP-Adresse des anrufenden Modems gehöre zum lokalen Netz
proxyarp
# Das angerufene System soll (passiv) auf Initiativen des anrufenden Systems warten
passive
# die ip-Nummern werden fest vorgegeben für die Modems lokal:remote
# bei kleinen Systemen sicher einfacher als dynamische ip-Zuweisung
192.168.2.40:192.168.2.41
# Wenn Sie die Sicherheit erhöhen wollen, dann sollten Sie Authentifizierung
# aktivieren. Das sicherste Verfahren (weil beidseitig) ist CHAP
# Dann sollten Sie folgende Zeilen einfügen:
require-chap
refuse-pap
# Etwas unsicherer ist Authentifizierung per PAP. Dann müssen Sie eine Zeile
# einfügen, die den Inhalt: require-pap heißt.
# Bei CHAP muß dann eine Datei /etc/ppp/chap-secrets
# PAP eine Datei /etc/ppp/pap-secrets vorhanden sein.
# Eine Beschreibung finden sie weiter unten.

Sie finden im Verzeichnis /etc noch ein Unterverzeichnis /mgetty+sendfax. Die dort bei der Systeminstallation eingerichteten Dateien dialin.config  login.config   mgetty.config  voice.conf habe ich nicht weiter verändert.

4 Einwahlrechner für eine ISDN-Verbindung

Die Konfiguration eines ISDN-Einwahlrechners ist nach meiner Meinung wesentlich einfacher als die eines Modem-Einwahlrechners. Das liegt zum einen daran, daß eine ISDN-Karte in einem Linuxsystem behandelt wird wie eine Netzwerkkarte. Das heißt sie hat eine IP-Nummer und ist anders als ein Modem als Gerät "ansprechbar", auch wenn keine Verbindung vorliegt. Zum anderen wird der spezielle ppp-Daemon (das Hintergrundprogramm für die ppp-Verbindung - ipppd) bei einer ISDN-Karte nur einmal beim Systemstart aktiviert und lauscht gewissermaßen ständig, ob auf die Karte zugegriffen wird. Er stellt dann die Verbindung her oder baut sie wieder ab. Das erspart uns hier die Hilfskrücke mit dem Einwahlbenutzer und dem speziellen Einwahlskript.

Die einfachste Lösung ist meiner Meinung nach, die ISDN-Karte zu Beginn so einzurichten, als wolle mensch eine Verbindung vom Server zum Client (zu dem Rechner, der sich einwählt) herstellen. Wir tun also so, als wäre es gerade andersherum als wir eigentlich wollen. Bei S.u.S.E. geschieht das am einfachsten mit dem Installationsprogramm YaSt. Das ist im Handbuch so deutlich beschrieben, daß ich mir hier Details spare.

Um jetzt aus dem Rechner einen Einwahlserver zu machen, müssen einige Dateien angepaßt werden.
Ich führe im folgenden nur die zu ändernden Details auf:

/etc/ppp/ip-up
Dieses Skript wird unter Linux immer aufgerufen, wenn eine ppp-Verbindung zustand kommt und wenn sie abgebaut wird. Bei einem Client, also einem Rechner, der sich woanders einwählt, wird vor allem im Abschnitt ip-up des Skripts das routing so gesetzt, daß die IP-Pakete dann in das fremde Netz weitergeleitet werden. Bei einem Server wäre das aber völliger quatsch. Das Routing muß hier so bleiben, wie vor der Einwahl.
Öffnen Sie die Datei /etc/ppp/ip-up und löschen Sie bis auf die Semikolons alles zwischen den Zeilen ip-up) und ip-down).
Eigentlich kann die Datei ganz gelöscht werden, aber der Rest schadet zumindestens nicht.

Der entsprechende Abschnitt der Datei sieht dann so aus:
    ...
    case "$BASENAME" in
    ip-up)
        ;;
    ip-down)
    ...

Dann müssen noch die PPP-Optionen für das Gerät ISDN-Karte geändert werden. Diese werden zum einen aus der systemweiten Datei /etc/ppp/options gelesen und zum zweiten dann aus der zur jeweiligen Karte gehörigen Konfigurationsdatei. Bei einer Karte ist das /etc/ppp/options.ippp0. Um ggf. später weitere Karten hinzufügen zu können, ist bei mir die Datei /etc/ppp/options bis auf eine Kommentarzeile ganz leer. Soweit ich weiß, muß diese Datei allerdings vorhanden sein, Löschen geht also nicht.
Die eigentliche Konfiguration erfolgt in
/etc/ppp/options.ippp0. die sieht so aus:

# /etc/ppp/options.ippp0
#Optionen für einen Einwahlserver
#
# basierend auf dem Originalskript von
# Klaus Franken, kfr@suse.de
#

# das "Gerät", hier die erste ISDN-Karte
/dev/ippp0

# ermöglicht, daß Einwahlrechner als Bestandteil des
# lokalen Netzes erscheint
# Diese Zeile muß eingefügt werden!
proxyarp
 

# wir geben die IP-Adressen fest vor:
192.168.2.40:192.168.2.41

# ein paar Systemeinstellungen
-vj
-vjccomp
-ac
-pc
-bsdcomp

# Größe der Pakete zum Empfangen
mru 1524
# Größe der Pakete zum Versenden
mtu 1500

Zum Austesten der Verbindungen sollte in der Datei /etc/ppp/ioptions das Debugging aktiviert werden. Dazu sollte das Kommentarzeichen vor der Zeile mit der anweisung debug entfernt werden. Das sorgt dafür, daß in der Datei /var/log/messages die Verbindungsversuche protokolliert werden. Wenn das Ganze funktioniert, sollte das Kommentarzeichen # wieder eingefügt werden.
# Set 'debug' to create a lot of information in /var/log/messages
debug

Im Prinzip war es das. Da der Einwahlrechner im konkreten Fall an einer größeren ISDN-Anlage hängt, protokolliert die Karte alle Wählverbindungen im Netz und müllt damit die Logdatei /var/log/messages voll. Um das zu unterbinden, habe ich in der Datei /etc/isdn/isdnlog.isdnctrl0.options die Zeile mit der Angabe syslog= geändert:

# Angabe der gewuenschten Meldungen, die in's syslog eingetragen
# werden sollen
# ist in der Standardeinstellung: syslog=1015
# will aber nur Errors (1), Warnings (2), Notice (4)
syslog=7
 

5 Mehrere ISDN-Karten in einem Rechner

Vorbemerkung: Im folgenden wird die Konfiguration von zwei ISDN-Karten beschrieben. Ich habe bereits diverse anfragen bekommen, warum hier eine zweite Karte benutzt wird und nicht der zweite Kanal der ISDN-Leitung. Der banale Hintergrund ist, daß in der Telefonanlage, die hier dahintersteht, nur ein Kanal pro ISDN-Dose geschaltet ist. Es ist also durchaus möglich, das folgende auch auf zwei Kanäle einer ISDN-Karte zu beziehen. Aber ich habe es mir zum Prinzip gemacht, nur das zu beschreiben, was ich selbst realisiert habe, deshalb bleibt es bei den zwei Karten im Text.

Es ist sehr einfach, in einen Linuxrechner mehrere ISDN-Karten einzubauen und die gleichzeitige Einwahl über diese zu ermöglichen. Es müssen lediglich genügend Steckplätze sowie unbenutzte Interrupts und IO-Adressen im Rechner vorhanden sein. Bei mir läuft das zur Zeit problemlos mit zwei Karten, wäre aber noch auf die selbe Weise leicht erweiterbar.

Leider ist die Konfiguration von mehreren Karten zumindestens für die SuSE-Distribution nirgendwo beschrieben und SuSE leistet hier zu meinem Ärger 8-(( nur kostenpflichtigen Support - dabei ist das Ganze sehr einfach.

Sie benötigen ISDN-Karten, bei denen Interrupt und IO-Adresse einstellbar sind. Bei mir sind das zwei Fritz-Card classic. Sie müssen für die zu installierenden Karten dann Kombinationen für diese Werte finden, die sich nicht überschneiden, die bei den Karten einstellbar sind und die nicht von anderen Karten im Rechner bereits belegt werden.
Die möglichen Werte der Karten finden Sie im Handbuch der Karte, die im Rechner belegten Werte, indem Sie an der Kommandozeile den Befehl cat /proc/interrupts und cat /proc/ioports eingeben.

Der Einfachheit halber habe ich die erste ISDN-Karte standardgemäß über YaST - wie oben beschrieben - konfiguriert und dann lediglich für die zweite Karte die entsprechenden Ergänzungen vorgenommen. Nachfolgend kommen also im wesentlichen die Ergänzungen und Veränderungen für die zweite Karte.

Sie müssen in der Datei /etc/rc.config die zweite ISDN-Karte als Netzdevice eintragen.
# Es gibt im Rechner 3 Netzinterfaces, die Netzkarte (_0) und die beiden ISDN-Karten (_1) (_2)
NETCONFIG="_0 _1 _2"
#
IPADDR_0="192.168.1.40"
IPADDR_1="192.168.1.41"
IPADDR_2="192.168.1.42"
# interne Namen der Netzwerkkarte(eth0) und der ISDN-Karten (ippp0, ippp1)
NETDEV_0="eth0"
NETDEV_1="ippp0"
NETDEV_1="ippp1"
#
IFCONFIG_0="192.168.1.40 broadcast 192.168.1.255 netmask 255.255.255.0 up"
IFCONFIG_1="192.168.1.41 pointopoint 192.168.1.40 up"
IFCONFIG_2="192.168.1.42 pointopoint 192.168.1.40 up"
 

Bei SuSE befinden sich die wesentlichen Konfigurationsdateien in diesem Zusammenhang seit der Version 6.0 in folgenden Verzeichnissen:
 
Verzeichnis Konfigurationsdateien Inhalt/Zweck
/etc/ppp options Grundkonfiguration der ppp-devices
options.ippp0, ippp1 usw. spezifische Konfiguration der einzelnen devices
ip-up bzw. ip-down Skript, das automatisch beim Verbindungsaufbau und -abbau gestartet wird
/etc/rc.config.d/ i4l_xxxx.config Konfigurationsdateien für die ISDN-Hardware
/etc/isdn isdnlog.xxx.options Konfigurationsdateien für ISDN-Details

Im folgenden also Hinweise zu den notwendigen Änderungen und Ergänzungen.

Dateien im Verzeichnis /etc/rc.config.d

Der erste Schritt ist die Konfiguration der Hardware. Die Hardwaredetails werden in der Datei /etc/rc.config.d/i4l_hisax.rc.config definiert. Wenn nur eine Karte im System ist, werden Dinge wie Interrupt, IO-Port usw. durch einzelne Zeilen festgelegt. Um mehrere Karten zu initialisieren, werden die Einstellungen für die Karten beim Laden des HiSax-Moduls als Parameter übergeben. SuSE wertet beim Start des Moduls dafür den Eintrag in der Zeile I4L_MODUL_OPTIONS= aus. Dort werden (in dieser Reihenfolge) angegeben: Kartentyp Protokoll IO-Adresse Interrupt Name, jeweils getrennt durch ein Leerzeichen und die Angaben für mehrere Karten jeweils getrennt durch ein Komma.

Meine Konfiguration sieht so aus:
I4L_MODUL_OPTIONS="type=5,5 protocol=1,1 irq=10,15 io=0x300,0x240 id=Fritz1%Fritz2"

Es ist zum einen nach meinem Eindruck ein Bruch in der Logik der anderen SuSE-HiSax-Konfigurationsdateien, wo ansonsten immer maximal vier devices vorkonfiguriert sind, zum anderen bin ich mir nicht sicher, ob es ggf. zu Problemen kommen kann, wenn in der obigen Zeile andere Werte für die erste Karte angegeben werden als in den "normalen" Konfigurationszeilen. Ich habe demnach nur die untere Zeile eingefügt und die anderen so gelassen wie sie waren.

Achten Sie bei den anderen Dateien in diesem Verzeichnis darauf, daß auch in der jeweiligen Zeile für das zweite device gültige Eintragungen stehen. Also z.B. in i4l_default.rc.config dann für den Wählmodus

#
I4L_DIALMODE_0="auto"
I4L_DIALMODE_1="auto"

usw. in den anderen Zeilen.

Anpassen müssen Sie auf jeden Fall die Eintragungen für die Telefonnummern der ISDN-Anschlüsse an denen die Karten hängen. Diese stehen in i4l_option.rc.config. Bei mir steht dort diesbezüglich:

#
I4L_LOCALMSN_0="18"
I4L_LOCALMSN_1="19"

Wichtig! Bei Telefonanlagen ist dies in der Regel nicht die vollständige von der Post zugewiesene MSN, sondern meist nur die Endziffer in der internen Anlage! Im Zweifelsfall bekommen Sie das heraus, wenn Sie den Anschluß, an der die Karte angeschlossen ist anrufen und die Einträge in die ISDN-Logdateien ansehen. Dort werden die Nummern aufgezeichnet.

Dies ist auch zu beachten, wenn Sie in der selben Datei definieren wollen, welche Nummern anrufen dürfen.Sie müssen dann
den Eintrag in den Zeilen I4L_SECURE_n auf on setzen und dann wieder die richtige Nummer eintragen.

I4L_SECURE_0="on"
I4L_SECURE_1="on"

In der Datei i4l_sp_option.rc.config müssen Sie noch eintragen, daß alle Karten jeweils an einen ippp-Daemon gebunden werden soll. Also:

I4L_PPPBIND_0="yes"
I4L_PPPBIND_1="yes"

Dateien im Verzeichnis /etc/isdn

Maßgeblich sind hier die Dateien isdnlog.isdnctrl0.options und zudem die Datei isdnlog.isdnctrl2.options. Letztere ist eine Kopie von /etc/isdn/isdnlog.isdnctrl0.options. Lediglich der Dateiname muß in isdnctrl2 (Etwas verrückt, daß das hier gleich auf die Nummer zwei springt, aber es ist in der Tat so)geändert werden und die Portnummer um einen erhöht werden.
Suchen Sie also in dieser Datei nach der Zeile mit dem Eintrag
port=
und tragen dort die nächstgrößere Zahl ein. Bei mir steht dort in isdnlog.isdnctrl0.options port=20011 und in isdnlog.isdnctrl2.options port=20012.

Dateien im Verzeichnis /etc/ppp

Kopieren Sie die bereits vorhandene Datei options.ippp0 unter dem Namen options.ippp1 (Eine genauere Beschreibung der options.ippp0 finden Sie in einem der oberen Abschnitte). Sie müssen zwei Zeilen ändern, die zum device und die für die IP-Nummer.

# Das Device ist für die zweite Karte ippp1
/dev/ippp1

# IP Addressen: <local>:<remote>
# Hier werden die IP-Adressen statisch zugewiesen
192.168.2.40:192.168.2.42

Die IP-Nummer für den lokalen Rechner bleibt gleich, aber der anrufende Rechner bekommt eine andere als beim device ippp0.

Testen der Konfiguration

Zum Testen können Sie bei laufendem Rechner das ISDN-System herunterfahren und wieder neu starten, indem Sie den Befehl /sbin/init.d/i4l restart eingeben. Sie können dann an der Konsole und in der Datei /var/log/messages nachsehen, ob es Probleme gegeben hat.

Besondere Konfiguration für einen Rechner, der sowohl als Einwahlrechner als auch als Verbindungsrechner dient

Da ich schon mehrfach gefragt worden bin, wie ein Rechner zu konfigurieren ist, der die eine ISDN-Karte nutzt, um selbst eine Verbindung zum Netz aufzubauen und die andere, um seinerseits die einwahl zu ermöglichen, hier ein kurzer Hinweis.
Entscheidend ist die Datei /etc/ppp/ip-up, in der das Routing gesetzt wird. Hinweise zum Routing für den Einwahlrechner finden Sie auf dieser Seite, Hinweise zum Routing für einen Internetserver auf der entsprechenden Seite.
Die Grundidee ist, nur bei der ISDN-Karte, die die Verbindung zum Provider herstellt das Routing anzupassen und bei der ISDN-Karte, auf der man sich einwählen kann, alles so zu lassen wie es ist.

Im folgenden kommt eine Beschreibung des Grundgerüstes der Datei /etc/ppp/ip-up, die Details müssen dann entsprechend der eigenen Rechnerkonfiguration angepaßt werden.

#!/bin/sh

# Grundgerüst eines Skriptes ip-up für einen
# Linuxrechner, der mit einer ISDN-Karte (ippp0)
# die Einwahl in das System erlaubt
# und gleichzeitig sich mit der anderen (ippp1) selbst
# in das Internet einwählt
#
# Das Skript wird vom System standardgemäß mit folgenden Parametern aufgerufen:
# <INTERFACE> <DEVICE> <SPEED> <LOCALIP> <REMOTEIP>"

# Definition von Variablen, die im Skript verwendet werden:
# da ip-down ein Link auf ip-up ist, muß festgestellt werden
# ob ip-up oder ip-down aufgerufen wurde.
# Unter Linux wird der Name des aufgerufenen Programms
# bzw. Skriptes als erster Parameter übergeben.
# in BASENAME wird also gespeichert, ob es sich um ip-up
# oder um ip-down handelte.

BASENAME=`basename $0`
INTERFACE=$1
DEVICE=$2
SPEED=$3
LOCALIP=$4
REMOTEIP=$5

# Hier sind einige Zeilen herausgenommen, die in einer
# vollständigen Datei aber enthalten sein sollten
...

# jetzt wird in einer ersten case-Abfrage festgestellt, ob als
# Interface der Daemon für die erste ISDN-Karte (ippp0),
# für die zweite ISDN-Karte (ippp1) oder das Modem (ppp0)
# gewählt ist.

case "$INTERFACE" in
# erste ISDN-Karte (zur Einwahl von außen
ippp0)
    # Zweite case-Abfrage, um festzustellen, ob ip-up
    # oder ip-down aufgerufen wurde.
    case "$BASENAME" in
    # wenn ip-up aufgerufen wurde, dann wird die Verbindung hergestellt
    # Bei einem Einwahlrechner bleibt das Routing hier unverändert.
    ip-up)
        ;;
    # Am besten ebenfalls leer lassen
    ip-down)
        ;;
    *)
        # Diese Stelle des Skriptes sollte eigentlich niemals erreicht werden
    ;;
    esac
    # Ende der zweiten case-Abfrage
    ;;
# zweite ISDN-Karte mit der Verbindung zum Provider hergestellt
# wird. Unterschied zu oben: Das Routing muß hierbei konfiguriert
# werden.
ippp1)
    # Zweite case-Abfrage, um festzustellen, ob ip-up
    # oder ip-down aufgerufen wurde.
    case "$BASENAME" in
    # Hier wird jetzt beim Verbindungsaufbau das Routing gesetzt.
    ip-up)
        # Hier wird das Routing gesetzt
        ...
        ;;
    ip-down)
        # Beim Verbindungsabbau das Routing wieder auf die
        # Ausgangswerte setzen
        ...
        ;;
    *)
        ;;
    esac
    # Ende der zweiten case-Abfrage
    ;;
ppp*)
    # Hier ggf. Kommandos für die Modemeinwahl einfügen
    ;;
*)
    # Auch diese Stelle dürfte eigentlich nie erreicht werden.
    ;;
esac
# Ende der ersten case-Abfrage

6 Sonstige allgemeine Systemeinstellungen

Wenn Sie die Wahl haben, sollten Sie immer eine Authentifizierung per CHAP verlangen, da dies ein zweiseitiges Verfahren ist und etwas höhere Sicherheit bietet. Sie benötigen dann eine Datei /etc/ppp/chap-secrets.

Wenn Authentifizierung per CHAP verlangt wird, muß auf beiden Rechnern eine Datei /etc/ppp/chap-secrets vorhanden sein. Dort werden jeweils in einer Zeile server, client und ein Paßwort festgehalten, mit dem sich die Systeme gegenseitig bekanntmachen. Da CHAP zweiseitig ist, d.h. der Client meldet sich beim Server an und umgekehrt, hat die Datei auf beiden Rechnern das nachfolgend beschriebene Aussehen. Die Namen für Client und Server entsprechen üblicherweise den jeweiligen Hostnamen, müssen aber wohl nicht; im dargestellten Beispiel verwende ich ppp_client für den Rechner, der anruft und ppp_server für den Rechner, der angerufen wird. Interessant ist, daß wohl bei Einwahl per Modem auch die IP-Nummer angegeben werden muß. Ich erlaube im folgenden alle IP-Nummern und trage deshalb einen Stern am Ende jeder Zeile ein.

# /etc/ppp/chap-secrets
# server    client    secret
ppp_server    ppp_client    verratichnicht    *
ppp_client    ppp_server    verratichnicht    *

Das routing auf dem Einwahlserver ist sehr einfach, es gibt dort nur die lokale Netzkarte und das default-Gateway des Netzes (in unserem Fall wieder ein Gateway).

#
# /etc/route.conf
#
# wird gelesen von /sbin/init.d/route.
#
# loopback-device
127.0.0.0               0.0.0.0                 255.255.255.0           lo
# Ethernetz-Karte, die mit dem lokalen Netz verbunden ist
192.168.2.0             0.0.0.0                 255.255.255.0           eth0
# default-route zeigt auf das gateway im Netz
default                 192.168.1.1

Das routing für das Modem und die ISDN-Karte wird automatisch geregelt, insbesondere der Eintrag proxyarp in /etc/ppp/options ist hier wichtig!

7 Sicherheitsaspekte

Die beschriebene Lösung ist aus Sicherheitsaspekten insbesondere für die Modemeinwahl nicht ganz unproblematisch, da Benutzer dort von außen ein Programm (pppd) mit root-Rechten ausführen können. Im vorliegenden Fall ist das nicht weiter wild, da der Rechner selbst kein Arbeitsplatzrechner ist, sondern nur für die Einwahl eingerichtet ist und sich Hacker sowohl den Einwahlnamen, Passwort und die Gruppenzugehörigkeit erschleichen müßten. Im schlimmsten Fall muß der Rechner wieder neu eingerichtet werden.
Für öffentlich zugängliche Lösungen sollte das eigentliche Netz durch ein Firewall o.ä. Sicherheitsmaßnahmen abgeschirmt werden. Eine vollwertige Workstation mit wichtigen Daten würde ich so nicht einrichten.

Ein Hinweis noch für Nutzer von Windows, die sich per DFÜ-Netzwerk auf den Linux-Server einwählen. Dort sollte in den Netzwerkeinstellungen unter ->Servertyp->TCPIP Einstellungen das "Standard-Gateway im Remote-Netzwerk verwenden" aktiviert sein, andernfalls ist zwar ein ping, telnet und ftp vom Linux zum Windows möglich, andersherum allerdings nicht (Danke für den Hinweis an Jörg Niemeyer).
 



Zurück zur Hauptseite