У меня проблема с моими docker контейнерами, которую я не могу выяснить. Контейнеры соединены сетью, которая позволяет использовать как IPv4, так и IPv6:
root@ad46a51c5c21:# docker network inspect f9313031ab32
[
{
"Name": "my_net",
"Id": "f9313031ab329c809d16879ef4276c00181e83c0521a3b5220043ecbede4db7f",
"Created": "2019-07-03T17:05:26.774007984+02:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": true,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.16.238.0/24",
"Gateway": "172.16.238.1"
},
{
"Subnet": "2001:3984:3989::/64",
"Gateway": "2001:3984:3989::1"
}
]
},
"Internal": false,
"Attachable": true,
"Ingress": false,
"Containers": {
"ad46a51c5c21f807fd6aef4bc4aa2c44107ac5a1740af8187063352ae8eabd20": {
"Name": "docker_MyContainer_1_1",
"EndpointID": "cb61aab8cf60ab19527600fd198be56a0b20b7b00e391c5601b3de9bae535bf9",
"MacAddress": "02:42:ac:10:ee:66",
"IPv4Address": "172.16.238.102/24",
"IPv6Address": "2001:3984:3989::102/64"
},
"fb1ab6c8bef37a05ef3de840baaa033ef8281011ba65c9341165381f08646642": {
"Name": "docker_MyContainer_2_1",
"EndpointID": "7f91c31799ecc052e86aef77dacbe8f6010f30cc78dfabe22b8bde4962913945",
"MacAddress": "02:42:ac:10:ee:8e",
"IPv4Address": "172.16.238.142/24",
"IPv6Address": "2001:3984:3989::142/64"
}
},
"Options": {},
"Labels": {}
}
]
В контейнере работает сервер, который прослушивает соединения:
root@ad46a51c5c21:# netstat -tulpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.11:42047 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 11/sshd
tcp6 0 0 :::11880 :::* LISTEN 26/pserver
tcp6 0 0 :::22 :::* LISTEN 11/sshd
udp 0 0 127.0.0.11:51591 0.0.0.0:*
I интерпретируйте вышеприведенный вывод как трафик IPv4 c, маршрутизируемый через сокеты IPv6, поскольку на порту 11880 прослушивание сокета IPv4 отсутствует,
К серверу можно получить локальный доступ через порт 11880, используя как IPv4, так и IPv6:
root@ad46a51c5c21:# pclient 172.16.238.102
userid:"MyUser"
root@ad46a51c5c21:# pclient 2001:3984:3989::102
userid:"MyUser"
Но из удаленного контейнера на том же хосте сервер может быть доступен только с использованием IPv4:
root@fb1ab6c8bef3:# pclient 172.16.238.102
userid:"MyUser"
root@fb1ab6c8bef3:# pclient 2001:3984:3989::102
<nil> rpc error: code = Unavailable desc = all SubConns are in TransientFailure
Удаленный контейнер может пропинговать контейнер сервера, используя как IPv4, так и IPv6. :
root@fb1ab6c8bef3:# ping -c 2 172.16.238.102
PING 172.16.238.102 (172.16.238.102) 56(84) bytes of data.
64 bytes from 172.16.238.102: icmp_seq=1 ttl=64 time=0.268 ms
64 bytes from 172.16.238.102: icmp_seq=2 ttl=64 time=0.137 ms
--- 172.16.238.102 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.137/0.202/0.268/0.067 ms
root@fb1ab6c8bef3:# ping -c 2 2001:3984:3989::102
PING 2001:3984:3989::102(2001:3984:3989::102) 56 data bytes
64 bytes from 2001:3984:3989::102: icmp_seq=1 ttl=64 time=0.219 ms
64 bytes from 2001:3984:3989::102: icmp_seq=2 ttl=64 time=0.218 ms
--- 2001:3984:3989::102 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.218/0.218/0.219/0.014 ms
Есть идеи, почему мой сервер не может быть доступен с использованием IPv6 из удаленного контейнера?