Skip to main content
Warum O2 Service

SSH Server hinter UDM-Pro an O2 Kabel - port forwarding


Nun da ich meinen UDM-Pro hinter meiner FritzBox 6660 mit seiner statischen IPv6 Adresse aus dem Internet pingen kann, wie in meinem Post hier beschrieben:

 Wollte ich damit nicht aufhören, sondern nun auch meiner Server hinter dem UDM-Pro aus dem lokalen LAN im Internet über IPv6 und auch über IPv4 verfügbar machen. Da ich wie gesagt aufgrund der Eigenheiten des O2 Kabel Anschluss für meine lokalen Netzwerke hinter dem UDM-Pro NAT benutze, geht dies nur mit Port Forwarding. Der UDM-Pro unterstützt in seiner GUI (weder legacy noch neues Design) jedoch kein IPv6 Port Forwarding, da dies per Design von IPv6 ja eigentlich nie erforderlich wäre, außer man hängt halt an einem O2 Kabel Anschluss.

Aber zuerst einmal ein einfaches Exposed Host für den UDM-Pro auf der FritzBox einrichten:

Mein SSH Server läuft auf einen Raspberry Pi mit Bullseye. Dort solltet ihr bereits vom UDM-Pro eine lokale IPv6 Adresse zugewiesen bekommen haben, aus den Netzen wie in meinen ursprünglichen Post definiert. Da ich mir die IP Adressen meiner Server gerne merke, verwende ich “sprechende” lokale IPs. So hat mein SSH Server halt die IPv4 192.168.1.22 (wegen Port 22 für SSH, logisch?). Deshalb habe ich auch gleich eine entsprechende statische lokale IPv6 auf dem Raspberry Pi vergeben. Dies geht in /etc/dhcpcd.conf wie in vielen anderen Foren beschrieben:

 Also entspricht bei mir die statische IPv4 192.168.1.22 der IPv6 fd8b:b7d0:aa03:1::22/128. Diese brauchen wir gleich für das Port Forwarding. Aber erst noch ein Test vom UDM-Pro aus, ob der SSH Server auch wirklich unter dieser IPv6 erreichbar ist:

Man beachte, dass ich den SSH Port auf dem Raspberry Pi von 22 auf 4422 verlegt habe. Dies ist z.B. hier nachzulesen: https://www.thomas-krenn.com/de/wiki/Absicherung_eines_Debian_Servers#SSH_Port_.C3.A4ndern Nehmt am besten einen TCP Port, welcher noch nicht standardmäßig mit einem Dienst belegt ist. 

Nun kommt der komplizierte Teil, dessen Lösung ich diesem Post von whoami0501 hier zu verdanken habe: https://forum.netcup.de/administration-eines-server-vserver/vserver-server-kvm-server/p143920-ipv6-weiterleitung-iptables/#post143920

Auf euren UDM-Pro müsst ihr noch bevor irgendwelche in der GUI konfigurierten Regeln greifen das entsprechende Port Forwarding eintragen. Ja, damit hebelt ihr das IPS und GeoIP Filtering des UDM-Pro für genau diesen einen Port und Destination host aus, aber ist halt auf eigenes Risiko und der SSH Server sollte entsprechend gesichert sein:

Hier ist via Destination NAT der Port Forward von 4422 ankommend auf euren WAN Interface (eth8) des UDM-Pro an die lokale IPv6 des SSH Servers (hier fd8b:b7d0:aa03:1::22), auch port 4422.

ip6tables -t nat -A PREROUTING -i eth8 -p tcp --dport 4422 -j DNAT --to [fd8b:b7d0:aa03:1::22]:4422

Nun noch ein paar Löcher in die Firewall des UDM-Pro, damit der Traffic auch durchgeht. Wichtig ist hierbei nicht -A (für Append), sondern -I (für Insert) zu nutzen, damit diese beiden Regeln gleich an 1. und 2. Stelle eingefügt werden, also noch VOR! den in der GUI definierten Rules:

ip6tables -I FORWARD 1 -p tcp --dport 4422 -d fd8b:b7d0:aa03:1::22 -m state --state NEW -j ACCEPT
ip6tables -I FORWARD 2 -p tcp --sport 4422 -s fd8b:b7d0:aa03:1::22 -m state --state RELATED,ESTABLISHED -j ACCEPT

Das Ergebnis sollte bei der Chain FORWARD dann so ähnlich aussehen:

 

Nun das ganze Konstrukt aus dem Internet testen. Dafür nutze ich einen billigen VPS (virtual private server) mit öffentlicher statischer IPv4 und IPv6 Adresse. Diesen gibt es bei vielen Anbietern für günstig Geld zu haben. Wenn alles geklappt hat, könnt ihr euch aus dem Internet auf euren SSH Server im LAN hinter dem UDM-Pro einloggen:

Ihr solltet dann auch die IPv6 Adresse eures VPS als Login Adresse im SSH Server sehen.

Als kleines Bonus zum Schluss, da nicht alle Clients IPv6 sprechen, mit denen ihr euch vielleicht mal auf euren SSH Server aus dem Internet einloggen wollt hier noch der Verweis auf 6tunnel unter Debian. Einfach “apt-get install 6tunnel” ausführen und dann könnte ihr einen Tunnel wie folgt aufbauen:

# 6tunnel 4422 2a02:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:2379 4422

Somit ist euer SSH Server nun auch über die IPv4 bzw. Hostname des VPS aus dem Internet erreichbar. Nun wird auch ersichtlich, warum ich einen anderen Port als 22 genommen habe, da auf Port 22 ggfs. ja noch das SSH des VPS läuft.

