Internet-Zugang für mehrere Computer über eine ISDN-Leitung

Einleitung

Folgender Fall liegt zu Grunde: ein LINUX-Rechner ist über eine ISDN-Leitung mit der Außenwelt verbunden. Auf der anderen Seite des Servers ist ein lokales Netzwerk angeschlossen, an dem eine Reihe von Linux/Windows/... - Rechnern hängen (via Netzwerkkarte). Diese Rechner sollen Internet- Zugang über diese eine ISDN-Leitung bekommen.

Dieses Konzpet eignet sich für WGs, Schulungsräume, kleine Firmen, etc. Benötigt wird dazu nur ein ausrangierter Computer (ein Pentium 90 tuts), eine ISDN-Karte und einige Netzwerkkarten.

Nun das Problem dabei: die ISDN-Verbindung stellt nur eine IP-Adresse zur Verfügung. Die lokalen Rechner wollen aber alle ihre eigene individuelle IP-Adresse haben. Aus diesem Grunde richtet man ein lokales Netz mit versteckten IP-Adressen ein (192.168.0.0 - 192.168.0.99). Die Außenwelt sieht aber nur die eine IP-Adresse des ISDN-Anschlusses. Der Linux Server löst nun dieses Problem. Alle Datenpakete von den lokalen Rechnern bekommen als Absenderadresse die Adresse des ISDN-Anschlusses. Die Antwortpakete aus dem Internet werden dann von dem Server wieder an die entsprechenden Computer in dem lokalen Netz weitergeleitet. Das nennt sich "masquerading". Dieses Verfahren hat noch einen Vorteil: dadruch, daß nur der Server in der Internet-Welt gesehen werden kann, können die lokalen Rechner auch nicht angegriffen werden.

Voraussetzungen

Vorbereitungen

Von der Distribution muß natürlich alles Netzwerkrelevante installiert werden. Aber es sollte kein Netzwerk angemeldet sein. Nur der name-Dämon sollte von der Distribution gestartet werden. Im Kernel müssen alle Firewall-Optionen aktiviert sein - und natürlich auch das Masquerading. Das ISDN-Subsystem sollte als Modul compiliert werden, damit man ihm Parameter im Startscript übergeben kann.

IP-Adressen

IP-Adressen der lokalen Rechner: 192.168.0.1 - 192.168.0.98
IP-Adresse des Servers: 192.168.0.99

/sbin/init.d/boot.local

Das File ist das zentrale Start-Script, welches die ISDN- Verbindung zu MobilCom (oder anderen Providern mit "pay per call") herstellt und auch das lokale Netz einrichtet. Wer will kann dieses Script auch nicht benutzen und die Parameter bei den Netzwerkeinstellungen von SuSe eintragen (dann weiter bei "ip-up" -- aber ich habe es nicht getestet).

Das file boot.local ist bei SuSe das Start-Script, was vor jeglicher Netzwerk-Aktivierung gestartet wird. Das Script erledigt alles, was für die elementare Anbindung an das Internet nötig ist. Zusätzliche Netzwerke können dann natürlich noch in der Netzwerkkonfiguration der Distribution eingetragen werden. Der Grund für dieses Script ist einfach, daß es ansonsten ein ziemliches Flickwerk mit der Distriution gibt, wenn man versucht, die speziellen Kommandos dort einzubauen. Man weiß dann nicht, was z.B. YAST wieder davon beim nächsten Konfigurieren vernichtet. Und es ist schrecklich unübersichtlich, wenn man ein Teil von der Command-Line konfiguriert und ein Teil über die graphische Oberfläche. Und letztendlich kann man ein vollständiges Script hier besser präsentieren. :-)


#!/bin/sh
#
# /etc/rc.d/rc.local: Local system initialization script.
#
# Put any local setup commands in here:
# Load custom keyboard map
#echo "Installing the ISDN-Driver"
#First the general modules
/sbin/insmod slhc
/sbin/insmod ppp
/sbin/insmod bsd_comp
/sbin/insmod isdn
#Now: Hardware. More infos under /usr/src/linux/Documentation/isdn
#Teledat 100 (Sedlbauer)
#This card need the isapnp-command
#Generate a isapnp.conf and uncomment to the default-values:
#io=0x270 and irq=5
/sbin/isapnp /etc/isapnp.conf
/sbin/insmod hisax type=15 irq=5 io=0x270 protocol=2 id=teledat100
#now configure the interface
/sbin/isdnctrl verbose 1
/sbin/isdnctrl addif ippp0
#Provider: here Mobilcom
/sbin/isdnctrl addphone ippp0 out 0101901929
#our number
/sbin/isdnctrl eaz ippp0 936038
#hang up after a lot of time (1/2 day)
/sbin/isdnctrl huptimeout ippp0 32000
#stuff that must be - believe it!
/sbin/isdnctrl secure ippp0 on
/sbin/isdnctrl l2_prot ippp0 hdlc
/sbin/isdnctrl l3_prot ippp0 trans
/sbin/isdnctrl encap ippp0 syncppp
#so the connection will be established automatically
/sbin/isdnctrl dialmode ippp0 auto
# Start the daemon
/sbin/ipppd /dev/ippp0 &
#
#
echo "Setting up the local network"
#
# Starting the netcard
/sbin/insmod 8390
/sbin/insmod ne2k-pci
#
# Installing modules for masquerading
/sbin/insmod ip_masq_ftp
/sbin/insmod ip_masq_raudio
/sbin/insmod ip_masq_irc
#
# Enabling ip-forwarding
echo "1" > /proc/sys/net/ipv4/ip_forward
#
# Enables a hack to cope with dynamic IP-addresse (via PPP)
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
#
#
/sbin/ifconfig eth0 netmask 255.255.255.0 up 192.168.0.99
/sbin/route add -net 192.168.0.0 netmask 255.255.255.0 eth0
#
#
# Starting named
/usr/sbin/named
#
#
# Everything ready
/sbin/isdnctrl dial ippp0

