У меня серьезные проблемы с включением IPv6 в докере.
Однако я не могу получить доступ к внешнему миру из контейнеров! У моего моста docker0 НЕТ адреса IPv6 после перезапуска докера с параметрами ниже. Нет ни маршрута, ни шлюза (не имеет смысла без адреса ipv6).
Моя настройка Docker: Docker запускается с этими параметрами в DOCKER_OPTS
DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 --ipv6 --fixed-cidr-v6=w:x:y:z:a::/80"
Некоторые параметры конфигурации хоста ipv6:
net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.default.forwarding = 1
вот одна из сетей, которые я создал:
root@wopr:~# docker network inspect wopr6
[
{
"Name": "wopr6",
"Id": "ddc192d4af2a8edc809975e84cf3e4cb82c24d4cfe970dd8e3fc7d6ff31e20ee",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": true,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.23.0.0/16",
"Gateway": "172.23.0.1/16"
},
{
"Subnet": "w:x:y:z:a:0:0:0/80",
"Gateway": "w:x:y:z:a::1"
}
]
},
"Internal": false,
"Containers": {
"dff30ab1496a4c3689ad6da0837fdb6cf7ea1a5b32312116214313b5b14ed07e": {
"Name": "happy_varahamihira",
"EndpointID": "8cd4ed4b91d8421171ec8cc771bbe7b7d81f05dc9f4679f20c642c2e828ec475",
"MacAddress": "02:42:ac:17:00:02",
"IPv4Address": "172.23.0.2/16",
"IPv6Address": "w:x:y:z:a::2/80"
}
},
"Options": {},
"Labels": {}
}
]
Вот некоторая информация из контейнера, о котором говорилось выше:
root@dff30ab1496a:/# ip -6 a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
332: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
inet6 2a03:4000:6:2158:a::2/80 scope global nodad
valid_lft forever preferred_lft forever
inet6 fe80::42:acff:fe17:2/64 scope link
valid_lft forever preferred_lft forever
root@dff30ab1496a:/# ip -6 r
2a03:4000:6:2158:a::/80 dev eth0 proto kernel metric 256
fe80::/64 dev eth0 proto kernel metric 256
default via 2a03:4000:6:2158:a::1 dev eth0 metric 1024
PING ipv6.l.google.com (2a00:1450:4001:811::200e): 56 data bytes, id 0x0011 = 17
--- ipv6.l.google.com ping statistics ---
1 packets transmitted, 0 packets received, 100% packet loss
Что мне не хватает?
Итак, подождав две недели ответа и исследуя еще несколько часов после открытия награды, я нашел решение.
Настройте новую сеть с поддержкой IPv6 и назначьте доступную мне подсеть (a / 80 из my / 64)
docker network create --ipv6 --subnet=w:x:y:z:aaaa::/80 myfancynetwork
Теперь запустите контейнер и подключите его к новой сети. Узнайте его IP-адрес. Скажем, в этом примере это w: x: y: z: aaaa :: 5.
Включить proxy_ndp
sysctl net.ipv6.conf.eth0.proxy_ndp=1
Вы также можете настроить этот параметр через /etc/sysctl.conf, чтобы сделать его постоянным.
Добавьте прокси, чтобы мой хост (включенный IPv6) отвечал на сообщения Neighbor Sollicitation от моего маршрутизатора (например: «эй, кто размещает w: x: y: z: aaaa :: 5?») Сообщениями Neighbor Advertising («которые будут будь мной!").
ip -6 neigh add proxy w:x:y:z:aaaa::5 dev eth0
ndppd может помочь вам автоматически рекламировать любые хосты в вашей сети.
Бам, вот и все.