Verschüsselte IPv6-Verbindung zum Heim-Netzwerk
Start des VPN-Clients
Das Starten der VPN-Verbindung benötigt Root-Rechte. Bei manchen Distributionen ist es möglich, die Verbindung zur Bootzeit zu starten, dies ist aber nicht immer erwünscht. Mit nachstehendem Skript kann die Verbindung erstellt werden:
#!/bin/sh # Please set the correct netname, see tinc documantation NETNAME=heimnetzwerk SU_COMMAND= PROTECTED=yes # no graphical tool, you must set one of ###################################### SU_COMMAND=su #SU_COMMAND=sudo # Graphical command will be detected ##################################### # fedora example: beesu ls -l # SU_COMMAND=beesu # openSuse example_ gnomesu -c "ls -l" # SU_COMMAND="gnomesu -c" # ubuntu # SU_COMMAND=gksu # KDE Desktop # SU_COMMAND="kdesu -c" start() { # get interface name iface=`grep -i interface /etc/tinc/$1/tinc.conf| tr '=' ' '` if [ ! -n $iface ] then iface=$1 else iface=`echo $iface | awk '{ print $NF }'` fi # create a persistent tap device if ! ip link sh dev $iface >/dev/null 2>/dev/null then ip tuntap add mode tap dev $iface fi # start vpn tincd -n $1 } stop() { tincd -k -n $1 } case $1 in start)start $NETNAME; exit;; stop) stop $NETNAME; exit;; esac ans=`zenity --list --text "Start / Stop $NETNAME VPN" \ --radiolist --column "Choose" --column "" TRUE Start FALSE Stop` # Search graphical command for cmd in beesu gnomesu gksu do tmp=`which $cmd` if [ $? -eq 0 ] then command=`basename $tmp` break; fi done # if not found set the default if [ ! -n $command ] then command=$SU_COMMAND fi # set args if required and for sudo tell that the # args may not be protected case $command in beesu) SU_COMMAND=beesu ;; gksu) SU_COMMAND=gksu ;; gnomesu) SU_COMMAND="gnomesu -c" ;; kdesu) SU_COMMAND="kdesu -c" ;; su) SU_COMMAND="su root -c" ;; sudo) SU_COMMAND="sudo -u root"; PROTECTED=no ;; esac # call us again with arguments via the root password utility case $PROTECTED in no) case $ans in Start) $SU_COMMAND $0 start home ;; Stop) $SU_COMMAND $0 stop home ;; esac ;; yes) case $ans in Start) $SU_COMMAND "$0 start home" ;; Stop) $SU_COMMAND "$0 stop home" ;; esac ;; esac
Wenn zur Passwort-Abfrage kein GUI-Programm vorhanden ist, können su oder sudo Verwendung finden.
Dieses Skript kann irgendwo auf dem Rechner installiert werden und muss als ausführbar markiert sein:
chmod +x heimnetzVPN.sh
Danach kann ein Starter installiert werden, entweder auf dem Desktop oder in der Task-Leiste. Diese Anwendung muss innerhalb eines Terminals laufen. Falls su oder sudo zum Einsatz kommen, ist das Passwort im Terminal einzugeben.
Firewall
Da die IPv6-Adressen auf der Internet-Seite öffentlich sind, kann auf jedes IPv6-Gerät des Heimnetzes zugegriffen werden. Ein Schutz durch den Router ist nicht gegeben, außer wenn ein Firewall Router-seitig installiert ist. Wenn ein Tunnel zur Verbindung mit dem IPv6-Netz verwendet wird, ist der Rechner auf jeden Fall exponiert. Eine Firewall ist daher ein Muss.
Je nach Distribution stehen unterschiedliche graphische Oberflächen zu Verfügung. In der Regel sind diese zu sehr auf IPv4 getrimmt und für bestimmte Aufgaben nicht gerade leicht handhabbar.
Da Firewalling immer auf iptables bzw. dem IPv6-Pendant ip6tables basiert, kann eine kleine Datei erstellt und später von Hand ergänzt werden. Das Einspielen und Starten der Firewall erfolgt dann über ip6tables-restore < Datei
. Dies sollte auf allen Systemen funktionieren.
*filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p ipv6-icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -i eth0 -j ACCEPT -A INPUT -i eth1 -j ACCEPT -A INPUT -i nat64 -j ACCEPT -A INPUT -i vpn -j ACCEPT -A INPUT -m state --state NEW -m udp -p udp --dport 5353 -d ff02::fb -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 631 -j ACCEPT -A INPUT -m state --state NEW -m udp -p udp --dport 631 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT -A INPUT -m state --state NEW -m udp -p udp --dport 655 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 655 -j ACCEPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT -A FORWARD -p ipv6-icmp -j ACCEPT -A FORWARD -i lo -j ACCEPT -A FORWARD -i eth0 -j ACCEPT -A FORWARD -i eth1 -j ACCEPT -A FORWARD -i nat64 -j ACCEPT -A FORWARD -i vpn -j ACCEPT -A INPUT -j REJECT --reject-with icmp6-adm-prohibited -A FORWARD -j REJECT --reject-with icmp6-adm-prohibited COMMIT
Als erstes nach der Filter-Deklaration und den folgenden drei Zeilen werden angeforderte Nachrichten von externen Diensten zugelassen.
Danach werden alle eingehende ICMPv6-Verbindungen erlaubt, dies ist für den IPv6-Betrieb wichtig.
Der Verkehr von den angegebenen Schnittstellen lo, eth0, eth1 nat64 und vpn wird grundsätzlich erlaubt.
Anschließend werden einige Dienste für eingehende Verbindungen freigegeben (mdns, ipp, ssh, http/https und schließlich tinc (655).
Die Forwarding-Regeln gelten für das interne Netz, deswegen wird für die angegebenen Schnittstellen alles akzeptiert.
Die letzten Regeln senden eine ICMPv6-Fehlernachricht an den Absender zurück.
Die Zulassung weiterer Dienste kann leicht erreicht werden, indem Zeilen
-A INPUT -m state --state NEW -m udp -p udp --dport # -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport # -j ACCEPT
hinzugefügt werden. # steht für die Portnummer des Dienstes. Falls UDP bzw. TCP für den Dienst nicht notwendig ist, sollte die entsprechende Zeile ausgelassen werden.
Bemerkungen
Die Einträge mit IP-Adressen und Namen müssen an die eigenen Gegebenheiten angepasst werden.
Das Tap-Gerät, das mittels des Kommandos ip tuntap ...
angelegt wurde, ist persistent. Dies erlaubt es, immer die gleiche IP-Adresse zu erhalten. Dies ist wichtig für den Fall, dass eine volle Einbindung des Clients ins Heim-Netzwerk erwünscht ist. Ohne dieses persistente Tap-Gerät würde tincd ein neues Gerät (mit einer anderen Mac-Adresse und demzufolge einer anderen IPv6-Adresse) anlegen. Dies könnte das DNS stören, wenn die Verbindung gestoppt und kurze Zeit danach neu gestartet wird.