Mal*_*ous 7 ipv6 systemd-resolved
所以我正在测试一个路由器,它向我网络上的所有机器添加了一些随机的 IPv6 地址,包括我的 DNS 服务器。不知何故,这些 IP 作为有效的 DNS 服务器被广播(不确定只有真正的路由器如何发送 IPv6 RA 数据包)但长话短说,现在我所有的机器都向一个不存在的 IP 地址发送 DNS 查询。
如果我重新启动resolved,systemctl restart systemd-resolved那么resolvectl仍然将这些虚假 IP 显示为有效的名称服务器。
它们被列在/etc/resolv.conf所以如果我在那里删除它们并重新启动systemd-resolved它只会再次添加虚假的 IP。
如果我查看日志,journalctl --unit=systemd-resolved它会告诉我虚假 IP 正在“降级功能模式”下运行,但没有告诉我从哪里找到这些 IP。
它从哪里获取这些错误的 IP 地址?是否有一些缓存文件我需要删除才能让它回到仅使用 IPv6 路由器广告提供的 IP?
经过一番调查和系统错误报告后,我发现了以下内容。
systemd-resolved 从 systemd-networkd 获取所有 DNS 信息,因此请重点关注 systemd-networkd,因为修复那里的恶意服务器将流入 systemd-resolved。
/var/run/systemd/netif/每个接口的数据存储在一个文件中。这是内部的,可能会发生变化,因此当您阅读本文时可能已经移动,但是我能够为恶意服务器 grep 这些文件并删除包含它的文件。当我重新启动 systemd-networkd 时,它完整地重新创建了已删除的文件。
在我的例子中,它重新创建了文件,其中仍然列出了恶意 DNS 服务器,这意味着它没有被 systemd 缓存,而是仍在网络上的某个地方进行广告。
由于它是 IPv6 地址,因此我安装了radvd(IPv6 路由器通告守护程序)并运行radvdump以显示到达计算机的所有 IPv6 RA。果然,不久之后,就出现了一个列出了恶意 DNS 服务器的邮件,这样我就可以找到它并修复它。
如果这不适合您,您可以使用一些 systemd-networkd 选项来解决该问题。这些必须放置在配置网络的文件之一中 ( /etc/systemd/network/*.network)。
# Don't use DNS servers from DHCP responses received via IPv4 (default is true)
[DHCPv4]
UseDNS=false
# Don't use DNS servers from DHCPv6 responses received via IPv6 (default is true)
[DHCPv6]
UseDNS=false
[IPv6AcceptRA]
# Don't use DNS servers from IPv6 Router Advertisement (RA) messages (default is true)
UseDNS=false
# Don't start a DHCPv6 client when an RA message is received.
DHCPv6Client=false
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7272 次 |
| 最近记录: |