Ativando o IPv6 para o docker quebras a conectividade IPv6 dos hosts, resultando em nenhuma conexão IPv6

1

Prefácio: Eu sou novato em Docker e em redes, especialmente em IPv6. Sou desenvolvedor de software, não administrador de sistema / rede.

Estou executando o Arch on Linode e estou procurando configurar o Docker com suporte a IPv6. Eu poderia fazer com o IPv4 e, embora eu não tenha resolvido esse problema, estou ficando com o IPv4, mas estou realmente ansioso para ativar o IPv6.

Como estou usando systemd-networkd , tive que ativar IPForward=kernel que fiz.

Se o Docker não estiver em execução, obviamente, o IPv6 funciona para o meu Arch.

Se eu executar o Docker sem o IPv6, o Arch tem conectividade IPv6.

Agora, se eu executar o Docker com IPv6 ativado: docker daemon --ipv6 --fixed-cidr-v6="XXXXX/64" -H fd:// , ele quebrará a conectividade IPv6 do meu Arch e nem funcionará dentro de contêineres.

A única diferença que eu tenho visto é que sem o IPv6 para o Docker, eu tenho uma rota padrão para o IPv6 no meu 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

Ao ativar o IPv6, fico com isso:

[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

No entanto, adicionar rota IPv6 padrão manualmente:

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

Ativa o IPv6 para meu host, mas ainda deixa contêineres sem conexão IPv6.

Informações e o que tentei

  • Para testar a conexão, estou usando ping6 .
  • O contêiner que atua como manequim de teste é base/archlinux .
  • Depois de adicionar manualmente a rota IPv6 padrão ao host, reinicie o docker - sem sucesso.
  • A configuração da rota IPv6 padrão via docker0 deixa o host e o contêiner sem conectividade.
  • Não consigo efetuar o ping do host pelo endereço IPv6 do contêiner em qualquer cenário.
  • Eu segui o Guia do Docker para IPv6 e tentei alterar a sub-rede IPv6 do meu daemon do Docker para 80 , não ajudou (embora, eu poderia ter feito algo errado, dada a minha expertise ).
  • Eu também tentei definir (como dito no guia) sysctl net.ipv6.conf.eth0.accept_ra=2 , no entanto, no contêiner ele com erros: sysctl: setting key "net.ipv6.conf.eth0.accept_ra": Read-only file system . No host, nada muda.
  • O fato de que, por padrão, não há rota IPv6 para o host, me faz pensar que isso vem do lado do Docker.

Configuração de IP do host quando o IPv6 está ativado:

[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

Configuração IP do container quando o IPv6 está habilitado:

[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 estão ocultos, espero não ter que expor meus endereços públicos.

O que faço para corrigir o problema para ativar o IPv6 para o Docker?

    
por joltmode 16.10.2015 / 18:37

0 respostas