Skip to content

IPv6: Dynamische IPs bei Unitymedia

Als Kunde von Unitymedia bekomme ich für all meine Geräte eine IPv6-Adresse zugewiesen. Leider ändert sich diese bei jedem Bootvorgang des Modems.

Motivation

RaspberryPi mit externer FestplatteIch habe einen RaspberryPi mit externer Festplatte und ich möchte, dass er jeden Tag einmal von meinem Rootserver ein Päckchen mit Backups empfängt.

Früher war das bei Unitymedia kein Problem, da sich die einmal zugewiesene IPv4-IP praktisch nie geändert hat. Seit meinem Umzug nach Frankfurt am Main bekommt mein Modem nur noch eine geNATete IPv4-IP, bei der jegliche Portweiterleitung im Router auf das Zielsystem nicht zuverlässig funktioniert. Weiter bekommt jedes meiner Geräte aber eine IPv6-IP, die vollständig erreichbar ist.

Da sie sich entgegen meines Verständnisses von IPv6 regelmäßig ändert, muss ein Hack her.

freedns.io

Da ich keine Lust hatte, auch noch einen DNS-Server zu betreiben, habe ich mich dazu entschieden, den Dienst freedns.io zu verwenden. Diesen kann man per HTTPS-POST einfach aktualisieren. Das API lässt zwar nur zwei Updates am Tag zu, das reicht aber in der Regel für meine Zwecke. Es werden übrigens nur Updates gezählt, bei denen sich der Eintrag tatsächlich ändert.

Somit kann man einen trivialen Cronjob schreiben, der alle 15 Minuten die eigene IP meldet.

*/15     ~/scripts/freednsio.sh

Bei ArchLinux wird das Paket python2-netifaces benötigt, damit das folgende Skript funktioniert.

#!/usr/bin/python2

import urllib
import urllib2
import netifaces

addrs = netifaces.ifaddresses('eth0')
url = 'https://freedns.io/request'
params = {
  'username': 'blipp',
  'password': 'blubb',
  'host': 'hostname',
  'record': 'AAAA',
  'value': addrs[netifaces.AF_INET6][0]['addr']
}

data = urllib.urlencode(params)
req = urllib2.Request(url, data)

try:
  response = urllib2.urlopen(req)
  content = response.read()
  print content
except urllib2.URLError as e:
  print "FreeDNS-Update-Error: %d %s (%s)" % (e.code, e.reason, e.read())

Fazit

Mit diesem etwas unschönen Hack kann man die eigene Maschine ohne große Ausfälle erreichbar halten. Vielleicht hilft es Euch ja auch. :-)

Kommentare

Adrian am :

Ich habe ebenfalls seit ein paar Monaten einen DSlite Anschluss von Unitymedia. Für meinen Heimserver habe ich dabei den sysctl Parameter `net.ipv6.conf.all.use_tempaddr` auf 0 gesetzt, was dazu geführt hat, dass dieser seit rund einem halben Jahr die selbe IPv6 Adresse beibehalten hat. Die häufigen Änderungen der IPv6 Adresse im Normalfall liegen an den Privacy-Extensions welche Tracking über die IP-Adresse erschweren sollen. Gruß, Adrian

Thomas Heidrich am :

Leider war dieser Parameter bei meiner Maschine bereits 0 und ich musste mir den Hack mit dem DNS einfallen lassen. :-(

John am :

Ich bin in der gleichen Situation (DSLite bei Unitymedia). Ich habe eine Freigabe im Router eingerichtet und testweise node.js aufgesetzt und das funktioniert auch im Heimnetz. Von außen bekomme ich aber mit meinHost.freedns.io:port keine Verbindung. Ebenso kann ich den Host von außen nicht pingen ("Kann meinHost.freedns.io nicht finden"). Eine Idee, was falsch läuft?

Thomas Heidrich am :

Kannst Du den Dienst ohne DNS erreichen? Es verhindert wohl noch die Unitymediabox oder der Rechner, auf dem der Dienst läuft, etwas. Prüfe mal die IPv6-Firewalleinstellungen in der Box.

Kommentar schreiben