A questão de como criar um IPv6 estático, mas com prefixo anunciado, já foi feita aqui (a solução parece ser definir token), mas gostaria de entender exatamente o que está acontecendo na minha configuração.
Meu sistema usa nativamente o NetworkManager, mas eu gostaria de implementar as mudanças através do ifupdown. Eu criei um arquivo /etc/network/interfaces com a seguinte configuração
auto wlp2s0 permitir hotplug wlp2s0
iface wlp2s0 inet dhcp
iface wlp2s0 inet6
endereço automático ::be70:f1ic:a1a1:d502/64
accept_ra 2privado 0
Quando inicio o networking
daemon após criar este arquivo, dois endereços são adicionados à interface wlp2s0, um global dynamic mngtmpaddr
e um global dynamic mngtmpaddr noprefixroute
(além dos originais, que incluem uma dinâmica global, uma extensão de privacidade e o link um), nenhum dos quais tem o prefixo que eu queria consertar. Além disso, neste estágio não consigo acessar a internet (na verdade, parece que as conexões existentes continuam funcionando enquanto novas não podem ser estabelecidas).
E se eu reiniciar o sistema (acredito que reiniciar o NetworkManager pode ser suficiente, mas não tenho certeza), meu adaptador sem fio nem consegue iniciar (a interface wlp2s0 fica inativa sem operadora).
Agora, para minhas perguntas:
Eu sei que a maneira correta de fazer o que quero é com um token, mas por que exatamente minha configuração não fixa um IP para ter meu sufixo?
Por que recebo dois novos endereços, um com
noprefixroute
e outro sem, em vez de apenas um?Por que reiniciar o kernel mata a interface?
Agradeço qualquer informação!
Porque não há lógica ou código em ifupdown que reconheceria
address ::foo/64
como "apenas o sufixo a ser combinado com um prefixo anunciado". Ele é construído em um sistema de substituição literal muito básico e tudo o que ele faz é invocarip -6 addr add %address% dev %iface%
com os parâmetros que você especificou.Tenha em mente que ifupdown não tem um "daemon de rede" como tal – tudo o que ele faz é configurar o kernel para receber SLAAC (por
accept_ra 2
), e qualquer manipulação de anúncio SLAAC depois disso fica a cargo do kernel – o que significa que ifupdown em si não sabe nada sobre quais prefixos estão sendo anunciados. Então, mesmo que tivesse lógica para reconhecer::foo
definições de endereço, a única coisa que ele seria capaz de fazer com isso é configurar o 'token de interface' no cliente SLAAC do kernel.(E a maneira de dizer ao kernel para sempre usar um sufixo especificado com prefixos anunciados pelo SLAAC é… configurando o 'token de interface'. Literalmente.)
Provavelmente porque agora você tem o kernel (accept_ra=2) e o NetworkManager recebendo anúncios do roteador, então ambos recebem um RA e ambos derivam endereços do prefixo anunciado independentemente um do outro.
Vá verificar os logs do NetworkManager. Você provavelmente tem o plugin NetworkManager que lê a configuração ifupdown, então, em vez do perfil de conexão original, ele agora usa o definido em /etc/network/interfaces, e a) ele se recusa
::foo
como um endereço de interface, então ele nem tenta abrir o perfil, ou b) o perfil não tem SSID para se conectar, então ele não pode abri-lo.