Login
Newsletter
Werbung

Do, 26. April 2012, 15:00

Verschüsselte IPv6-Verbindung zum Heim-Netzwerk

Dieser Artikel beschreibt die Einrichtung eines VPNs über IPv6 mittels tinc.

Beim Zugriff auf das heimische Netzwerk vom Internet aus ist es von Vorteil, wenn man eine verschlüsselte Verbindung aufbaut. Eine kleine Untersuchung der vorhandenen Möglichkeiten zeigt, dass die Verwendung des IPSec-Features des Kernels nicht unbedingt das Einfachste ist. Einige Arbeiten sind notwendig, und die sind nicht jedermanns Sache. Ein Ausflug in der Welt der VPN-Programme (openVPN, openswan und tinc) offenbart, dass tinc vielversprechend ist.

Die Einrichtung von tinc bedarf eigentlich wenig Arbeit, aber die Dokumentation, die ich gefunden habe, ging über den Umweg von IPv4 und dies ist für einen Zugriff auf mein internes Netz nicht möglich, ich kann kein Port Forwarding oder ähnliches einstellen. Zudem gefällt es mir nicht, jedes Gerät das ich auf Reisen mitnehme, extra mit einer IPv6-Adresse zu versehen.

Nach meiner Vorstellung sollte kein Mesh-Netz, wie bei tinc vorgesehen, vorhanden sein. Für die von tinc angebotenen Einrichtungsbeispiele werden immer die kürzesten Wege zwischen den verschiedenen mobilen Teilnehmern genommen, ohne den Umweg über den Heim-Router. Wenn eine Gruppe zusammenarbeitet, mag dies sinnvoll sein. Mit den aktuellen Übertragungsraten dürfte dieses Vorgehen nicht mehr so notwendig sein, außer wenn eine absolute Sicherheit gegenüber dem Ausfall einer der Komponenten des Netzes wichtig ist.

Außerdem sollten alle potentiellen Clients mit der gleichen Konfiguration versehen sein. Das Festlegen einer festen IPv6-Adresse und das Pflegen des Name-Servers auf dem Heim-Server sollten vermieden werden.

IPv6 bietet die Möglichgeit der »automatischen zustandslosen Adresskonfiguration«, und diese sollte verwendet werden. Die Vergabe der Adresse per DHCP dürfte nicht das Wahre sein. Dabei werden Software-Netzwerkschnittstellen verwendet, die beim Erzeugen eine neue Hardware-Adresse (MAC) erhalten. Dies würde dazu führen, dass die zugewiesene Adresse sich ständig ändert und die DHCP-Lease-Dateien sich aufblähen.

Das Heim-Netzwerk

Jean-Jacques Sarton

Das Heim-Netzwerk

Unser Heim-Netzwerk

Wir gehen hier von folgenden Gegebenheiten aus:

  • Externe IP-Adresse des Servers: 2001:db8:1::2
  • Präfix unseres Netzwerks: 2001:db8:cafe::/48
  • Lokales Subnetz:
    • 2001:db8:cafe:1::/64 Lokale IPv6-Geräte
    • 2001:db8:cafe:2::/64 Lokale IPv4-Geräte über tayga (NAT64)
    • 2001:db8:cafe:3::/64 Segment für externe IPv6-Geräte
  • Privater Domänenname: localnet

Der Server ist bereits mit IPv6 eingerichtet, so dass nur die VPN-Verbindungsmöglichkeit zusätzlich hinzu kommt.

Server vorbereiten

Netzwerk-Verbindungen werden mit tinc über einen frei vergebbaren Netzwerknamen angegeben. Da wir unser Heim-Netzwerk einbinden wollen, schlage ich »heimnetz« vor.

Als erstes muss das Verzeichnis /etc/tinc/heimnetz/hosts angelegt werden:

mkdir -p /etc/tinc/heimnetz/hosts

Wir können nun die Datei /etc/tinc/heimnetz/tinc.conf erstellen. Sie hat nachstehenden Inhalt:

Name = heimnetz
Mode = switch
Interface = vpn
forwarding = kernel

Als Name für die Netzwerk-Schnittstelle des VPN-Servers wurde »vpn« gewählt. Dieser Name wird in den Firewall-Regeln verwendet.

Die Zeile forwarding = 1 ist für tinc-Versionen kleiner 1.0.17 notwendig, für 1.0.17 kann stattdessen DecrementTTL = no eingetragen werden und ab Version 1.0.18 kann die Zeile entfallen.