Sollte sich einmal euer IPv6 Präfix ändern, dann einfach eine neue statische IPv6 für euren UDM-Pro zusammen basteln, wie in meinen ersten Post beschrieben und 6tunnel mit der neuen IPv6 erneut ausführen. Es gäbe wohl auch noch Wege dies über DynDNS Einträge u.ä. zu automatisieren, diesen bin ich aber nicht nachgegangen.

Unterm Strich könnt ihr nun über euren VPS alle Server aus dem LAN im Internet freigeben, sogar mit statischer IPv4.

4 Antworten

  • Autor
  • Lehrling
  • 20 Antworten
  • 24. Juni 2022

Noch ein kleiner Nachtrag für eure älteren Geräte, welche überhaupt kein IPv6 unterstützen. Leider gibt es noch keine Möglichkeit, welche mir bekannt wäre mittels iptables von IPv6 einen Port auf IPv4 Adresse zu mappen. Deshalb benötigt ihr ein kleines zusätzliches Programm socat, wie hier beschrieben: https://serverfault.com/questions/276515/use-iptables-to-forward-ipv6-to-ipv4

Also auf euren Raspberry Pi oder anderen Debian Server im lokalen Netz hinter dem UDM-Pro:

apt-get install socat
socat TCP6-LISTEN:8081,fork TCP4:192.168.1.30:8081 &

Damit lauscht socat auf allen IPv6 Adressen eures lokalen Servers für den port 8081 und leitet die Requests an euren zweiten Server 192.168.1.30 weiter, z.B. Loxone Miniserver Gen 1 (der macht kein IPv6). Nun das übliche IPv6 port forwarding wie oben:

ip6tables -t nat -A PREROUTING -i eth8 -p tcp --dport 8081 -j DNAT --to [fd8b:b7d0:aa03:1::22]:8081
ip6tables -I FORWARD 1 -p tcp --dport 8081 -d fd8b:b7d0:aa03:1::22 -m state --state NEW -j ACCEPT
ip6tables -I FORWARD 2 -p tcp --sport 8081 -s fd8b:b7d0:aa03:1::22 -m state --state RELATED,ESTABLISHED -j ACCEPT

Und auf euren VPS noch ein IPv6 auf IPv4 Mapping:

6tunnel 8081 2a02:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:2379 8081

Und schon klappt es auch mit eurem alten Smart-Home von unterwegs, selbst aus dem O2 Mobilfunk Netz. (Natürlich vorausgesetzt im Falle des Loxone Miniservers habt ihr dort euren VPS hostname hinterlegt und nutzt nicht mehr die DNSCloud Lösung von Loxone)

Somit wären auch alten nicht IPv6 fähige Geräte aus eurem LAN hinter dem UDM-Pro mit einer festen IPv4 im Internet erreichbar.

Alles etwas unschön und frickelich, aber dafür ist O2 Kabel 1000 halt schnell und günstig. 


  • Autor
  • Lehrling
  • 20 Antworten
  • 25. Juni 2022

Kleine Ergänzung zu oben noch um die Sicherheit etwas zu erhöhen. Es funktioniert auch, wenn die FORWARD rules erst an zweiter Stelle hinter dem IPS des UDM-Pro aber noch vor dem UBIOS_FORWARD_JUMP eingefügt werden. Dazu einfach die Listennummer im ip6tables Command austauschen:

ip6tables -I FORWARD 2 -p tcp... 

ip6tables -I FORWARD 3 -p tcp...


  • Autor
  • Lehrling
  • 20 Antworten
  • 25. Juni 2022

Und es geht doch im UDM-Pro selbst. Tatsächlich lassen sich die ip6tables auch mit Hilfe der Legacy GUI im UDM-Pro auch abbilden. Dies hat den Vorteil, das die Rules natürlich einen Neustart des UDM-Pro überleben und weniger Handgriffe danach erfordern. Folgendes Vorgehen:

Zur erst mal zwei Gruppen für die IPv6 eures Servers und die Ports der Freigabe anlegen

 

Sicherstellen, dass diese dann auch in eurer Portliste auftauchen.

Nun unter Rules IPv6 und WAN IN eine neue Regel für den Destination port erstellen.

Und dann das gleiche noch für den Source port.

Beide Regeln sollten dann unter euren WAN IN Rules IPv6 auftauchen.

Nach einem Neustart auch gerne mal auf die Console mit einen “ip6tables -L -v -n” nachschauen und siehe da, die Regeln sind da an erster und zweiter Stelle unter UBIOS_WAN_IN_USER

 

Somit sollte nun auch für eure IPv6 Portfreigaben das GeoIP Blocking des UDM-Pro und andere Sicherheitsfeature wieder funktionieren. Was jedoch immer noch notwendig ist, ist das NAT für IPv6 nach jedem Neustart des UDM-Pro erneut zu initialisieren:

ip6tables -t nat -A POSTROUTING -o eth8 -j MASQUERADE
ip6tables -t nat -A PREROUTING -i eth8 -p tcp --dport 4422 -j DNAT --to [fd8b:b7d0:aa03:1::22]:4422
ip6tables -t nat -A PREROUTING -i eth8 -p tcp --dport 8081 -j DNAT --to [fd8b:b7d0:aa03:1::22]:8081

 


o2_Larissa
  • Team
  • 9164 Antworten
  • 15. Juli 2022

Wow, hier hast du ja auch super viel gebastelt. Ich hab echt einen wahnsinns Respekt vor so viel technischem Know-How 💪
Da kann man ja nur neidisch auf das Fachwissen sein 🙈


Deine Antwort