Estou tentando configurar o IPv6 para uma das minhas máquinas Linux, mas há coisas acontecendo que ainda não entendo. Há uma coisa complicada: a máquina deve ter uma configuração de endereço estático, mas também deve fazer SLAAC. A máquina precisa operar em dois ambientes diferentes: no primeiro ambiente, há um roteador que suporta SLAAC, mas o gateway estático não está lá. No segundo ambiente, o SLAAC não funcionará de forma alguma, mas o gateway estático está lá. Talvez isso pareça um pouco assustador (parece?), mas uma configuração muito semelhante funcionou bem para IPv4 apenas até agora. Eu realmente quero continuar com isso; minha pergunta não é tanto sobre abordagens alternativas muito diferentes.
No primeiro ambiente, só consigo acessar alguns hosts IPv6 (ainda não sei como se comportaria no segundo ambiente).
Eu uso systemd-networkd para rede, e esta é minha configuração de interface de rede (com alguns valores anonimizados):
[Corresponder] Nome=e* [Rede] Endereço=2a00:.../64 DNS=... # IPv4 funciona bem, mas para torná-lo mais completo: Endereço=185.1.2.3/29 Endereço=185.1.2.4/29 DHCP=ipv4 [Rota] Portão=2a00:...:1 Métrica=2000 [Rota] Porta de entrada=185.1.2.5 Métrica=2000
Esta é a saída ip addr
para essa interface (no primeiro ambiente), novamente anonimizada:
2: enp5s0: mtu 1500 qdisc fq_codel estado UP grupo padrão qlen 1000 link/éter aa:bb:cc:dd:ee:ff brd ff:ff:ff:ff:ff:ff nome alternativo enxfoo inet 185.1.2.3/29 brd 185.1.2.5 escopo global enp5s0 valid_lft para sempre preferred_lft para sempre inet 192.168.50.209/24 métrica 1024 brd 192.168.50.255 escopo global dinâmico enp5s0 valid_lft 83782seg preferred_lft 83782seg inet 185.1.2.4/29 brd 185.1.2.5 escopo global secundário enp5s0 valid_lft para sempre preferred_lft para sempre inet6 2001:.../64 escopo global dinâmico mngtmpaddr noprefixroute valid_lft 594seg preferred_lft 594seg inet6 2a00:.../64 escopo global valid_lft para sempre preferred_lft para sempre inet6 fe80:.../64 escopo link proto kernel_ll valid_lft para sempre preferred_lft para sempre
A tabela de roteamento se parece com isso:
2001:.../64 dev enp5s0 proto ra métrica 1024 expira 595seg pref médio 2a00:.../64 dev enp5s0 proto kernel métrica 256 pref médio fe80::/64 dev enp5s0 proto kernel métrica 256 pref médio padrão nhid 2343432122 via fe80:... dev enp5s0 proto ra métrica 1024 expira 595seg pref médio padrão via 2a00:...:1 dev enp5s0 proto estático métrica 2000 pref médio
$ ip nexthop mostrar id 2343432122 via fe80:... dev enp5s0 escopo link proto ra
Até aqui tudo bem. Tenho um entendimento básico sobre tudo isso, mas não sou um especialista. Para mim, parece que temos a configuração estática lá, mas o SLAAC também funcionou, e a rota dinâmica tem uma métrica melhor, então foi bom o suficiente para eu tentar. No entanto, só consigo alcançar alguns hosts. Este funciona:
$ ping6 2604:1380:4641:c500::1 PING 2604:1380:4641:c500::1 (2604:1380:4641:c500::1) 56 bytes de dados 64 bytes de 2604:1380:4641:c500::1: icmp_seq=1 ttl=54 tempo=126 ms 64 bytes de 2604:1380:4641:c500::1: icmp_seq=2 ttl=54 tempo=127 ms
E este não:
$ ping6 2a00:1450:4001:830::2003 PING 2a00:1450:4001:830::2003 (2a00:1450:4001:830::2003) 56 bytes de dados
Tentei mais um pouco, e parece que depende do início do endereço de destino. Então, verifiquei quais são as decisões de roteamento para esses dois casos:
$ ip -6 rota obter 2604:1380:4641:c500::1 2604:1380:4641:c500::1 de :: via fe80::... dev enp5s0 proto ra src 2001:... métrica 1024 pref médio $ ip -6 rota obter 2a00:1450:4001:830::2003 2a00:1450:4001:830::2003 de :: via fe80::... dev enp5s0 proto ra src 2a00:... métrica 1024 pref médio
Então, para o caso de trabalho, ele decidiu usar o endereço que obteve via SLAAC como o endereço de origem. Ótimo. Para o caso de não trabalho, ele decidiu usar o endereço estático. Isso não pode funcionar. Os pacotes nunca encontrarão o caminho de volta. Mas por que ele faz isso? Vejo que meu endereço estático começa com "2a00", assim como o endereço de destino. Mas é esse o motivo? Como exatamente são as regras lá? Eu realmente não entendo isso ainda e também não consegui encontrar respostas valiosas na web ainda. Existe uma maneira simples de consertar isso?