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:

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:

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

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.