żądanie zawinięcia do lokalnego hosta IPv6 zostaje zablokowane

9

Pojemnik doker kopalni naraża interfejs HTTP na porcie 8500, który jest mapowany do portu hosta 8500. Jest nie obsługującym IPv6. To wciąż oznacza, że ​​powinienem mieć do niego dostęp na localhost: 8500. Preferowany jest IPv6, więc kończę na żądaniu [:: 1]: 8500. Ten utknął, nigdy nie powraca.

Po odtworzeniu tego z zawijaniem to polecenie utknie:

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

opcja curl --verbose niczego nie ujawnia, podobnie jak - ascii-trace. W tym samym czasie żądanie do lokalnego hosta IPv4 kończy się powodzeniem:

curl http://127.0.0.1:8500

dając mi oczekiwany HTML. Jeśli uruchomię serwer HTTP IPv4 w trybie sprzężenia zwrotnego, używając

python -m SimpleHTTPServer 4001

wtedy dostaję dużo HTML dla localhost IPv4

curl http://127.1:4001

i prawidłowa awaria połączenia dla IPv6:

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

Ważne uwagi: Docker 1.7.1. Protokół IPv6 nie jest włączony dla kontenera, dlatego nie ma żadnych iptable reguł IPv6. (ip6tables -v -L nic nie daje)

Moje pytanie brzmi: dlaczego prośba blokuje się i co robi?

mknecht
źródło
1
Czy pokażesz nam wynik działania „netstat -6 -an”?
Rui F Ribeiro,
Tak, doker nasłuchuje na tym porcie: tcp6 0 0 :::8500 :::* LISTEN 1648/docker Fascynujące. Dlaczego? I dlaczego to blokuje?
mknecht
Sądzę, że nasłuchiwanie nie zostało skonfigurowane lub IPv6 wyłączony w sysctl. nginx, apache, lighthttp, czy mógłbyś dołączyć dany serwer WWW do postu, proszę?
Rui F Ribeiro,
Wewnątrz kontenera nasłuchuje konsul, magazyn kluczy i wartości do konfiguracji. Ale nie sądzę, żeby to miało znaczenie: kontener nie obsługuje IPv6. Ta prośba nigdy nie powinna dotrzeć do konsula. Nie rozumiem jednak, na której warstwie utknął. Na hoście /proc/sys/net/ipv6/conf/all/disable_ipv6daje 0, więc IPv6 powinien być włączony.
mknecht,
2
To niewiele znaczy. Możesz wyłączyć IPv6 nawet w sysctl i nowszych jądrach, dopóki program wiąże się z gniazdem IPv6, żądanie jest honorowane. Ból w dupie, ponieważ musisz przejść przez każdego demona, który obsługuje IPv6 i wyłączyć konfigurację IPv6.
Rui F Ribeiro,

Odpowiedzi:

0

Włącz ipv6 i ebable forwarding.

# 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
Qteb
źródło
1
Najwyraźniej OP nie próbuje sprawić, by coś zadziałało; faktyczne pytanie brzmi: „Dlaczego zapytanie blokuje się i co robi?”. Czy twoja odpowiedź zawiera wyjaśnienie? Jeśli tak, czy możesz wyjaśnić, w jaki sposób?
fra-san