Die Curl-Anforderung an IPv6 localhost bleibt hängen


9

Ein Docker-Container von mir stellt eine HTTP-Schnittstelle an Port 8500 bereit, die dem Host-Port 8500 zugeordnet ist. Sie ist nicht IPv6-fähig. Dies bedeutet immer noch, dass ich unter localhost: 8500 darauf zugreifen kann. IPv6 wird bevorzugt, daher erhalte ich eine Anfrage an [:: 1]: 8500. Dieser bleibt stecken, er kehrt nie zurück.

Wenn Sie dies mit Curl reproduzieren, bleibt dieser Befehl hängen:

curl -g -6 "http://[::1]:8500"

Die Option --verbose von curl enthüllt nichts und --ascii-trace auch nicht. Gleichzeitig ist eine Anforderung an den lokalen Host von IPv4 erfolgreich:

curl http://127.0.0.1:8500

gib mir den erwarteten HTML. Wenn ich einen IPv4-HTTP-Server im Loopback verwende, verwenden Sie

python -m SimpleHTTPServer 4001

dann bekomme ich viel HTML für IPv4s localhost

curl http://127.1:4001

und ein ordnungsgemäßer Verbindungsfehler für IPv6:

curl -g -6 "http://[::1]:4001"
curl: (7) Failed to connect to ::1 port 4001: Connection refused

Dinge zu beachten: Docker 1.7.1. IPv6 ist für den Container nicht aktiviert, daher gibt es keine IPv6-Iptable-Regeln. (ip6tables -v -L gibt nichts)

Meine Frage ist: Warum bleibt die Anfrage hängen und macht was?


1
Würden Sie uns die Ausgabe von "netstat -6 -an" zeigen?
Rui F Ribeiro

Ja, Docker lauscht auf diesem Port: tcp6 0 0 :::8500 :::* LISTEN 1648/docker Faszinierend. Warum? Und warum blockiert es?
mknecht

Abhören und nicht konfiguriert oder IPv6 in sysctl deaktiviert, denke ich. nginx, apache, lighthttp, würden Sie den fraglichen Webserver bitte an den Beitrag anhängen?
Rui F Ribeiro

Im Container lauscht Consul, ein Schlüsselwertspeicher für die Konfiguration. Aber ich denke nicht, dass es relevant ist: Der Container war nicht IPv6-fähig. Diese Bitte sollte niemals den Konsul erreichen. Ich verstehe jedoch nicht, auf welcher Schicht es stecken bleibt. Auf dem Host /proc/sys/net/ipv6/conf/all/disable_ipv6ergibt sich 0, daher sollte IPv6 aktiviert sein.
mknecht

2
Das bedeutet nicht viel. Sie können IPv6 auch in sysctl und in neueren Kerneln deaktivieren lassen, solange das Programm an einen IPv6-Socket gebunden ist, wird die Anforderung berücksichtigt. Ein Schmerz im Arsch, da Sie jeden Daemon durchlaufen müssen, der IPv6 unterstützt, und die IPv6-Konfiguration deaktivieren müssen.
Rui F Ribeiro

Antworten:


0

Aktivieren Sie IPv6 und ebable Weiterleitung.

# cat /etc/sysctl.conf | grep ipv6
net.ipv6.conf.all.forwarding=1
net.ipv6.conf.all.disable_ipv6=0
net.ipv6.conf.default.disable_ipv6=0

1
Anscheinend versucht das OP nicht, etwas zum Laufen zu bringen. Die eigentliche Frage lautet: "Warum bleibt die Anfrage hängen und macht was?". Gibt Ihre Antwort eine Erklärung dafür? Wenn ja, können Sie bitte klarstellen, wie?
Fra-San
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.