Então, eu estava testando um roteador e ele adicionou alguns endereços IPv6 aleatórios a todas as máquinas da minha rede, incluindo meu servidor DNS. De alguma forma, esses IPs foram transmitidos como servidores DNS válidos (não tenho certeza de como apenas o roteador real envia pacotes IPv6 RA), mas para encurtar a história, agora todas as minhas máquinas estão enviando consultas DNS para um endereço IP que não existe.
Se eu reiniciar resolved
com systemctl restart systemd-resolved
, resolvectl
ainda mostrará esses IPs falsos como servidores de nomes válidos.
Eles estão listados, /etc/resolv.conf
portanto, se eu excluí-los e reiniciá systemd-resolved
-los, apenas adiciona os IPs falsos novamente.
Se eu olhar nos logs journalctl --unit=systemd-resolved
, ele me diz que os IPs falsos estão operando no "modo de recurso degradado", mas não me diz onde encontrou esses IPs para começar.
De onde ele está pegando esses endereços IP errados? Existe algum arquivo de cache que eu preciso excluir para fazê-lo voltar a usar apenas os IPs fornecidos apenas pelos anúncios do roteador IPv6?
Você pode usar este comando:
sudo systemd-resolve --flush-caches
ousudo resolvectl flush-caches
(último comando retirado da página man dosystemd-resolve
)Para verificar se a descarga foi bem-sucedida, use:
sudo systemd-resolve --statistics
Saída de amostra:
Observe também a seção da página de
systemd-resolve
manual sobre/etc/resolv.conf
, em qual modo você está operando?Depois de alguma investigação e um relatório de bug do systemd, aqui está o que descobri.
O systemd-resolved obtém todas as suas informações de DNS do systemd-networkd, portanto, concentre-se no systemd-networkd, pois a correção do servidor não autorizado fluirá para o systemd-resolved.
Os dados são armazenados
/var/run/systemd/netif/
com um arquivo por interface. Isso é interno e está sujeito a alterações, portanto, pode ter sido movido no momento em que você leu isso, no entanto, consegui grep esses arquivos para o servidor não autorizado e exclui o arquivo que o continha. Quando reiniciei o systemd-networkd, ele recriou o arquivo excluído por completo.No meu caso, ele recriou o arquivo com o servidor DNS desonesto ainda listado, o que significava que ele não estava sendo armazenado em cache pelo systemd, mas ainda estava sendo anunciado em algum lugar da rede.
Como era um endereço IPv6, instalei
radvd
(o IPv6 Router Advertisement daemon) e corriradvdump
para mostrar todos os RAs IPv6 que estavam chegando na máquina. Com certeza, em pouco tempo, um chegou com o servidor DNS desonesto listado, para que eu pudesse caçá-lo e corrigi-lo.Caso isso não seja uma opção para você, existem algumas opções do systemd-networkd que você pode usar para contornar o problema. Estes devem ser colocados em um dos arquivos onde sua rede está configurada (
/etc/systemd/network/*.network
)./etc/resolv.conf
não pode ser editado diretamente. E mesmo que o faça, as alterações não terão efeito mesmo que o serviço apropriado seja reiniciado. As etapas abaixo funcionam para remover configurações de DNS indesejadas de/etc/resolv.conf
um arquivoUbuntu 20.04 desktop
.sudo nano /etc/resolvconf/resolv.conf.d/head
systemctl stop resolvconf.service;systemctl start resolvconf.service