Docker extern nur IPv6

  • Heyo, ich habe da (wieder einmal) ein Problem(chen) :)


    Ich nutze Docker 18.09.0 unter Ubuntu 18.10. Ich versuche schon länger die Container für IPv4 und IPv6 erreichbar zu machen (v4 alleine würde mir zur Not auch reichen), aber irgendwie will das nicht so richtig. Wenn ich beim Erstellen eines Containers nur den jeweiligen Port angebe, dann komme ich von außen nur via IPv6 drauf. Gleiches gilt für "0.0.0.0:PORT".

    Netstat gibt diesen Port dann auch nur als tcp6 aus.

    Code
    1. # netstat -tulpn
    2. Active Internet connections (only servers)
    3. Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
    4. [...]
    5. tcp6 0 0 :::23 :::* LISTEN 21964/docker-proxy
    6. [...]

    Auf dem Server selbst kann ich mich jedoch via IPv4 mit dem Port verbinden, grundsätzlich würde ich also ein Problem von Docker für unwahrscheinlich halten.

    In der sysctl.conf steht folgendes (nebenbei läuft noch OpenVPN):

    Code
    1. net.ipv4.ip_forward=1
    2. net.ipv6.conf.all.forwarding=1
    3. net.ipv6.conf.all.proxy_ndp=1
    4. net.ipv4.conf.all.accept_redirects = 0
    5. net.ipv6.conf.all.accept_redirects = 0
    6. net.ipv4.conf.all.send_redirects = 0

    Hat vielleicht jemand eine Idee, wieso ich von extern nur via IPv6 Zugriff habe (und der Server lt. netstat auch nur darauf lauscht), ich jedoch "intern" bspw. mit telnet wunderbar eine Verbindung via IPv4 herstellen kann?:|



    Edit:

    Sämtliche andere Dienste lauschen auf beiden Ports bzw. kann ich von extern auf beiden Ports erreichen. Es tritt also nur mit Docker auf. Sämtliche Ergebnisse von Google waren leider nicht von Erfolg.

  • Wie versuchst du denn, "die Container für IPv4 und IPv6 erreichbar zu machen"? Ein paar mehr Informationen, was genau du tust, würden sicherlich helfen, die Situation zu verstehen.

  • Grundsätzlich versuche ich, den Container ausschließlich für v4 erreichbar zu machen, v4 + v6 ist so ein "nice to have".

    IPv6 ist beim bridge-Netzwerk von docker ja standardmäßig deaktiviert (bei mir zumindest), von daher wundert es mich umso mehr, das die Ports, welche ich bei docker via "-p 23:22" oder "-p 0.0.0.0:23:22" binde mit IPv6 "raus" kommen.

    Von den Standardeinstellungen habe ich nichts weiter verändert. Es ist für mich nur unlogisch, das bei diesem Host selbst Ports mit v4-Adressen (0.0.0.0) nur an v6 gebunden werden.

    Ich habe auch schon probiert über die daemon.json IPv6 zu aktivieren. Die Container haben dann eine v6-Adresse bekommen, waren weiterhin via v6 erreichbar, aber eben nicht via v4, egal wie ich die port-bindings gelegt habe.

  • Ich vermute mal das ist einfach ein Anzeige-Problem von Netstat. Netstat zeigt zwar nur den Listen-Port auf IPv6 an, aber auf dem IPv4 Port wird eigentlich auch gelauscht. Hast Du mal jeweils den Zugriff per IPv4 und IPv6 richtig getestet?


    Details gibt es z.B.hier:

    https://stackoverflow.com/ques…use-ipv4-for-port-binding

    Den Link kenne ich schon :)

    Ob es ein Anzeigeproblem von netstat ist weiß ich nicht, von außen komme ich schließlich nur via IPv6 drauf... Intern jedoch mit beiden Protokollen.

    Ich habe gerade festgestellt, das meine iptables bzgl. Docker aus "alten Zeiten" ein bisschen zerschossen sind. Habe gerade versucht die zu richten, hat aber nichts ergeben, ein Teil der Ports ist immer noch nur via v6 erreichbar, "ganz alte" jedoch auf beiden Protokollen. Ich versuche bei Gelegenheit mal docker komplett neu aufzusetzen und die iptables dabei komplett von docker zu befreien.

  • Ich vermute mal das ist einfach ein Anzeige-Problem von Netstat.


    Das funktioniert noch sauber? Das ist doch alles deprecated. ifconfig aus dem gleichen Software-Paket unterschlägt doch auch IP-Adressen.

  • Nunja... Heute Vormittag habe ich ja versucht iptables auszumisten, was auch nach sämtlichen Neustarts nichts weiter gebracht hat. Jetzt habe ich mal die Versionen auf den beiden Hosts (18.04 -> klappt und 18.10 -> Problemkind) verglichen. 18.09.0 vs 19.03.1...

    Nach näherer "Analyse" habe ich gemerkt, das 18.04 sich docker.io vom Docker-Repository holt, Problemserver jedoch vom Ubuntu-Repository. Also fix die passende apt-source eingefügt und schon hat er Updates installiert und läuft auch auf der 19.03.1, was mysteriöserweise auch die Probleme geklärt hat. Es wird nun wie auf dem 18.04er Host auf beiden Protokollen gebunden und ich kann auch beide von außen erreichen.

    Das Update hat es also geregelt (iptables wurden zuvor einige Male neu "eingelesen" bzw. der Server neu gestartet).:/


    Vielen Dank für eure Hilfe!:)


    P.S. netstat ist natürlich weiterhin auf einem Auge blind;)