/etc/ppp/ioptions

Dieses file muß im Unterverzeichnis /etc/ppp stehen. Es enthält die Konfiguration des ppp-Dämons. Wichtig ist dabei die letzte Zeile: "defaultroute". Diese macht einem das Leben außerordentlich leicht. Sobald eine Verbindung mit dem Provider hergestellt ist, wird automatisch ein sogennanntes interface eingerichtet ("ifconfog") und auch die Route zum Provider eingerichtet ("route"). Ob man die "header-compression" ausschalten muß, hängt vom Provider ab. Wenn man auf Nummer sicher gehen will, kann man es so lassen. Wenn man etwas experimentiern will, dann kann man mal die ganzen Einträge auskommentieren.

# The ISDN-device: this must be the first entry in this file
/dev/ippp0
#
# user name: this name corresponds to the user-name in the
# pap-secrets file
user "bernd"
#
# accept IP addresses from peer
# use with dynamic IP
ipcp-accept-local
ipcp-accept-remote
noipdefault
#
# disable all header-compression
-vj
-vjccomp
-ac
-pc
-bsdcomp
#
# max receive unit
mru 1524
# max transmit unit
mtu 1500
#
# generates automatically the interface and an entry in the routing-table
# very important
defaultroute

/etc/ppp/pap-secrets

Dieses File enthält die Passwörter zur Herstellung der Verbindung. Bei den Providern, bei denen man direkt über die Telefonrechnung bezahlt, sind die Passwörter völlig egal. Es wird nur verlangt, daß irgendein Username (korrespondiert mit dem im File "ioptions") und irgendein Passwort übertragen wird.

"root"     *     "root"
"bernd"    *     "bernd"

/etc/ppp/ip-up

Dieses File wird immer dann aufgerufen, wenn eine Verbindung zum Provider erfolgreich hergestellt worden ist. Wenn dies geschehen ist, wird das eigentliche Masquerading aktiviert. Vorher ist das noch nicht möglich, da die IP-Adresse der ISDN- Verbindugn vom Provider dynamisch vergeben wird (im entsprechenden IP-down sollte einfach gar nichts stehen).


#!/bin/sh
#
#
/sbin/ipchains -v -P forward DENY
/sbin/ipchains -v -A forward -j MASQ -s 192.168.0.0/24 > /var/log/ip-masq
#
#

Name-Dämon

Der name-Dämon muß als sogennannter cache-Server laufen. Siehe dazu den DNS-Howto. Der named wird dann über das start-Script ganz zum Schluß gestartet (s.o.).

Lokale versteckte WWW-Seiten im Intranet

Wer will, kann auch noch bei dem name-Dämon eine Domain angeben, die dann nur im Intranet erreicht werden kann. Damit kann man dann vertrauliche Infos im Intranet veröffentlichen. Dazu muß man eine neue Domäne einrichten, die dann z.B. so aussieht (der Server heißt "rocky" und die Domäne ist "hedwigschule"):
/var/named/hedwigschule:
; default TTL ( must be there in further versions of bind8)
; $TTL          5D
;
;
@               IN      SOA     rocky.hedwigschule. root.hedwigschule. (
                                        42      ; Serial
                                        8H      ; Refresh
                                        2H      ; Retry
                                        1W      ; Expire
                                        5D      )       ;Minimum
                        NS      rocky ; Server's name
;
;
;
;
;
localhost               A       127.0.0.1
;
; The SERVER
rocky                   A       192.168.0.99 ; his IP-address
ftp                     CNAME   rocky
www                     CNAME   rocky
diese Domain meldet man dann in dem file /etc/named.conf so an:
[...]
  zone "hedwigschule" {
          type master;
          notify no;
          file "hedwigschule";
  };

Das notity no muß unbedingt in das file eingeragen werden, da ansonsten die Information in die Welt driften würde.

Mit dieser Ergänzung ist nun der Linux Server im Intranet unter "www.hedwigschule" zu erreichen. Hat man den apache (also den WEB-Server auf dem Server am laufen, so können alle Rechner auf die WWW-Seiten des Servers zugreifen (die lokal auf dem Server im Verzeichnis /usr/local/httpd/htdocs liegen).


Bernd Porr
Last modified: Sun Jul 23 19:12:13 CEST 2000