Deutscheglasfaser - Port Forwarding / Openwrt

  • Hallo Zusammen,

    ich habe heute einen DG-Anschluss bekommen (Wechsel von Inexio DSL).

    Normales Surfen etc. funktioniert nachdem ich einfach den WAN Port auf DHCP und einen WAN6 mit dhcpv6 angelegt habe,

    Dann wollte ich meine diversen Dienste wieder nach Aussen freigeben.

    Bei Inexio hatte ich eine IPv4 Adresse, d.h. dort konnte ich "Port Forwards" anlegen jetzt bei DG gibts keine dyn. IPV4 Adresse mehr also habe ich rules angelegt analog diesem Beispiel (https://openwrt.org/docs/guide-use…ipv6_examples):

    Code
    config rule
    	option src 'wan'
    	option proto 'tcp'
    	option dest 'lan'
    	option dest_ip '2001:db8:42::1337'
    	option dest_port '80'
    	option family 'ipv6'
    	option target 'ACCEPT'

    Ich habe mal die aktuelle komplette IPV6 Adresse als Ziel angeben zum Testen (dest_ip).

    Allerdings ohne Erfolg - ich komme von Aussen nicht drauf.

    Dann habe ich mal alles umgeleitet - auch ohne Erfolg.

    Code
    config rule
            option src 'wan'
            option family 'ipv6'
            option target 'ACCEPT'
            option dest 'lan'
            option name 'Forward to Server'
            list dest_ip '2a00:6020:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx'
            list proto 'all'


    Dann habe ich mal einen traceroute versucht um zu sehen wie weit er kommt:

    Traceroute bleibt scheinbar vorher schon hängen.

    Liegt das Problem bei meiner Config, oder bei DG?

    Viele Dank schonmal fürs Lesen ;)

  • Willkommen im Forum!

    Portforwarding ist bei IPv6 nicht üblich. Jedes Gerät in deinem Heimnetz besitzt (mindestens) eine eigene, weltweit gültige IPv6-Adresse. Diese musst Du lediglich in der Firewall deines Routers für den Zugriff freigeben (besser nur den spezifischen Port für diese Geräte-IPv6).

  • Hallo HubeBube, und Danke für die Willkommensgrüße ;)

    Ja, der interne Rechner hat auch eine öffentliche IPV6 IP.

    Zur Freigabe habe ich die Rules in Openwrt angelegt - ich dachte das sollte so passen.

    Aber scheinbar doch nicht...

  • Tipp: Jetzt kostenlos registrieren, mitmachen und das Forum ohne Werbebanner nutzen.
  • ICMP ist für einen Test auf Konnektivität nicht gut geeignet. Läuft den auf dem Server ein Dienst, der auf Port 80/http antwortet? Die Privacy Extensions hast Du auf dem Server (Windows? Linux?) disabled?

  • Dienste laufen via Podman/Linux und sind von Intern zu erreichen.

    net.ipv6.conf.all.use_tempaddr = 0

    Noch als Nachtrag: Der Router läuft noch mit OpenWrt 19.07.7

    2 Mal editiert, zuletzt von fcc123 (6. Oktober 2023 um 22:42)

  • Tipp: Jetzt kostenlos registrieren, mitmachen und das Forum ohne Werbebanner nutzen.
  • intern meine ich Rechner und Mobile Devices die mit ipv4/v6 am Router hängen.

    Bsp: ssh user@2a00:6020:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx von meinem Windows PC auf die Linux-Box funktioniert.

    Ich kann jetzt ipv4 auf dem PC noch ausschalten, aber ich denke das macht keinen Unterschied.

    Die Nameserverauflösung löst auch korrekt auf (dyn dns auf IPV6 der Servers) und Ping etc. funktionieren wenn ich in meinem lokalen (physischem) Netzwerk bin.

    Edit:

    sshd läuft direkt auf dem Server, nicht in einem Container und der Rechner hört auch auf dem Port:

    Code
    tcp6       0      0 :::22                   :::*                    LISTEN

    Die anderen Dienste laufen fast alle als Container mit ipv4 Netzwerk - d.h. hier ist ggf. ein Problem was ich noch lösen muss, aber ssh sollte zumindest von aussen errreichbar sein.

    4 Mal editiert, zuletzt von fcc123 (7. Oktober 2023 um 02:20)

  • Die Container würde ich erst einmal außen vor lassen, da können sich weitere Baustellen ergeben.

    Es reicht aus sich auf SSH via IPv6 zu beschränken, alles andere ist analog dazu einzurichten.

    Wichtig an dieser Stelle, sofern die Authentifizierung nicht über Zertifikate erfolgt, es dürfen keine erratbaren Accounts mit Standardpasswörtern verwenden werden. Am besten DenyUsers und/oder AllowUsers verwenden.

    Auch sollten DynDNS Einträge noch nicht verwendet werden, sondern die IPv6-Adressen. Dazu ist noch zu sagen, dass sich natürlich der Server und nicht der OpenWRT Router in den DynDNS Eintragen muss.

    Noch eine Sache, die mir einfällt: Dein Router teilt dem Server seine IPv6 Adresse auch aus dem 56er Netz zu, das Du als Präfix von DG erhälst?

  • Wenn du von Container schreibst dann meinst du damit doch Docker Container, richtig?

    Ich habe früher auch viel mit Freigaben in meinem Router gearbeitet, bin mittlerweile aber komplett auf einen Reverse Proxy umgestiegen. Bei mir läuft der NGINX Reverse Proxy in einem Docker auf meinem Unraid Server. Das ist jetzt nur noch der einzige Docker, der bei mir von außen erreichbar sein muss (über Port 80 und 443!).

    Wichtig ist, dass du entweder eine eigene Domaine hast, oder eine DynDNS Adresse mit Subdomains einrichtest. Für jedes Gerät aus deinem Netzwerk, das du von außen erreichen willst, legst du eine Subdomain an. Bei einer eigenen Domain reicht dafür ein cname Eintrag aus, der auf die IP-Adresse (v4 via NAT und/oder v6 direkt) des Dockers verweist. Beim Aufruf der Subdomain geht die Anfrage direkt an den Reverse Proxy Docker und der leitet ab da intern auf das verknüpfte Gerät weiter. Das Ganze lässt sich auch mit SSL absichern.

    Externer Inhalt youtu.be
    Inhalte von externen Seiten werden ohne deine Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklärst du dich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    Schöne Grüße
    Thomas

    Internet/Netzwerk: Fritzbox 5590 Fiber, E.ON Highspeed 1000/500, natives IPv4
    und IPv6 Dual Stack, MikroTik CRS309-1G-8S+IN, MikroTik CRS305-1G-4S+IN
  • Tipp: Jetzt kostenlos registrieren, mitmachen und das Forum ohne Werbebanner nutzen.
  • Die Container würde ich erst einmal außen vor lassen, da können sich weitere Baustellen ergeben.

    Es reicht aus sich auf SSH via IPv6 zu beschränken, alles andere ist analog dazu einzurichten.

    Wichtig an dieser Stelle, sofern die Authentifizierung nicht über Zertifikate erfolgt, es dürfen keine erratbaren Accounts mit Standardpasswörtern verwenden werden. Am besten DenyUsers und/oder AllowUsers verwenden.

    Auch sollten DynDNS Einträge noch nicht verwendet werden, sondern die IPv6-Adressen. Dazu ist noch zu sagen, dass sich natürlich der Server und nicht der OpenWRT Router in den DynDNS Eintragen muss.

    Noch eine Sache, die mir einfällt: Dein Router teilt dem Server seine IPv6 Adresse auch aus dem 56er Netz zu, das Du als Präfix von DG erhälst?

    Ja, für den Test lasse ich es mal offen, aber Du hast Recht - normalerweise habe ich den Port nicht offen.

    Ja, der Server hat einen dyn dns Eintrag.

    Der Server bekommt von Openwrt den öffentlichen Prefix mit und auch den ULA-Prefix.

    D.h. das sieht dann so aus:

  • Wenn du von Container schreibst dann meinst du damit doch Docker Container, richtig?

    Ich habe früher auch viel mit Freigaben in meinem Router gearbeitet, bin mittlerweile aber komplett auf einen Reverse Proxy umgestiegen. Bei mir läuft der NGINX Reverse Proxy in einem Docker auf meinem Unraid Server. Das ist jetzt nur noch der einzige Docker, der bei mir von außen erreichbar sein muss (über Port 80 und 443!).

    Wichtig ist, dass du entweder eine eigene Domaine hast, oder eine DynDNS Adresse mit Subdomains einrichtest. Für jedes Gerät aus deinem Netzwerk, das du von außen erreichen willst, legst du eine Subdomain an. Bei einer eigenen Domain reicht dafür ein cname Eintrag aus, der auf die IP-Adresse (v4 via NAT und/oder v6 direkt) des Dockers verweist. Beim Aufruf der Subdomain geht die Anfrage direkt an den Reverse Proxy Docker und der leitet ab da intern auf das verknüpfte Gerät weiter. Das Ganze lässt sich auch mit SSL absichern.

    Ja, so habe ich es für http/https auch implementiert via npm (nginx proxy manager) und podman statt docker.

    Aber es laufen noch diverse andere Dienste auf dem Server, d.h. ich habe noch einige andere Ports offen.

    Hast Du die Docker Netzwerke konfiguriert, oder nur ipv4?

    Einmal editiert, zuletzt von fcc123 (7. Oktober 2023 um 11:53)

  • Von wo testest du den Zugriff von außen? Ist das ein VPS bei Netcup?

    Ansonsten geh Schritt für Schritt vor. Greife zunächst auf die IP Adressen zu, später dann per dyndns. Mache auf dem VPS einen tcpdump vom Zugriffsversuch, um ggf. ICMP Antworten zu sehen und von wem diese Antworten kommen (OpenWRT Router?). Mache gleichzeitig einen tcpdump auf deinem Router, um dort zu beobachten, was an Traffic ankommt und wie damit verfahren wird. Nicht zuletzt beobachte auf dem Server ebenfalls mit tcpdump, was passiert. So bekommst du ein Bild davon, wie weit die Pakete kommen.

    Neben den eigentlichen Port Rules musst du ja auch die Firewall grundsätzlich so einrichten, dass Zugriffe von außen möglich werden (Policies etc). Ich weiß nicht, wie das bei OpenWRT geht, aber hast du das bedacht?

  • Tipp: Jetzt kostenlos registrieren, mitmachen und das Forum ohne Werbebanner nutzen.
  • Von wo testest du den Zugriff von außen? Ist das ein VPS bei Netcup?

    Ansonsten geh Schritt für Schritt vor. Greife zunächst auf die IP Adressen zu, später dann per dyndns. Mache auf dem VPS einen tcpdump vom Zugriffsversuch, um ggf. ICMP Antworten zu sehen und von wem diese Antworten kommen (OpenWRT Router?). Mache gleichzeitig einen tcpdump auf deinem Router, um dort zu beobachten, was an Traffic ankommt und wie damit verfahren wird. Nicht zuletzt beobachte auf dem Server ebenfalls mit tcpdump, was passiert. So bekommst du ein Bild davon, wie weit die Pakete kommen.

    Neben den eigentlichen Port Rules musst du ja auch die Firewall grundsätzlich so einrichten, dass Zugriffe von außen möglich werden (Policies etc). Ich weiß nicht, wie das bei OpenWRT geht, aber hast du das bedacht?

    Ja, vps bei netcup ;)

    Ich versuche mal tcpdump.

    Grundsätzlich hatte bis gestern morgen alles noch via DSL funktioniert, allerdings hatte ich da noch eine dynamische ipv4 Adresse.

    Die Zonen in Openwrt sind für ipv4 und ipv6 konfiguriert, von daher gehe ich davon aus, dass ich da sauber bin.

    Aber wenn das kein DG Problem ist, dann liegt bei der Firewall der Hase im Pfeffer ;)

  • Aber es laufen noch diverse andere Dienste auf dem Server, d.h. ich habe noch einige andere Ports offen.

    Der einzige Dienst bei mir, den ich nicht via https laufen hatte, war ein FTP-Server. Dafür läuft aber mittlerweile ein CrushFTP-Server. Vorteil bei dem ist die einfache Erreichbarkeit über einen Browser. Port 21-23 müssen dafür nicht mehr geöffnet werden. Für alles andere nutze ich Wireguard um von extern in mein Netzwerk zu kommen.

    Hast Du die Docker Netzwerke konfiguriert, oder nur ipv4?

    Ich habe jetzt kein spezielles Docker Netzwerk angelegt. Die meisten Container bekommen von mir eine feste IPv4 und IPv6 Adresse. Die v6 Adressen sind aber eigentlich nur noch Überbleibsel aus der Zeit von vor dem Reverse-Proxy und an sich nicht mehr notwendig.

    Da ich aber ein großer Freund von IPv6 bin, hatte ich viele Docker halt vorher darüber aus dem Internet erreicht und die Adressen danach einfach belassen.

    Schöne Grüße
    Thomas

    Internet/Netzwerk: Fritzbox 5590 Fiber, E.ON Highspeed 1000/500, natives IPv4
    und IPv6 Dual Stack, MikroTik CRS309-1G-8S+IN, MikroTik CRS305-1G-4S+IN
  • Tipp: Jetzt kostenlos registrieren, mitmachen und das Forum ohne Werbebanner nutzen.
  • Ich habe jetzt die Sache mal mit tcpdump analysiert:

    Wenn ich auf meinem VPS bei Netcup eine ssh Session auf den Server initiiere (mit IPv6 Adresse)

    wandert das IP6 Paket durch den Router auf den Server und der Server schickt ein IP6 Paket zurück zum

    VPS. Dort kommt es aber nicht an.

    Im Router sehe ich das Paket zum VPS noch auf eth0 allerdings nicht auf eth0.2 (WAN,WAN6).

    Das ist zumindest mal die Erklärung warum von "Aussen" meine Dienste nicht erreichbar sind.

    Jetzt ist die Frage warum? ;)

    Einmal editiert, zuletzt von fcc123 (8. Oktober 2023 um 11:48)

  • Tipp: Jetzt kostenlos registrieren, mitmachen und das Forum ohne Werbebanner nutzen.
  • ... und der Server schickt ein IP6 Paket zurück zum VPS. Dort kommt es aber nicht an.

    Was ist denn das für ein Paket? Ein SSH Antwort-Paket oder ein ICMP Paket ala "Port not reachable" oder sowas?

    Im Router sehe ich das Paket zum VPS noch auf eth0 allerdings nicht auf eth0.2 (WAN,WAN6).

    Für alle, die die Konfiguration deines Router nicht auswendig kennen: Das heißt, es kommt auf dem LAN Interface rein, geht auf dem WAN nicht raus? Das hört sich nach Firewall an. Darf das Paket raus? Kann der Server grundsätzlich per IPv6 ausgehend kommunizieren? Und die Firewall kann man doch bestimmt so einstellen, dass sie loggt, warum sie ein Paket verwirft. Du solltest bedenken, dass die Pakete von einer Adresse aus dem Prefix kommen, mit denen der Router an sich nichts zu tun hat, da er selber eine Public IP aus einem anderen Subnetz bekommt. Das muss man berücksichtigen.

  • Ich habe einen neuen Router aufgesetzt (gleiches Model, neueres OpenWRT).

    Alles auf Default gelassen.

    In dem Scenario gehen Ping (ICMP6) Pakete durch und kommen auch wieder zurück.

    Kann der Server grundsätzlich per IPv6 ausgehend kommunizieren?

    Das habe ich ausprobiert - nachdem ich eine default Route gesetzt habe geht das jetzt auch - ich dacht das setzt der Router via RA...

    Ich konnte ssh auf den VPS machen.

    Leider funktioniert der umgekehrte Weg noch nicht.

    Auf dem Server kommt nichts auf port 22 an, die Pakete werden im Router geblock so wie ich tcpdump interpretiere.

    Code
    13:40:53.037396 IP6 mein.vpsbeinetcup.de.56402 > xxxx:xxxx:xxxx:xxxx::130.22: Flags [S], seq 306380445, win 43200, options [mss 1440,sackOK,TS val 91153059 ecr 0,nop,wscale 11], length 0
    13:40:53.037576 IP6 xxxx:xxxx:xxxx:xxxx::130.22 > mein.vpsbeinetcup.de.56402: Flags [R.], seq 0, ack 306380446, win 0, length 0

    In der Firewall habe ich darauf eine Regel angelegt um Daten auf Port 22 durchzulassen - will aber noch nicht.

    Code
    config rule
            option name 'ssh'
            option family 'ipv6'
            list proto 'tcp'
            option src 'wan'
            option src_port '22'
            option dest 'lan'
            option dest_port '22'
            option target 'ACCEPT'