Назад | Перейти на главную страницу

Включение IPv6 для докеров приводит к нарушению подключения IPv6 к хостам, что приводит к отсутствию подключения IPv6

Предисловие: я новичок как в Docker, так и в сетевых технологиях, особенно в IPv6. Я разработчик программного обеспечения, а не системный / сетевой администратор.

Я использую Arch на Linode и собираюсь настроить Docker с поддержкой IPv6. Я мог бы использовать IPv4, и хотя я не решил эту проблему, я остаюсь с IPv4, но я действительно с нетерпением жду возможности включить IPv6.

Поскольку я использую systemd-networkd Мне пришлось включить IPForward=kernel что я и сделал.

Если Docker не запущен, очевидно, что IPv6 работает для моего Arch.

Если я запускаю Docker без IPv6, Arch будет иметь возможность подключения по IPv6.

Теперь, если я запускаю Docker с включенным IPv6: docker daemon --ipv6 --fixed-cidr-v6="XXXXX/64" -H fd://, он нарушает подключение IPv6 для моей Arch и не работает внутри контейнеров.

Единственное отличие, которое я заметил, заключается в том, что без IPv6 для Docker у меня есть маршрут по умолчанию для IPv6 на моем Arch:

[root@x ~]# ip -6 route show
2a01:7e00::/64 dev enp0s4  proto kernel  metric 256  pref medium
fe80::/64 dev enp0s4  proto kernel  metric 256  pref medium
fe80::/64 dev docker0  proto kernel  metric 256  pref medium
default via fe80::1 dev enp0s4  proto ra  metric 1024  expires 73sec hoplimit 64 pref medium

При включении IPv6 у меня остается следующее:

[root@x ~]# ip -6 route show
2a01:7e00::/64 dev enp0s4  proto kernel  metric 256  pref medium
2a01:7e00::/64 dev docker0  metric 1024  pref medium
fe80::/64 dev enp0s4  proto kernel  metric 256  pref medium
fe80::/64 dev docker0  proto kernel  metric 256  pref medium

Хотя добавление маршрута IPv6 по умолчанию вручную:

ip -6 route add default via fe80::1 dev enp0s4

Включает IPv6 для моего хоста, но по-прежнему оставляет контейнеры без подключения IPv6.


Информация и что я пробовал

Конфигурация IP с хоста при включенном IPv6:

[root@apitecture ~]# ip addr show dev enp0s4; ip addr show dev docker0; ip -6 route show
3: enp0s4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether f2:3c:91:ae:1a:0a brd ff:ff:ff:ff:ff:ff
    inet xxx.xxx.xxx.xxx/24 brd xxx.xxx.xxx.255 scope global enp0s4
       valid_lft forever preferred_lft forever
    inet6 2a01:7e00::xxxx:xxxx:xxxx:xxxx/64 scope global
       valid_lft 2590589sec preferred_lft 603389sec
    inet6 fe80::f03c:91ff:feae:1a0a/64 scope link
       valid_lft forever preferred_lft forever
13: docker0@NONE: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state LOWERLAYERDOWN group default
    link/ether 02:42:cd:3d:04:60 brd ff:ff:ff:ff:ff:ff
    inet 172.17.42.1/16 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:cdff:fe3d:460/64 scope link
       valid_lft forever preferred_lft forever
    inet6 fe80::1/64 scope link
       valid_lft forever preferred_lft forever
2a01:7e00::/64 dev enp0s4  proto kernel  metric 256  pref medium
2a01:7e00::/64 dev docker0  metric 1024  pref medium
fe80::/64 dev enp0s4  proto kernel  metric 256  pref medium
fe80::/64 dev docker0  proto kernel  metric 256  pref medium

Конфигурация IP из контейнера при включенном IPv6:

[root@x ~]# docker run -it --rm base/archlinux bash -c "ip -6 addr show dev eth0; ip -6 route show"
24: eth0@if25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
    inet6 2a01:7e00::xxx:xxxx:2/64 scope global tentative
       valid_lft forever preferred_lft forever
    inet6 fe80::42:acff:fe11:2/64 scope link tentative
       valid_lft forever preferred_lft forever
2a01:7e00::/64 dev eth0  proto kernel  metric 256
fe80::/64 dev eth0  proto kernel  metric 256
default via fe80::1 dev eth0  metric 1024

xxxx скрыты, надеюсь, мне не придется раскрывать свои публичные адреса.

Что мне делать, чтобы решить проблему с включением IPv6 для Docker?