Server hinter Unitymedia DS-Lite Anschluss betreiben

Wer seinen Internetanschluss bei Unitymedia hat kennt wahrscheinlich das Problem. Dadurch das Unitymedia recht spät ins Internetgeschäft eingestiegen ist, hat man dort halt nicht mehr viele IPv4 Adressen zur verfügung. Das wäre auch eigentlich kein Problem, denn zur doppelt genatteten (tolles Wort) IPv4 Adresse bekommt man bei Unitymedia ein vollwertiges IPv6 Präfix, was sich zwar nach jedem Router Neustart ändern könnte, es bei mir aber noch nie getan hat.

Würden sich jetzt die anderen ISP’s nicht auf Ihren fetten IPv4 Vorräten ausruhen (Danke Telekom, Vodafone und Co.) dann könnte man Problemlos per IPv6 auf den Server zuhause zugreifen. IPv6 -> IPv6 geht ohne Probleme. An den meisten Anschlüssen in Deutschland bekommt man dank solcher Rückständigkeit aber keine IPv6 Adresse und so muss man sich anders behelfen um auf den Server zuhause zugreifen zu können.

Unser Problem: Wir möchten von einem „IPv4 only“ Anschluss auf einen Server hinter einem DS-Lite Anschluss zugreifen.

Die Lösung: Portmapper

Ein Portmapper stellt ein Gateway dar, welches zwischen IPv4 und IPv6 vermittelt. Vereinfacht gesagt es ist ein Server mit einer festen IPv4 und IPv6 Adresse der als Übersetzer fungiert.

Es gibt Portmapper als kommerziellen Service, z.B. von feste-ip.net. Der Service ist günstig und schnell eingerichtet. Man kann sich sogar einen Raspberry Pi mittels Script in eine sog Fip Box verwandeln lassen.

Eines sollte man jedoch nicht vergessen, bei einem solchen Service werden die Daten über den Server des Dienstanbieters übertragen. Sind diese Daten nicht verschlüsselt kann der Anbieter diese in der Theorie mitlesen!

Man kann sich einen solchen Portmapper jedoch auch sehr einfach selber aufsetzen. Wenn man bereits einen VServer betreibt kann diese das gleich mit übernehmen.

Was wir brauchen:

  1. VServer (Linux Betriebssystem, fertig eingerichtete IPv4 sowie IPv6 Adresse)
  2. Die Software 6tunnel
  3. IPv6 Freigabe in eurem DSL Router zu eurem Server (in der Fritzbox unter Internet->Freigaben->IPv6)

Ich werde hier nur die Basis Schritte erläutern, falls Ihr Fragen habt könnt Ihr Sie gerne in den Comments stellen.

Die Sache ist eigentlich sehr simpel. Seht zu das euer VServer bereits für IPv6 eingerichtet ist. Dann installiert Ihr 6tunnel, unter Debian / Ubuntu erledigt das ein apt-get install 6tunnel. Ihr müsst an eurem Router Zuhause natürlich auch schon eine passende IPv6 Freigabe eingerichtet haben.

Nun könnt Ihr den ersten Tunnel auch schon erstellen. Die Synthax ist sehr einfach:

6tunnel IPv4Port IPv6Adress IPv6Port

z.B. 6tunnel 8080 2202:9ef8:1d00:bcff:d268:77ff:feff:4899 8080

oder 6tunnel 8080 server.exampleipv6.com 8080

6tunnel geht automatisch in den Background nachdem es gestartet wurde. Nun müsstet Ihr problemlos über die IPv4 IP eures VServers bzw. über dessen Domain Namen und Port auf euren Server zuhause zugreifen können.

Damit man nicht immer alle Ports einzeln eingeben muss, bzw. man mal schnell die IPv6 Adresse wechseln kann falls der Provider unnötigerweise das Präfix neu auswürfelt habe ich ein kleines (ziemlich häßliches) Script geschrieben: https://gist.github.com/bjoerns1983/2f82045a0995877a78720cb746d8482d

Dieses Script nimmt als erstes Argument start/stop/restart und als zweites die IPv6 Adresse des Homeservers entgegen. Ich habe es nicht mit Domainnamen etc. getestet. Ausserdem kann man das bestimmt auch alles eleganter lösen. Für mich reicht es, denn mit diesem Script kann man auch ein rudimentäres Autoupdate via SSH auslösen, falls sich die IPv6 Adresse des Servers ändert.

Eine Einschränkung. Der Portmapper funktioniert nur mit TCP Verbindungen. VPN’s auf Basis z.B. von IPSEC (also auch das VPN in der Fritzbox) funktionieren damit nicht. Das einzige VPN was mit einem Portmapper funktioniert ist OpenVPN im TCP Modus.

Viel Spass. Bei Fragen einfach kommentieren.

