webvoss.de - Hauke Voß im Cyberspace
Impressum & Datenschutz · Sitemap · webvoss.de: Privates > IPv6 Lösungen

IPv6 und Heimautomatisierung

Seit kurzen ist mein Internetanbieter Unitymedia. Satte Bandbreite zu günstigem Preis hat mich gelockt. Wie so manch Anderer auch, habe ich erst recht spät entdeckt, dass man hinter einem DS-Lite-Gateway hängt und es damit ziemlich Essig ist mit Port-Forwarding und IPv4. Da ich parallel auch noch ein wenig mit Heimautomatisierung zu spielen begonnen habe, habe ich natürlich ein gewisses Interesse daran, auch ein paar Funktionen über das Internet zu nutzen.

Auf dieser Seite werde ich so nach und nach dokumentieren, welche Lösungen ich nutze, um dem DS-Lite-Horror zu entkommen.

IPv6

Die gute Nachricht beim Unitymedia-Anschluss: IPv6 geht, ohne dass der Provider sich irgendwie störend dazwischenklemmt. Das lässt sich ganz gut überprüfen, indem man z.B. eine IPv6 Online-Ping-Seite nutzt. Die eigene IPv6-Adresse kriegt man z.B. über Wie ist meine IP raus, wenn man nicht Bordmittel wie ipconfig oder ifconfig nutzt. Das funktioniert sogar mit eingeschalteter Firewall am Technicolor TC7200 Router (sofern die Client-Firewall Ping nicht blockt).

Die Herausforderung besteht also "nur noch" darin, von nicht-IPv6-Netzen auf IPv6-Adressen zuzugreifen. Kommerzielle Anbieter haben hierfür Relay-Lösungen im Angebot, aber dann wäre der Preisvorteil des Unitymedia-Anschlusses schnell dahin. Also: Selbst ist der Mann.

Geräte im Internet mit IPv6 veröffentlichen

Als erstes mal müssen die Geräte, welche man erreichbar haben will, per IPv6 erreichbar sein. Das geschieht auf dem Technicolor TC7200 über Portweiterleitungen. Das ist fast analog zu IPv4 NATting - nur dass hier wirklich weitergeleitet wird, also eben kein NAT stattfindet. Um also meinen Raspberry auf Port 80 ins Internet freizugeben, habe ich folgende Schritte unternommen:

  • Auf dem Raspberry IPv6 aktiviert (in /etc/modules die Zeile ipv6 hinzugefügt und Reboot).
  • Mit ifconfig die IPv6-Adresse des Raspberry ermittelt:

    # ifconfig
    eth0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx
    inet addr:192.168.x.y Bcast:192.168.x.255 Mask:255.255.255.0
    inet6 addr: fe80::AAAA:BBBB:xxxx:xxxx/64 Scope:Link
    inet6 addr: 2aXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX/64 Scope:Global
    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
    RX packets:4881 errors:0 dropped:0 overruns:0 frame:0
    TX packets:1309 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:1000
    RX bytes:794377 (775.7 KiB) TX bytes:158112 (154.4 KiB)

  • Auf dem TC7200 die Weiterleitung eingerichtet:

    Dabei ist "Lokale IP-Adresse" die des Raspberry.

Damit kann ich im Browser die URL http://[<IPv6-Adresse>] aufrufen (<IPv6-Adresse> ist die des Raspberry - die eckigen Klammer müssen mit eingegeben werden!) und lande auf dem Webserver auf meinem Raspberry. Voila!

IPv4 nach IPv6 Relaying

Hier werde ich - soweit ich es ausprobiere - Methoden zum Weiterleiten von IPv4 nach IPv6 beschreiben. Ich kann noch nicht sagen, wie viel hier am Ende stehen wird... Auf jeden Fall wird es nach und anch mehr werden.

HTTP relay

Als erstes habe ich versucht, meinen Raspberry Webserver unter IPv4 erreichbar zu machen. Dafür stehen mir zum Glück folgende Möglichkeiten zur Verfügung:

  • Ein Webhoster...
  • ...der selber IPv6 kann und
  • mir PHP erlaubt.

Letzteres ist nicht so ungewöhnlich - wie es mit IPv6 aussieht, kann ich schwer sagen. Um herauszufinden, ob das eigene Hosting-Paket IPv6 kann, ist ein starkes Indiz die Ausführung von folgendem Befehl (am Beispiel meines Hosters/meiner Domäne) - hier die Windows-Variante, Linux geht aber genauso:

> nslookup webvoss.de
Server: de-dar01a-dns-res-01.dar.unity-media.net
Address: 2a02:908:2:110a::11

Nicht autorisierende Antwort:
Name: webvoss.de
Addresses: 2a03:2900:2::35
134.0.26.182

Die hervorgehobene Adresse ist eine IPv6-Adresse, und damit ein starkes Indiz, dass mein Provider IPv6-fähig ist.

Eine kurze suche im allwissenden Internet ergibt etliche PHP-Proxies, die per PHP Web-Requests weitertunneln. Dieser hier ist recht simpel und gut zu verstehen, weswegen ich ihn installiert habe. Er macht also folgendes: Rufe ich http://webvoss.de/test/demo.html auf, leitet der PHP-Proxy die Anfrage unter der Haube an http://mein.raspberry.de/test/demo.html weiter und liefert dann das Ergebnis an mich zurück. Es sieht also so aus, als wäre mein Raspberry tatsächlich unter der Domäne webvoss.de erreichbar.

Funktioniert auch soweit so gut, ich habe nur eine kleine, recht hemdsärmlig gemachte Änderung eingebaut, so dass ich eine weitere Ebene in die URL einfügen kann - es wird also http://webvoss.de/proxy/test/demo.html an http://mein.raspberry.de/test/demo.html weitergeleitet (ohne /proxy). Insgesamt sehen also die ersten Zeilen im PHP-Proxy-Script so aus:

<?php
/*
* Author - Rob Thomson <rob@marotori.com>

[...]

/* config settings */
$base = "http://[2aXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX]/"; //set this to the url you want to scrape

[...]

$ownURL = $_SERVER['REQUEST_URI'];

/* remove first part of URL to allow for subdirectory */
$URLparts = explode("/", $ownURL);
unset($URLparts[0]);
unset($URLparts[1]);
$newURL = implode("/", $URLparts);

/* $url = $base . $_SERVER['REQUEST_URI']; */
$url = $base . $newURL;

Das geht auch eleganter, reicht mir aber erstmal. Fett hervorgehoben die IPv6 des Raspberry.

Außerdem muss man die .htaccess noch anpassen:

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /proxy/index.php [L]

So eingerichtet, klappt der Zugriff bestens. (Anmerkung: Natürlich gibt es webvoss.de/proxy nicht so - probierte es gar nicht erst )

Was bleibt zu tun? Zugriffskontrolle. Ich will meinen Raspberry noch so einstellen, dass er Webanfragen aus dem Internet ablehnt, außer sie kommen vom Proxyscript. ToDo...

Und: Nur recht statische Webseiten werden so funktionieren. Irgendwann will ich aber das Bild der Raspberry Kamera streamen... ToDo.

Coming next: VPN mit SoftEther

Ein voller VPN-Zugang mit SoftEther sollte sich eigentlich hinkriegen lassen - das gehe ich in den nächsten Wochen mal an.

Zum Seitenanfang