VPS Docker IPv6

  • Davon rede ich nicht. Ich meinte, wenn du Adressen aus dem mitgelieferten /64 innerhalb eines VPN Tunnels für Remote Geräte nutzt. Das funktioniert nämlich nicht zuverlässig.

    Kann ich nicht bestätigen.
    Meine VPNs haben alle das /64er Präfix vom VPS Host.
    Paketverlust oder instabile Verbindungen kenne ich nicht.

  • Netcup gibt selber die Empfehlung, wenn man weitere IPv6 Adressen aus dem /64er nutzen möchte, diese dem ETH0 zuzuweisen (/etc/network/interfaces).

    Ja, das schrieb ich ja auch oben. Aber davon nutzt du sie ja nicht im Container, vor allem nicht abgehend, selbst wenn du Weiterleitungen per iptables oder sowas einrichtest. Bist du dir darüber im Klaren? Das ist weit weg von der Nutzung weiterer Adressen für deine Container, vor allem auch, wenn du Dienste über IPs trennen willst. Das geht so nicht ohne weiteres. Das Setup in der Firewall wird so sehr komplex.


    So verteilst du einfach nur zusätzliche Adressen auf eth0, nicht mehr und nicht weniger.


    Soll wohl funktionieren, aber sehr umfangreich in der Confi, in Docker als auch im Host.

    Nein, funktioniert nicht, aus den beschriebenen Gründen.


    Meine VPNs haben alle das /64er Präfix vom VPS Host.

    Wo genau verwendest du das? Wieder die Bitte nach Beispielen, zeige mal eine beteiligte Wireguard Config Datei. Meine VPNs nutzen für den Verbindungsaufbau auch das mitgelieferte /64 Netz, aber nicht innerhalb des Tunnels.

  • Aber davon nutzt du sie ja nicht im Container, vor allem nicht abgehend

    Wenn ich mich auf die Console vom Container verbinde und über curl die Seite "wieistmeineip.de" aufrufe, bekomme ich die IPv6 angezeigt, die ich dem Container zugewiesen habe. Was nutzt da jetzt wer nicht wie?



    Das ist weit weg von der Nutzung weiterer Adressen für deine Container, vor allem auch, wenn du Dienste über IPs trennen willst. Das geht so nicht ohne weiteres.

    Also vier Container haben vier getrennte IPv6 für Input und Output. Was will ich jetzt mehr?



    Das Setup in der Firewall wird so sehr komplex.

    Mit UFW ist das eine Zeile pro IPv6.


    Nein, funktioniert nicht, aus den beschriebenen Gründen.

    "Soll wohl...." sollte heißen, dass mir Netcup mit geteilt hat, dass es wohl funktionieren kann, aber sehr komplex in der Einrichtung ist und sie raten mir davon ab.

    Ausprobiert und auseinander gestzt damit habe ich mich nicht.


    Wo genau verwendest du das? Wieder die Bitte nach Beispielen, zeige mal eine beteiligte Wireguard Config Datei.

    Der VPN ist über eine IPv6 erreichbar. Im Tunnel wird ein 10er Netz genutzt. Alles hinter dem VPN, also das was ich erreichen möchte, liegt wieder im /64er vom Host.

    Eigentlich alles recht simple :)

  • Durchaus nicht. Aber nachdem wir hier alle freiwillig helfen können wir uns aussuchen wo und wem wir helfen.

    Bin ganz auf deiner Seite.

    Nach deinem ersten Posting hatte ich keine Lust zu antworten.

    Die Lust hat aber bis dato gereicht um an der Frage vorbei zu schreiben.
    Sehr interessantes Vorgehen -

    Bisschen hart, aber ja, bei solch einem Tonfall hilft man halt nicht sonderlich gerne 🤷‍♂️

  • Wenn ich mich auf die Console vom Container verbinde und über curl die Seite "wieistmeineip.de" aufrufe, bekomme ich die IPv6 angezeigt, die ich dem Container zugewiesen habe. Was nutzt da jetzt wer nicht wie?

    Dann noch mal die Bitte nach konkreten Konfigurationsbeispielen. Was genau hast du da gemacht? Vielleicht ist das eine Lösung auch für andere Problemstellungen.


    Der VPN ist über eine IPv6 erreichbar. Im Tunnel wird ein 10er Netz genutzt. Alles hinter dem VPN, also das was ich erreichen möchte, liegt wieder im /64er vom Host.

    Ja, das meinte ich. Du nutzt das /64 nicht im Tunnel. Dein Setup ist trivial, das muss funktionieren. Spannend wird es ja, wenn auch die andere Seite des Tunnels Adressen aus dem mitgelieferten /64 nutzen soll, z.B. um Geräte ohne IPv6 Anbindung über VPN mit IPv6 Adressen zu versorgen. Das geht aber nicht, wie beschrieben.

  • Dann noch mal die Bitte nach konkreten Konfigurationsbeispielen. Was genau hast du da gemacht? Vielleicht ist das eine Lösung auch für andere Problemstellungen.


    Ja, das meinte ich. Du nutzt das /64 nicht im Tunnel. Dein Setup ist trivial, das muss funktionieren. Spannend wird es ja, wenn auch die andere Seite des Tunnels Adressen aus dem mitgelieferten /64 nutzen soll, z.B. um Geräte ohne IPv6 Anbindung über VPN mit IPv6 Adressen zu versorgen. Das geht aber nicht, wie beschrieben.

    Zu deinem ersten Punkt: Kann ich Morgen mal machen.

    Habe FHEM in einem Container auf einem VPS mit IPv6 only laufen.
    FHEM ist per IPv6 aus dem Heimnetz erreichbar.
    FHEM steuert auch Geräte im Heimnetz über IPv6.
    Meinstest du etwa soetwas?

    Ob es geht Geräte ohne IPv6 nur mit IPv4 anzusprechen - Kann ich nicht sagen, da nicht getestet.

    Die Geräte haben hier alle IPv6.


    Mein anderes VPN als Werbeblocker Container läuft auch exclusive über IPv6.

    Es wird bei "wieistmeineip.de" die IPv6 vom Container und die IPv4 vom Host angezeigt.

    Da alle Firewall Regeln aber IPv6 only sind, wird da nix mit IPv4 möglich sein.
    Hatte aber noch nie Probleme. Eher umgekehrt, als ich noch VPN Werbeblocker mit IPv4 only hatte.
    Einige LTE Netze haben da kein Routing IPv4 --> IPv6 gemacht oder der Container war über IPv4 only erst garnicht erreichbar.


    Seit IPv6 only läuft alles bestens.
    Mir hatte nur der Punkt gefehlt, wie ich mehrere IPv6 aus einem /64er auf mehrere Container bekomme.

    Klar, ein Network unter Docker mit automatischer IPv6 Zuweisung aus einem /64er Block wäre "schöner" gewesen.

    Aber woher sollen die Switche von Netcup wissen, zu welchem Interface(eth0) sie die IPv6 Anfragen schicken sollen, wenn diese nicht dem Interface zugeordnet sind.


    EDIT:
    Ab Morgen gibt es ja wieder ein paar Angebote. Dann werde ich wieder ein paar VPS zum Testen aufsetzen.

    Vielleicht können wir dann zu Punkt 1 kommen.

  • Die Geräte haben hier alle IPv6.

    Ja, aber bei dir zu Hause haben sie IPv6 Adressen vom Internetzugang, auf dem VPS vom /64. Du tranferierst die Adressen nicht durch den Tunnel.


    Einige LTE Netze haben da kein Routing IPv4 --> IPv6 gemacht

    Das geht technisch auch nicht. IPv4 und IPv6 können nicht direkt miteinander reden.

    Aber woher sollen die Switche von Netcup wissen, zu welchem Interface(eth0) sie die IPv6 Anfragen schicken sollen, wenn diese nicht dem Interface zugeordnet sind.

    Dafür gibt es eben den ndppd. Das allein reicht aber nicht. Siehe die Threads, die ich oben verlinkt habe, es gibt weitere über die Suche.

  • Der VPN ist über eine IPv6 erreichbar. Im Tunnel wird ein 10er Netz genutzt. Alles hinter dem VPN, also das was ich erreichen möchte, liegt wieder im /64er vom Host.

    Du tunnelst also IPv6 über IPv4? echt jetzt?

    welche IPv6 hat Dein VPN-client? aber selbst wenn Du zwei IPv6 netze übern tunnel zusammenschaltest brauchst im tunnel wenigstens eine IPv6 ULA, mit einem 10er IPv4 wird das nicht funktionieren.

  • Ja, aber bei dir zu Hause haben sie IPv6 Adressen vom Internetzugang, auf dem VPS vom /64. Du tranferierst die Adressen nicht durch den Tunnel.

    Wir haben uns am Anfang etwas falsch verstanden oder ich habe es nicht so deutlich geschrieben.

    Einige meiner VPS sind exclusive per VPN ins Heimnetz eingebunden.

    Exclusive heißt hier, dass Alles in der Firewall zu gemacht ist und raus kann nur was explizit erlaubt ist, was für VPN lebensnotwendig ist.

    Der Zugriff auf das Internet erfolgt nur über den VPN und das lokale Netz.


    Wenn das nicht der Fall sein sollte, dann dürften meine anderen GPU Server auch nicht funktionieren.


    Du tunnelst also IPv6 über IPv4? echt jetzt?

    welche IPv6 hat Dein VPN-client? aber selbst wenn Du zwei IPv6 netze übern tunnel zusammenschaltest brauchst im tunnel wenigstens eine IPv6 ULA, mit einem 10er IPv4 wird das nicht funktionieren.

    Also funktioniert alles, aber es dürfte eigentlich nicht funktionieren -

    Beide VPN haben auf jeder Seite eine IPv4 10.xxx. Für das was da drüber geht vollkommen irrelevant.

    Bei Wireguard ist die Einrichtung so easy geworden, dass alles andere keinen Sinn mehr gemacht hat.

    Auch die Performance verliert bei dem VPN vielleicht <1% an Speed.


    Das geht technisch auch nicht. IPv4 und IPv6 können nicht direkt miteinander reden.

    Bislang hatten alles Positionen, an denen ich LTE genutzt hatte, IPv6 Unterstützung. Aber leider waren einige darunter, bei denen IPv4 Only Server nicht erreicht werden konnten. Aber das ist ein anderes Thema und nur einer der Auslöser, warum ich mich für IPv6 Only entschieden habe.



    Dafür gibt es eben den ndppd. Das allein reicht aber nicht. Siehe die Threads, die ich oben verlinkt habe, es gibt weitere über die Suche.

    NDPPD ist einfach viel zu umständlich bei der Einrichtung. Daher habe ich eine einfache Lösung gesucht und im Netz gefunden.

    • Best Answer

    Hier nun die "Quicky" Version um Docker Container über IPv6 Only aus dem /64 Block exclusive zugänglich zumachen.

    Diese Lösung ist "noch nicht ganz sauber", d.h. für ausgehende Verbindungen wird zufällig eine der IPv6 von ETH0 genommen. Läst sich dann aber über IP6TABLES weiter einstellen. Zu empfehlen ist auch, dass auf dem Host nichts auf Port 80 und 443 läuft.


    Datei erstellen --> /etc/network/interface.d/60-docker-ipv6-init.cfg

    iface eth0 inet6 static

    address Präfix:1234:1234:1234:1111/64

    gateway fe80::1

    iface eth0 inet6 static

    address Präfix:1234:1234:1234:2222/64

    gateway fe80::1


    Firewall UFW einstellen:

    • ufw allow from any to Präfix:1234:1234:1234:1111 port 80
    • ufw allow from any to Präfix:1234:1234:1234:1111 port 443
    • ufw allow from any to Präfix:1234:1234:1234:2222 port 80
    • ufw allow from any to Präfix:1234:1234:1234:2222 port 443


    Docker Container initialisieren und starten:

    • docker run -d --name test1 -p Präfix:1234:1234:1234:1111:80:80 -p Präfix:1234:1234:1234:1111:443:443 -v /docker/test1/html:/usr/local/apache2/htdocs httpd
    • docker run -d --name test2 -p Präfix:1234:1234:1234:2222:80:80 -p Präfix:1234:1234:1234:2222:443:443 -v /docker/test2/html:/usr/local/apache2/htdocs httpd
  • Wie gesagt, das Vorgehen erlaubt es dir nicht, festzulegen, welche IP dein Container ausgehend benutzt. Bei TCP Verbindungen wird die Antwort vermutlich mit der IP gesendet, über die die Anfrage reinkam. Aber bei verbindungslosen Daten oder Verbindungsaufbauten aus dem Container heraus, wird die Standard-IP des Servers benutzt.

    Zu empfehlen ist auch, dass auf dem Host nichts auf Port 80 und 443 läuft.

    Das kann man ja gezielt steuern, an welche IP ein Server sich klemmt.

  • Wie gesagt, das Vorgehen erlaubt es dir nicht, festzulegen, welche IP dein Container ausgehend benutzt. Bei TCP Verbindungen wird die Antwort vermutlich mit der IP gesendet, über die die Anfrage reinkam. Aber bei verbindungslosen Daten oder Verbindungsaufbauten aus dem Container heraus, wird die Standard-IP des Servers benutzt.

    Das kann man ja gezielt steuern, an welche IP ein Server sich klemmt.

    Letztendlich ist das die simpelste Lösung für den ersten Beitrag/Frage von mir.

    Von dir geschildertes Problem läßt sich dann noch weiter lösen.