Damit tinc die notwendigen Netzwerkschnittstellen-Parameter anlegen kann und den erforderlichen Dienst startet bzw. anhält, werden die Skripte tinc-up und tinc-down aufgerufen. Das Startskript tinc-up auf dem Server sieht wie folgt aus:

#!/bin/sh
# File tinc-up
ip link set dev $INTERFACE up
ip link set mtu 1280 dev $INTERFACE
ip ad ad 2001:db8:cafe:3::1/64 dev $INTERFACE 
ip ro ad default via 2001:db8:cafe:3::1 dev $INTERFACE

function startRadvd()
{
cat </tmp/radvd.conf >>!
interface heimnetz
{
   AdvSendAdvert on;
   MinRtrAdvInterval 300;
   MaxRtrAdvInterval 600;
   prefix 2001:db8:cafe:3::/64
   {
       AdvOnLink on;
       AdvAutonomous on;
       AdvRouterAddr on;
   };
   RDNSS 2001:db8:cafe:3::1 { };
   DNSSL localnet { };
};      
!
chmod 554 /tmp/radvd.conf
sleep 1
radvd -p /tmp/radvd.pid -C /tmp/radvd.conf -u radvd
sleep 1
ninsd -i $INTERFACE -p /tmp/ninsd.pid
}

startRadvd &

Die externen Rechner werden ihre Routing-Informationen sowie die Adresse des Name-Servers des Heimnetzes und die Domänen-Suchliste über das »Router Advertisement« erhalten. Die Konfigurationsdatei wird hier im Skript erstellt, könnte aber auch statisch vorliegen.

Mit dem Start des Daemons ninsd kann auch aus dem lokalen Netzwerk das externe System per Name aus dem Heimnetzwerk erreicht werden. Dies ist optional. Als Name-Server geben wir die Adresse des Tinc-Netzwerkgerätes an. Diese Adresse wird Client-seitig benötigt.

Mit ein wenig mehr Skripten können die Adressenteile usw. dynamisch bestimmt werden. Solch ein Skript wird später beschrieben.

Die Schnittstelle und die Dienste sollten nur so lange wie nötig vorhanden sein. Das Skript tinc-down sorgt für die Aufräumarbeiten:

#!/bin/sh
# File tinc-down

killme()
{
pid=`cat /tmp/$1.pid`
if [ "x$pid" != "x" ]
then 
    kill $pid
fi
}

ip set dev $INTERFACE down

killme radvd
killme ninsd

Eine verschlüsselte Verbindung setzt Schlüssel voraus, diese können nun erzeugt werden:

# tincd -K -n <span class="red">heimnetz</span>
Generating 2048 bits keys:
.......+++ p
............................................................+++ q
Done.
Please enter a file to save private RSA key to [/etc/tinc/heimnetz/rsa_key.priv]: 
Please enter a file to save public RSA key to [/etc/tinc/heimnetz/hosts/heimnetz]: 

Beide Fragen sollten mit [RETURN] bestätigt werden.

Im Verzeichnis hosts befindet sich der öffentliche Schlüssel des Servers. Er muss später auf jeden mobilen Rechner kopiert werden. Eine weitere wichtige Information über den Zielrechner ist seine Adresse oder sein Name. Diese Information muss jedem Client bekannt sein und wird daher in der Datei /etc/tinc/heimnetz/hosts/heimnetz eingetragen:

Address = 2001:db8:1::2
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEApzgk/MxBdWrCO9up+9ii146i76X+dsBsi+DhOyU2nT8xKJrSJq/P
4jv/OxmpC8NcmZPfuyOQxLMxczCBTLtM8rrPanBud7IpHg+tDS8wff5jox2iFK3R
AqNRubCnms3DD0PUDnC8OTHQsQ0Dl03EXjNxUhIExEi881Kbth2XMRIUW6yH/fr9
MP6DBG16w/Uf8pfReeuQyku1iITloVErvsSkFi7RTEY49BKkzrvehcHuVGltiRzy
SYe+IHnTTQarpq0MovaogEq4zPp/Ka4W6vb6ey5NVU/mjFtDenIZF1b+qrAelwPP
N5J5IhwRk49Zr7LF+5oHFsYyNRqDyFbB2QIDAQAB
-----END RSA PUBLIC KEY-----

Die hier aufgeführte Adresse ist die Adresse des Servers auf der Internet-Seite. Wenn ein Name vorhanden ist (z.B. mittels dynDNS.org), kann dieser Name anstelle der Adresse eingetragen werden. Dies ist vor allem bei einer dynamisch bezogenen »Haupt«-IPv6-Adresse unerlässlich.

Address = anna.dyndns.org

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