Zugang zu T-DSL mit OpenBSD
Technischer Stand: Jahr 2001. Dieser Artikel wird nicht mehr aktualisiert.
Die hier beschriebene Rechnerkonfiguration eignet sich als Firewall-Router,
mit dem man ein Homeoffice ans Internet bringen kann. Neben einem festen
LAN-Segment unterstützt der Router auch ein WLAN-Segment. Die Firewall
des Routers sichert also auch das Funksegment ab. Das ist an einer
anderen
Stelle beschrieben.
Auf dem hier vorgestellten Internetrouter läuft auch der Nameserver
(DNS) für das lokale Netz. Normalerweise wird empfohlen, auf einer Firewall
absolut nichts anderes laufen zu lassen als die Firewallsoftware, und das
aus gutem Grund. Wenn hinter der Firewall eine DMZ liegt, die Dienste für
die Außenwelt bereitstellt, sollte die äußere Firewall tatsächlich
mit minimaler Softwareausstattung laufen. Da meine "DMZ" auf einem
dedicated
Server liegt und nicht im Hausnetz, habe ich mir diese Regelverletzung
erlaubt.
Hardware und Betriebssystem
Der Rechner wird mit 3 Ethernetkarten ausgestattet:
- eine 100Mb-Karte für die Verbindung zum Hub des Fest-LAN,
- eine 10Mb- oder 100Mb-Karte zum WLAN-Accesspoint,
- eine 10Mb- oder 100Mb-Karte für die Verbindung zum DSL-Modem.
Ansonsten sind an den Rechner keine großen Anforderungen zu stellen, sogar ein alter 486er wird nicht überfordert sein, sofern er mit mindestens 32 MB Hauptspeicher und 1 GB Festplatte ausgestattet ist..
Beim Betriebssystem habe ich mich für OpenBSD 3.x entschieden, insbesondere wegen der Firewall-Technik. OpenBSD wird ohne graphische Oberfläche installiert, dafür reicht ein 14-Zoll Monitor und ISA-Graphikkarte. Soundkarte ist gänzlich überflüssig. Da der Rechner immer läuft (Unix fährt man selten herunter), sollte man mit jedem Stromfresser sparen.
Die Installation gestaltet sich einfach. Nota bene: alles mit Kommandozeile. Wer sich das nicht zutraut, sollte es lieber mit Linux versuchen. Wer es sich zutraut, findet die klassischen Unix-Manuals unter http://www.openbsd.org und unter http://www.freebsd.org hervorragende Dokumentation. Die FreeBSD-Dokumentation paßt in weiten Teilen, darf aber nicht ganz unkritisch auf OpenBSD angewendet werden. Einige Unterschiede bestehen schon.
Noch eine Bemerkung zu den Netzwerkkarten: Sie erhalten während der Installation unterschiedliche Namen und man hat IP-Adressen anzugeben. Seinen Adreßraum sollte man zu diesem Zeitpunkt schon grob geplant haben. Eine von den bei der Installation angegebenen Adressen (im Beispiel unten: 192.168.9.1) wird später keine Rolle mehr spielen, das Interface wird nur noch über PPP angesprochen. Welches welche Karte ist, muß man während der Installation mit etwas Phantasie und Probieren selbst herausfinden.
Netzwerkeinrichtung
Bei mir hießen die Karten xl0 (die an den Hub für das Fest-LAN angeschlossen wird), rl0 (zum WLAN) und xl1 (die zum DSL-Modem führt). Ich bleibe hier einfach bei den Namen, bei Ihnen werden sie natürlich anders lauten.
$ cat /etc/hostname.xl0
inet 192.168.1.1 255.255.255.0 192.168.1.255
$ cat /etc/xhostname.rl0
inet 192.168.2.1 255.255.255.0 192.168.1.255 ! route add -net segment2 maleachi
$ cat /etc/xhostname.le1
inet 192.168.9.1 255.255.255.0 192.168.9.255
Für die beiden Karten werden Dateien hostname.xyz angelegt. Die Datei für die "falsche" Karte habe ich einfach in xhostname.le1 umbenannt, so wird sie vom System ignoriert. Die IP-Adresse 192.168.9.1 existiert dann also nicht mehr.
(In hostname.rl0 habe ich übrigens eine Route zu einem drahtlos abgesetzten LAN-Segment hinzugefügt; maleachi ist der dazugehörige Router. Das ist auch ein interessanter Fall für *n*x: uraltes Notebook, defekte Festplatte, 2 frei PC-Card-Steckplätze, die Software von http://www.fli4l.de.)
PPP-Konfiguration
Jetzt wird es interessanter, es folgt die PPP-Konfiguration. Bei Systemstart werden Kommandos aus /etc/rc und /etc/rc.local abgearbeitet. Letzteres ist die Konfigurationsdatei, die man beliebig mit eigenen Startkommandos ergänzen kann.
$ cat /etc/rc.local
... /usr/sbin/named -u named -t /etc/named /etc/named/etc/setnameservers.sh ifconfig le1 up ppp -ddial pppoe ...
Der Nameserver wird gestartet (Erläuterung weiter unten), dann aktiviert der Befehl ifconfig die Netzkarte, die durch die stillgelegte hostname.xl1-Datei dem Unix noch nicht bekannt ist. Das Kommando ppp eröffnet die Einwahl ins DSL, in meinem Fall T-DSL.
Sein Futter findet das PPP-System im Verzeichnis /etc/ppp:
$ cat /etc/ppp/ppp.conf
default: set log Connect Phase IPCP tun set redial 2+1-60 0 set reconnect 5 30000 pppoe: set device "!/usr/sbin/pppoe -i le1" set server /var/run/pppoe "" 0177 set mtu max 1492 set mru max 1492 set speed sync disable acfcomp protocomp deny acfcomp enable lqr set lqrperiod 5 set cd 5 set dial set login set timeout 0 set authname "0000000000000000000000000000@t-online.de" set authkey "00000000" enable dns resolv readonly enable mssfixup
Sie müssen le1 an den Namen anpassen, den die DSL-Ethernetkarte bei Ihnen bekommen hat, und die vielen Nullen durch Ihre eigenen T-DSL-Zugangsdaten ersetzen. Damit weiß PPP erst einmal, wie es eine Verbindung herstellen soll. Das kann durchaus etliche Verbindungsversuche beinhalten, die aber automatisch geschehen.
Die redial- und reconnect-Anweisungen sorgen dafür, daß der Rechner so lange wählt, bis die Telekom aufgibt und Sie reinläßt. Das enable dns sagt PPP, daß beim Verbindungsaufbau die Nameserver der Telekom abgefragt und für alle künftigen DNS-Anfragen genutzt werden sollen. Die empfangenen IP-Adressen der Telekom-Nameserver werden durch die Variablen DNS0 und DNS1 im Script ppp.linkup verarbeitet. Die Anweisung resolv readonly sorgt dafür, daß die Nameserver nicht in resolv.conf eingetragen werden.
$ cat /etc/resolv.conf
domain intra.barnim.net lookup file bind nameserver 192.168.1.1
Was geschehen soll, sobald die Verbindung steht, besagt ppp.linkup:
$ cat /etc/ppp/ppp.linkup
MYADDR: ! sh -c "/sbin/route add default HISADDR -mtu 1492" ! sh -c "echo 1 >/etc/ppp/ppp_up.inet" ! sh -c "/etc/ppp/reload-pf" !bg sh -c "/etc/ppp/propagate_ip tun0 MYADDR HISADDR" !bg sh -c "/etc/named/etc/setnameservers.sh DNS0 DNS1"
Die sogenannte Default-Route (aus dem lokalen Netz heraus ins Internet) wird hinzugefügt und die Firewall wird gestartet (pfctl).
Das Gegenstück zu ppp.linkup heißt ppp.linkdown.
$ cat /etc/ppp/ppp.linkdown
MYADDR: !bg sh -c "/etc/named/etc/setnameservers.sh" ! sh -c "echo 0 >/etc/ppp/ppp_up.inet" ! sh -c "/etc/ppp/reload-pf"
Das Konfigurationsskript für den Paketfilter reload-pf orientiert sich anhand des Inhalts von ppp_up.inet, ob der Paketfilter nur den WLAN-Verkehr oder außerdem auch Internetverkehr bearbeiten soll.
Firewall
Auf
dieser
Seite finden Sie eine Beispielkonfiguration für die Paketfilter-Firewall.
Hinweis: In den Firewallregeln ist von den Geräten xl0 und tun0 die Rede. Was wir als le1 kennengelernt haben, hat PPP jetzt tun0 genannt, ein virtuelles Gerät. Dieser Name wird bei Ihnen wahrscheinlich genauso lauten. Unterscheiden werden sich sicher Ihre IP-Adressen und die verwendeten Ports.
Wer sich mit Firewall noch unsicher fühlt, kann Eingang wie Ausgang mit einem Intrusion Detection System (IDS) bewachen. Siehe hierzu ebenfalls die Firewall-Seite.
Dranbleiben
Bekanntlich beendet die Telekom nach 24 Stunden immer die Verbindung, um Ihnen keine Festverbindung ins Internet zu gönnen. Das muß Sie nicht mehr stören. Verschieben Sie die Unterbrechung auf zum Beispiel nachts drei Uhr, wo Sie ohnehin etwas besseres vorhaben sollten, als vor Ihrem Rechner zu sitzen.
$ crontab -l
0 3 * * * /etc/ppp/force_ppp_down 5 * * * * /etc/ppp/check_ppp_up
Um 1:40 Uhr GMT jeden Tag beende ich selbst die Verbindung zwangsweise und komme so der Telekom immer um Sekunden zuvor:
$ cat /etc/ppp/force_ppp_down
kill -INT `cat /var/run/tun0.pid`
PPP baut immer ganz automatisch die Verbindung wieder auf, wenn sie verloren gegangen ist. Verlorengehen lasse ich sie mit diesem kill-Kommando. Wenn danach PPP seine Pflicht getan hat, ist wieder für 24 Stunden Ruh.
Oder auch nicht. Für diesen Fall teste ich stündlich die Internetverbindung:
$ cat /etc/ppp/check_ppp_up
#!/bin/sh
server1=www.google.de
server2=www.microsoft.de
logname=`basename $0`
if ping -q -c 1 $server1 2>&1 | grep -q ', 0% packet loss'; then
:
else
if ping -q -c 1 $server2 2>&1 | grep -q ', 0% packet loss'; then
: # logger "$0: one server not found"
else
logger -t "$logname" "servers $server1 and $server2 not found - hangup"
kill -INT `cat /var/run/tun0.pid`
fi
fi
Da T-DSL die unangenehme Eigenschaft hat, manchmal zwar angeblich erfolgreich eine Verbindung aufzubauen, aber keinen DNS-Server zugänglich zu machen, teste ich die korrekte Verfügbarkeit der Verbindung gerade über diesen Weg.
Gesehen werden
Und um das Vergnügen einer Internet-Festverbindung komplett zu machen, benutzen wir einen der zahlreichen kostenlosen "dynamischen IP-Dienste". Ich verwende http://www.dyndns.org (mit der Software ddclient, im Internet leicht zu finden). Oben in ppp.linkup war in der letzten Zeile das Setzen der IP-Adresse bei den beiden Diensten zu sehen.
$ cat /etc/ppp/propagate_ip
#!/bin/sh # called: $0 interface myaddr hisaddr # DYNDNS config is in /etc/ddclient.conf: /etc/ppp/dyndns/ddclient.run $1 /dev/console 0 $2 $3
Verkehrsstatistik
Die Bandbreitennutzung läßt sich aus den PPP-Logeinträgen ermitteln. Bei jedem Verbindungsabbau fallen Sätze der Art
Dec 15 04:00:03 jona ppp[19017]: tun0: IPCP: Connect time: 86249 secs: 435459092 octets in, 34326770 octets out Dec 15 04:00:03 jona ppp[19017]: tun0: Phase: deflink: Connect time: 86250 secs: 435796961 octets in, 35854892 octets out
an. Die Oktettzahlen sind die Brutto- und Netto-Volumina. Die Auswertung mit Excel ist einfach. Wer eine automatische Volumenswarnung benötigt, kann dafür ein Script schreiben.
Nameserver
Mit den hier beschriebenen Einstellungen für den internen Nameserver wird folgendes bewirkt:
- Der Nameserver löst alle internen Adressen auf.
- Ist ein Domainname nicht bekannt, wird die Anfrage an die Nameserver der Telekom weitergeleitet.
- Für die Anwendungen innerhalb des lokalen Netzes ist die Weiterleitung von Anfragen transparent.
- Für die Außenwelt ist der Nameserver nicht erreichbar.
Es wird Version 9 der DNS-Software (BIND) installiert. Die Konfigurationsdateien des Nameservers werden sämtlich im Verzeichnis /etc/named/etc abgelegt; ein Nutzer named muß neu eingerichtet werden. Durch den Aufruf von
... /usr/sbin/named -u named -t /etc/named /etc/named/etc/setnameservers.sh ...
in /etc/rc.local wird der Nameserver gestartet.
Folgende Konfigurationsdateien werden benötigt:
$ cat /etc/named/etc/named.conf.m4
acl "corpnets" { 192.168.0.0/16; 127.0.0.1/32; };
options {
directory "/etc";
pid-file "/named.pid";
listen-on { 192.168.1.1; };
allow-query { "corpnets"; };
forwarders {
DNS0
DNS1
};
};
zone "intra.barnim.net" {
type master;
file "intra.barnim.net.db";
};
zone "1.168.192.in-addr.arpa" {
type master;
file "fixed.intra.barnim.net.rev";
};
Weitere Zonen für andere Netzsegmente können hinzugefügt werden und in den Zonenfiles die entsprechenden Einträge fest vergebener IP-Adressen.
$ cat /etc/named/etc/intra.barnim.net.db
$TTL 3600
@ IN SOA intra.barnim.net. bez.intra.barnim.net. (
2004010101 ; Serial
3600 ; Refresh
300 ; Retry
3600000 ; Expire
3600 ) ; Minimum
IN NS dns.intra.barnim.net.
jona.intra.barnim.net. IN A 192.168.1.1
dns.intra.barnim.net. CNAME jona.intra.barnim.net.
$ cat /etc/named/etc/intra.barnim.net.rev
$TTL 3600
@ IN SOA intra.barnim.net. bez.intra.barnim.net. (
2004010101 ; Serial
3600 ; Refresh
300 ; Retry
3600000 ; Expire
3600 ) ; Minimum
IN NS dns.intra.barnim.net.
1 IN PTR jona.intra.barnim.net.
Der Nameserver wird durch ein Skript jedes Mal bei Aufbau und Abbau der Internetverbindung neu eingestellt.
$ cat /etc/named/etc/setnameservers.sh
#!/bin/sh logger -t `basename $0` "$1 $2" DNS0=""; [ X$1 != X ] && DNS0="$1;" DNS1=""; [ X$2 != X ] && DNS1="$2;" m4 -DDNS0="$DNS0" -DDNS1="$DNS1" </etc/named/etc/named.conf.m4 >/etc/named/etc/named.conf kill -HUP `cat /var/run/named.pid`
Der Nameserver wird durch ein Skript jedes Mal bei Aufbau und Abbau der Internetverbindung neu eingestellt. Der Makroprozessor m4 arbeitet die jeweils bezogenen Adressen externer Nameserver in den Forwarders-Bereich der Konfigurationsdatei ein.
Demilitarisierte Zone (DMZ)
Wer meint, für seinen DSL-Zugang schon genug Geld ausgegeben zu haben, kann seine kleine Homepage auch zuhause betreiben. Schaut eh keiner drauf, sodaß die 128 Kilobit Bandbreite "upstream" bei T-DSL auf jeden Fall ausreichen. Wer einen Dienst für das Internet freischaltet, sollte
- grundsätzlich auf Ungemach vorbereitet sein,
- für den Webdienst nie Microsoft IIS, sondern nur Apache benutzen,
- den Dienst auf einem separaten Rechner (der DMZ) laufen lassen, der über die Firewall sorgfältig abgeschottet ist.
Der DMZ-Rechner ist dem Feind zugänglich. Er hat sein eigenes IP-Subnetz (z.B. 192.168.7.0/24) für sich und ist an eine physikalisch separate Netzwerkkarte des Firewall-Routers angeschlossen. Es laufen nicht mehr Dienste als nötig darauf.
Man sollte daran denken, daß die Webpräsenz in der Serverfarm doch stabiler ist als der wiederbelebte Pentium 1 zuhause, und daß die dynamischen IP-Dienste nicht sehr zuverlässig sind. Wem es peinlich wäre, die eigene Homepage dann und wann nicht erreichbar zu wissen, gibt doch lieber ein paar Dollar mehr aus.