Por que os endereços IPv6 são liberados no link para baixo?

7

Há uma diferença de comportamento entre os endereços IPv4 e IPv6 atribuídos a uma interface de rede: quando o link é eliminado, como em "ip link set dev eth0", os endereços IPv4 são retidos, mas os endereços IPv6 são liberados. Se o link for ativado novamente, os endereços IPv4 poderão ser usados imediatamente para transmitir tráfego, mas os endereços IPv6 deverão ser atribuídos.

Isso é um bug ou por design? Se por design, onde posso encontrar isso explicitamente documentado?

Um colega de trabalho argumentou que é um bug, a ser corrigido em um kernel futuro; outro argumentou que é por design, já que o IPv6 assume o endereçamento dinâmico. Eu encontrei um comportamento idêntico em várias distribuições diferentes do Linux e diferentes versões do kernel, então estou quase certo de que isso é por design, mas eu quero encontrar documentação, como em uma citação de um RFC, para resolver o problema.

Se houver uma solução alternativa que force a retenção de endereços IPv6 atribuídos manualmente, também seria útil saber disso.

    
por bgvaughan 04.04.2017 / 18:47

1 resposta

6

Parece que a configuração que você está procurando é keep_addr_on_down , que foi introduzida no Linux 4.6. Citando Documentação / rede / ip-sysctl.txt :

keep_addr_on_down - INTEGER
    Keep all IPv6 addresses on an interface down event. If set static
    global addresses with no expiration time are not flushed.
      >0 : enabled
       0 : system default
      <0 : disabled

    Default: 0 (addresses are removed)

Se você estiver usando uma versão Linux mais antiga que a 4.6, a melhor solução que posso sugerir é atribuir o endereço a uma interface dummy que você mantém, mesmo se a interface física for desativada:

modprobe dummy
ip -6 addr add dev dummy0 2001:db8::42/128
    
por 10.04.2017 / 22:49