Quando tenho um serviço escutando em um endereço IPv6 específico, ele falha na inicialização, alegando que o endereço ainda não está disponível. Isso acontece com todos os serviços que estão ouvindo em endereços específicos.
Para evitar isso, criei um drop-in para o serviço, alterando After=... network.target
por After=... network-online.target
, isso resolve o problema de ligação de endereço IPv4, mas não o IPv6. Eu tento com alguns alvos específicos de interface sem sucesso, Eles esperam por IPv4 bit não para o IPv6 é para cima.
Como solução alternativa, também adicionei à seção de serviço:
[Service]
Restart=on-failure
RestartSec=10s
StartLimitInterval=1min
Isso parece que todo mundo está fazendo para resolver isso, mas eu não estou muito feliz com isso, e parece ser algum método para permitir que o sistema espere pelo endereço IPv6.
Meu sistema é CentOS 7.2 , desabilitou NetworkManager e firewalld, rede habilitada e iptables, com IP estático, toda a rede está trabalhando IN / OUT após a interface estar cheia IPv4 / IPv6.
Minha ifcfg-eth0:
DEVICE=eth0
BOOTPROTO=none
NM_CONTROLLED="no"
ONBOOT=yes
IPADDR=X.X.X.X
PREFIX=24
GATEWAY=X.X.X.X
DNS1=X.X.X.X
DNS2=8.8.8.8
SEARCH=xxx.xxx
IPV6INIT=yes
IPV6_AUTOCONF=no
IPV6ADDR="X:X:X:X::X"
Eu também notei em alguns sistemas implementados IPv4 / IPv6 de pilha dupla, que o IPv6 leva algum tempo para o init também para o endereço estático, que é causado pela configuração da rota, e algumas outras novas coisas do IPv6.
Então, minha pergunta é: Como garantir que a unidade de serviço só seja iniciada depois que o link IPv6 global for atribuído às interfaces?
EDIT: Após alguns comentários apontando-me no DAD, eu acho que systemd-networkd mesclou o DAD wait, mas apenas no branch master, não presente no sistema 220 (o Centos 7.2 possui systemd 219). O NetworkManager parece ter alguns patches, mas eu não estou usando nada disso.
Encontrei solução temporal aceitável após a leitura, e fiz alguns testes, no meu caso que o IP nos servidores é fixo e não pode ser atribuído outro, este post me mostrou a solução:
Eu também testei a solução DAD comentada com base no otimista DAD RFC4429 , que não resolve o problema ligar problemas. Finalmente desativado DAD na interface e serviços surgem no boot normalmente. : D.
net.ipv6.conf.eth0.accept_dad = 0
Eu colocarei meus olhos neste problema de inicialização do DAD enquanto o IPv6 evolui. Eu só vejo isso na ligação de serviços para um endereço IPv6 específico.