8 Gedanken zu „Server hinter Unitymedia DS-Lite Anschluss betreiben

  1. Hallo Björn.

    Auch ich bin in die „Falle“ Unitymedia DS-Lite Anschluss getappt. Jetzt kann ich aus dem Internet weder auf meine Webcams zugreifen, noch auf meinen NAS und auch mein Sohn kann seinen kleinen Minecraft-Server nicht mehr mit seinen Freunden teilen.

    Deinen Blog habe ich nach langem Suchen gefunden, es scheint kaum Lösungen zu geben, die dieses Probleme wirklich angehen.

    Einige Verständnisprobleme habe ich aber noch.
    Über https://dynv6.com habe ich eine dynamische IP Adresse
    – Wo muss der V-Server denn stehen? Kann es auch ein raspberry Pi sein, der in meinem Heimnetz werkelt?
    – Weder mein NAS, noch die Webcams unterstützen IPv6. Daher müsste doch der portmapper in meinem Heimnetz arbeiten, oder?
    – Wie kommt dann aus: IPv4Port IPv6Adress IPv6Port eine Weiterleitung z.B. an meine Iv4 Webcam? Die kann ja nur IPv4.
    Bisher gab ich folgendes ein: alias.dyndns.net:8086 und wurde per Portweiterleitung meier fritzbox an de Webcam geleitet.

    Würde mich über ein Antwort sehr freuen.
    Danke
    Matthias

    1. Der VServer muss bei einem Hoster stehen, da dieser ja mit seiner öffentlichen IPv4 auf deine IPv6 Adresse übersetzen muss. Es muss sich also ausserhalb deines Netzwerkes befinden. Dafür reicht ein günstiger 2,50€ Server von Netcup. Wichtig ist das es keine Traffic beschränkung gibt. Eine eigene Domain ist auch von Vorteil, diese kannst du auf die IP des Vserver weiter leiten, oder du nutzt einfach die IPv4 Adresse des VServers. Ne Dyn Adresse brauchste nicht.

      Für Geräte die kein IPv6 in deinem Netzwerk unterstützen, brauchst du z.B. einen rPi der das ganze wieder, per 6tunnel in IPv4 übersetzt. Sie Syntax auf dem rPi sollte ungefähr so aussehen: 6tunnel -6 1337 192.168.1.100 1337. Wobei die IP Adresse durch die deiner Kamera und den richtigen Port ersetzt werden muss.

    2. Hallo Matthias,

      Wenn Du schon einen in Deinem Heimnetzwerk werkelnden Raspberry PI hast, und ohnedies Zugang zu einem externen Server mit fixer IP brauchst, könntest Du ja vom Raspberry aus einen reverse tunnel zum externen Server einrichten – ich habe das kürzlich (nicht mit Raspberry, sondern einem anderen Rechner aus meinem Unitymedia Heimnetz) gemacht, um auf meine Kamera zuzugreifen, die auf Port 80 lauscht:

      Also auf Raspberry oder irgendeinem anderen Heimnetzwerkrechner, der online ist, wenn Du von draußen zugreifen willst:

      ssh -N -R 8080:my_cams_local_ip:80 me@my_external_server

      Solange dieser Tunnel aktiv ist (das Kommando nicht abgebrochen wird), kannst jetzt Du über …

      http://my_external_server:80

      … Dein Gerät so ansprechen, als wäre es von außen über …

      http://my_cams_local_ip

      … angesprochen worden.

      Günstig ist es, für das Gerät am Router eine IP zu reservieren, sodass die immer gleich bleibt – andernfalls müsstest Du den Aufruf immer wieder anpassen.

      autossh ist noch praktischer als ssh, weil’s bei Verbindungsverlust automatisch wieder verbindet.

      Eventuell musst Du noch in der ssh config (/etc/ssh/sshd_config)
      GatewayPorts yes
      einstellen und sshd restarten.

      Was ich beschrieben habe ist ein Gedächtnisprotokoll, es könnten also kleine Fehler in meinen Anweisungen geben, aber der Ansatz könnte Dir weiterhelfen.

      Viel Glück,
      der yaccob

  2. Hay ,
    eine Frage wie kann man den sehen welche Ports ich bereits eingetragen habe bzw wie kann ich die dann wieder entfernen ? Hatte z.b den Port 1194 mit 6tunnel erstellt denn muse ich jetzt aber editieren ?

    1. Du kannst dir die Tunnel mit ps ax | grep 6tunnel anzeigen lassen und dann die Killen die du nicht mehr brauchst.

      Oder du benutzt das kleine häßliche Script was ich gepostet habe.

  3. Hallo björn ich habe nun ein problem ich habe ein root nit 2 ip4 adressen nun möchte ich von ip 2 den port 1234 nach der ipv6 zu mir nach hause leiten den auf der 1 ipv4 ist der port schon belegt wie sage ich den 6tunnel das er die 2 ipv4 nehmen soll ich bekomme ja auch ne 2 ipv6 auf dem server vielen dank für hilfe oder ev ein script beispuöiel

    1. Ich habe sowas noch nie probiert und auch keine Möglichkeit das hier zu testen. SO wie ich das sehe gibt es aber zwei mögliche Lösungen die ich in der Manpage zu 6tunnel gefunden habe 6tunnel manpage.
      1. Man nutz die local host direktive (kleines l) etwa so: 6tunnel -l 192.168.2.102 8080 2202:9ef8:1d00:bcff:d268:77ff:feff:4899 8080
      oder
      2. oder man versucht es mit der map file die in der manpage beschrieben wird

      Probier es mal und gib Feedback.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.