System: SuSE Linux 8.1
Ich verwende hier den Dyn-DNS-Service von www.dyndns.org.
Der eine Rechner (Internetzugangsrechner) Überträgt bei der Einwahl seine IP-Nummer zum DNS-Server von DynDNS.org, der andere (Notebook) macht im Rahmen des Starts von ipsec eine DNS-Abfrage. Falls der Zugangsrechner nicht eingewählt ist, wird ein Verfahren benötigt, um ihn von außen dazu zu bringen, sich einzuwählen.
Mein ursprüngliches Verfahren, dies zu erreichen, war die /var/log/messages mit Hilfe des Programms logsurfer auszuwerten. Eine wesentlich elegantere Methode hat Johannes Endres in Heft 18 (2002) der c't auf Seite 204 beschrieben. Diese habe ich hier umgesetzt.
Bei einem Anruf erscheint ein entsprechender Eintrag in der /var/log/messages. Wird die Rufnummer des Anrufers übertragen, so erscheint auch diese Nummer in der Logdatei. Dieser Logeintrag erfolgt durch das Programm isdnlog. Isdnlog ist zusätzlich in der Lage, bei bestimmten Ereignissen Programme zu starten. Dies läßt sich nutzen, um bei einem Anruf, z.B. von einem Handy aus, eine Interneteinwahl auszulösen.
Eintrag in /etc/isdn/isdnlog.options.contr0, damit isdnlog Programme startet:
# ... # -S start={yes|no} # isdnlog soll bei diversen Events die in der 5. Spalte der isdn.conf # angegebenen externen Programme starten start=yes # ...
Die Datei /etc/isdn/callerid.conf enthält die beteiligten Nummern: Die MSN die angerufen wird, und die Nummer, von der der Anruf erfolgt, der die Einwahl auslösen soll. Soll jeder Anruf auf die MSN die Einwahl bewirken, macht man vor die Zeilen [NUMBER] bis ZONE = 4 je ein Kommentarzeichen (#). Das hat den Vorteil, dass es egal ist, von wo aus man die MSN anruft und den Nachteil, dass jeder andere auch die Einwahl auslösen kann.
# ... [MSN] NUMBER = 9876789 ALIAS = Internet-Trigger ZONE = 1 [NUMBER] NUMBER = 01792032149 ALIAS = Bjoerns Handy ZONE = 4 SI = 1 START = { [FLAG] FLAGS = I|R|U INTERVAL = 60 PROGRAM = /root/bin/dialout \${20} USER = NOBODY GROUP = NOGROUP }
/root/bin/dialout:
#!/bin/bash # Auslösen der Einwahl durch Anruf vom Handy # mit Hilfe von isdnlog und /etc/isdn/callerid.conf # ISDN-Verbindung if [ "$1" = "Internet-Trigger" ] then isdnctrl dial ippp0 >> /var/log/messages 2>&1 fi # Alternative, auch fr DSL-Verbindung geeignet #if [ "$1" = "Internet-Trigger" ] #then # /bin/ping -c 1 www.dr-lotz.de >> /var/log/messages 2>&1 #fi
Zunächst ist es erforderlich, sich bei www.dyndns.org anzumelden. Dabei muss man sich für eine der diversen Domains entscheiden und einen Rechnernamen festlegen.
Auf dem Interneteinwahlrechner ist ein geeigneter Client erforderlich, der die Aktualisierung der IP-Nummer übernimmt. Es gibt verschiedene DynDNS Clients, ich verwende addns.pl von David Hasson.
Dieses tar-Archiv wird mit
# Konfiguration für addns.pl # /etc/addns.conf [main] { proxy_host = "localhost" proxy_port = 3128 use_proxy = no } [rechnername] { detect_method = "iface" update_host = rechnername.dyndns.org iface = "ppp0" username = "username" password = "password" server_port = 80 server_host = members.dyndns.org }
Der Aufruf des Scripts erfolgt in der Datei /etc/ppp/ip-up.local.
#!/bin/bash # /etc/ppp/ip-up.local # Aufruf des Scripts für die Aktualisierung des DNS-Eintrags: /usr/local/sbin/addns.pl
# /etc/ipsec.conf - FreeS/WAN IPsec configuration file # More elaborate and more varied sample configurations can be found # in FreeS/WAN's doc/examples file, and in the HTML documentation. # basic configuration config setup # THIS SETTING MUST BE CORRECT or almost nothing will work; # %defaultroute is okay for most simple cases. interfaces=%defaultroute #interfaces="ipsec0=eth0" # Debug-logging controls: "none" for (almost) none, "all" for lots. klipsdebug=none plutodebug=none # Use auto= parameters in conn descriptions to control startup actions. plutoload=%search plutostart=%search # Close down old connection when new one using same ID shows up. uniqueids=yes forwardcontrol=yes # defaults for subsequent connection descriptions conn %default # How persistent to be in (re)keying negotiations (0 means very). keyingtries=0 # RSA authentication with keys from DNS. # leftrsasigkey=%dns # rightrsasigkey=%dns authby=rsasig leftrsasigkey=0sAQvP0uJNoc ... rightrsasigkey=0sAQzOEXzBr ... # sample VPN connection: Rechner zu Rechner; left ist der Roadwarrior conn sat-mond # Left security gateway, subnet behind it, next hop toward right. leftsubnet= left=%any leftid=@satellit.zuhause.netz leftnexthop= # Right security gateway, subnet behind it, next hop toward left. rightnexthop= right=%defaultroute rightid=@mond.zuhause.netz rightsubnet= # To authorize this connection, but not actually start it, at startup, # uncomment this. auto=add # sample VPN connection: Rechner zu Subnetz; left ist der Roadwarrior conn sat-sonne # Left security gateway, subnet behind it, next hop toward right. leftsubnet= left=%any leftid=@satellit.zuhause.netz leftnexthop= # Right security gateway, subnet behind it, next hop toward left. rightnexthop= right=%defaultroute rightid=@mond.zuhause.netz rightsubnet=192.168.1.0/24 # To authorize this connection, but not actually start it, at startup, # uncomment this. auto=add
Bei "right" steht jetzt der DNS-Name des heimischen Rechners, der Name wird beim Start von ipsec aufgelöst.
# /etc/ipsec.conf - FreeS/WAN IPsec configuration file # More elaborate and more varied sample configurations can be found # in FreeS/WAN's doc/examples file, and in the HTML documentation. # basic configuration config setup # THIS SETTING MUST BE CORRECT or almost nothing will work; # %defaultroute is okay for most simple cases. interfaces=%defaultroute #interfaces="ipsec0=ppp0" # Debug-logging controls: "none" for (almost) none, "all" for lots. klipsdebug=none plutodebug=none # Use auto= parameters in conn descriptions to control startup actions. plutoload=%search plutostart=%search # Close down old connection when new one using same ID shows up. uniqueids=yes # defaults for subsequent connection descriptions conn %default # How persistent to be in (re)keying negotiations (0 means very). keyingtries=0 # RSA authentication with keys from DNS. # leftrsasigkey=%dns # rightrsasigkey=%dns authby=rsasig leftrsasigkey=0sAQP0uJNo... rightrsasigkey=0sAQOEXzB... # VPN connection conn sat-mond # Left security gateway, subnet behind it, next hop toward right. #leftsubnet= left=%defaultroute leftid=@satellit.zuhause.netz #leftnexthop= # Right security gateway, subnet behind it, next hop toward left. rightnexthop= right=rechnername.dyndns.org rightid=@mond.zuhause.netz rightsubnet= # To authorize this connection, but not actually start it, at startup, # uncomment this. auto=add conn sat-sonne # Left security gateway, subnet behind it, next hop toward right. #leftsubnet= left=%defaultroute leftid=@satellit.zuhause.netz #leftnexthop= # Right security gateway, subnet behind it, next hop toward left. rightnexthop= right=rechnername.dyndns.org rightid=@mond.zuhause.netz rightsubnet=192.168.1.0/24 # To authorize this connection, but not actually start it, at startup, # uncomment this. auto=add
Jetzt fehlt noch eine Ergänzung in /etc/init.d/ipsec auf dem Roadwarrior und dann kann's losgehen (mit rcipsec start und ipsec auto --up sat-mond):
##### Addition by BL 12.11.2001 # This is a roadwarrior and his home has a dyn-IP too. # So first we have to find out where our home is. # This is done via a dyndns service, but in case this fails # it can also be done by a script that gets the IP from a # specific website and writes the ipsec.conf accordingly. # (See http://www.dr-lotz.de/freeSWAN-web.html - in this case remove # the "#" in front of . /usr/local/sbin/create_ipsec.conf below.) case "$1" in start|--start) #. /usr/local/sbin/create_ipsec.conf # eth0 wird nicht gebraucht und gibt Fehlermeldungen # beim Start von ipsec /sbin/ifconfig eth0 down ;; stop|--stop) /sbin/ifconfig eth0 up ;; esac ##### End of addition
Noch eine Feinheit zum Schluss. Der Secret Key für die Verbindung liegt in /etc/ipsec.secrets. Wenn das Notebook verloren geht oder gestohlen wird, könnte jemand den Schlüssel verwenden, um eine Verbindung aufzubauen. Daher ist auf dem Notebook /etc/ipsec.secrets ein Link, der auf eine Datei verweist, die auf einer verschlüsselten Partition liegt. Das VPN funktioniert nur, wenn diese Partition beim Systemstart durch Eingabe des Passworts freigeschaltet wurde, ansonsten weist der Link ins Leere.