Login
Newsletter
Werbung

Do, 26. April 2012, 15:00

Verschüsselte IPv6-Verbindung zum Heim-Netzwerk

Vorbereitung der mobilen Geräte

Die Einrichtung der Clients unterscheidet sich nur geringfügig von der Einrichtung des Servers. Einige Hürden müssen aber seitens der Netzwerkschnittstelle übersprungen werden.

mkdir -p /etc/tinc/heimnetz/hosts

Die Konfigurationsdatei /etc/tinc/heimnetz/tinc.conf sieht wie folgt aus:

Name = bernd
Mode = switch
Interface = vpn
ConnectTo = heimnetz

Hauptunterschied zur Konfigurationsdatei der Server ist der Eintrag ConnectTo = heimnetz. Damit kann der Client gezielt in dem passenden Verzeichnis (/etc/tinc/heimnetz) die notwendigen Informationen finden.

Das Generieren der Schlüsseldateien ist identisch zur Generierung auf dem Server:

tincd -K -n heimnetz
...

Die öffentliche Schlüsseldatei bedarf keiner weiteren Änderungen. Die Dateien /etc/tinc/heimnetz/tinc-up und /etc/tinc/heimnetz/tinc-down unterscheiden sich aber von denen des Servers.

Nachdem die Schnittstelle in den Zustand up gesetzt wurde, ist sie noch lange nicht initialisiert. Sofort nach dem Hochfahren werden interne Prüfungen vorgenommen. Erst nachdem diese erste Phase der Initialisierung abgeschlossen und eine Adresse vergeben wurde, können Routen festgelegt werden. Bis zum Vorhandensein der Adresse dauert es auch ein wenig. In der Testumgebung, alles im lokalen Netz, wird eine Adresse nach ca. 2 s zugewiesen. Der Versuch, das Routing nach 2 oder 3 Sekunden zu setzen, scheitert.

Die Überwachung der Schnittstelle auf das Vorhandensein der globalen IPv6-Addresse, um nach deren Erkennung die Route zu setzen, ist der richtige Weg. Da die Adresse sich unter Umständen im Präfix ändern könnte, wurde das kleine Programm set_route geschrieben.

Damit der Client namentlich auf Systeme des privates Netzes zugreifen kann, muss der Name-Sserver des heimischen Netzes und nicht irgendein anderer Name-Server abgefragt werden. Die Lösung hierfür ist es, die Datei /etc/resolv.conf neu zu erzeugen, wobei der alte Stand aufbewahrt wird. Somit kann beim Stoppen der VPN-Verbindung die ursprüngliche Konfiguration wieder hergestellt werden. Diese Aufgabe wird vom Programm radvc wahrgenommen.

#!/bin/sh
# File tinc-up
ip link set dev $INTERFACE up
ip link set mtu 1280 dev $INTERFACE
radvc -d /etc/tinc/$NETNAME/$INTERFACE -p /etc/tinc/$NETNAME/radvc.pid
set_route -i $INTERFACE &
echo $! > /etc/tinc/$NETNAME/$INTERFACE -p /etc/tinc/$NETNAME/set_route.pid

Nach dem Hochfahren der Schnittstelle wird der Daemon radvc aufgerufen. Radvc wertet die Router-Advertisement-Nachrichten aus und erkennt die IP-Adresse des Name-Servers und die passende Suchliste, z.B. example.org oder localnet. Damit kann eine neue Datei /etc/resov.conf erzeugt werden.

Damit die SLAAC (Zustandslose Adressen-Autokonfiguration) möglich wird, aber dennoch eine statische Route für den Bereich 2001:db8:cafe::/48 (das ganze lokale Netz), muss ein wenig getrickst werden. set_route überprüft zyklisch, ob die Tinc-Schnittstelle mit einer globalen Adresse versehen ist. Sobald dieser Zustand erkannt wird, wird die Schnittstelle auf Forwarding gestellt und die errechnete statische Route gesetzt. Letzeres geschieht im Skript tinc-slaac.

Wenn radvc auf allen Clients installiert ist und alle Netzwerkschnittstellen überwacht sind, sollte radvc nicht erneut aufgerufen werden. In diesem Fall sollte dem Daemon radvc eine zusätzliche Startoption gegeben werden (-i vpn). Dies bewirkt, dass die Tinc-VPN-Netwerkschnittstelle (vpn) als solche behandelt wird und dass die Datei /etc/resolv.conf entsprechend dem Vorhandensein oder Nichtvorhandensein der VPN-Verbindung verwaltet wird.

#!/bin/sh
# File: tinc-slaac

sysctl -w net.ipv6.conf.$INTERFACE.forwarding=1;

ip route add $PREFIX_NET/$MASK_NET via $PREFIX_SUBNET$SUFFIX dev $INTERFACE

Dieses Skript wird im Verzeichnis /etc/tinc/home erwartet.

Wenn tinc beendet wird, werden mit dem Skript tinc-down die notwendigen Aufräumaktionen erledigt:

#!/bin/sh
# File tinc-down
if [ -f /etc/tinc/$NETNAME/set_route.pid ]
then
kill `cat /etc/tinc/$NETNAME/set_route.pid`
rm -f /etc/tinc/$NETNAME/set_route.pid
fi
sysctl -w net.ipv6.conf.$INTERFACE.forwarding=0

ip link set dev $INTERFACE down

if [ -f /etc/tinc/$NETNAME/radvc.pid ]
then
kill `cat /etc/tinc/$NETNAME/radvc.pid`
fi

Falls eine Verbindung nicht zustande kam, existiert noch der Prozess set_route und wird hier beendet. Danach wird die Netzwerkschnittstelle heruntergefahren und radvc beendet.

Alternativ kann der Client eine feste IP-Addresse erhalten, In diesem Fall könnten die Skripte tinc-up und tinc-down so aussehen:

#!/bin/sh
# File tinc-up
ip link set dev $INTERFACE up
radvc -d /etc/tinc/$NETNAME/$INTERFACE
sysctl -w net.ipv6.conf.$INTERFACE.forwarding=1
ip -6 ad ad 2001:db8:cafe:3::24 dev $INTERFACE
ip -6 ro ad 2001:db8:cafe::/48 via 2001:db8:cafe:3::1 dev $INTERFACE

#!/bin/sh
# File: tinc-down
sysctl -w net.ipv6.conf.$INTERFACE.forwarding=0

ip link set dev $INTERFACE down

if [ -f /etc/tinc/$NETNAME/radvc.pid ]
then
kill `cat /etc/tinc/$NETNAME/radvc.pid`
fi

Schlüsseldateien des Servers und der Clients

Damit die Protagonisten sich verständigen können, müssen die privaten Schlüssel bekannt sein. Diese befinden sich im Verzeichnis /etc/tinc/heimnetz/hosts. Die Datei des Servers, in unseren Fall heimnetz, muss in den oben genannten Ordner jedes Clients kopiert werden. Da diese Schlüssel nur dann funktionieren, wenn die Gegenstelle ihre passende private Version besitzt, spricht nichts gegen das Austauschen der Schlüsseldatei per Mail oder einem anderen Medium.

Die öffentlichen Schlüsseldateien der Clients sind auf den Server, ebenfalls ins Verzeichnis /etc/tinc/heimnetz/hosts zu kopieren.

Kommentare (Insgesamt: 1 || Alle anzeigen )
Korrektur (hans, Fr, 27. April 2012)
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung