我有一台 Ubuntu 20.04 路由器,它使用自己的 IP 作为从路由器公告中获取的 DNS 服务器,从而产生 DNS 循环。我不知道如何忽略路由器公告中的 RDNSS(递归 DNS 服务器)。
环形:
Jan 19 17:26:28 myrouter dnsmasq[1074014]: query[AAAA] mobile.events.data.trafficmanager.net from fe80::21b:21ff:fee0:a6b3
Jan 19 17:26:28 myrouter dnsmasq[1074014]: forwarded mobile.events.data.trafficmanager.net to 127.0.0.53
Jan 19 17:26:28 myrouter dnsmasq[1074014]: query[AAAA] mobile.events.data.trafficmanager.net from fe80::21b:21ff:fee0:a6b3
Jan 19 17:26:28 myrouter dnsmasq[1074014]: forwarded mobile.events.data.trafficmanager.net to 127.0.0.53
网络设置:
- eth0 = 未使用。
- eth1 = WAN。
99.99.99.162/24
,2a01:xx:xx:xx::2/126
- eth2 = LAN1。
10.50.0.1/16
,2a01:xx:xx:1337:10:50:0:1/64
- 更多局域网,不相关
network:
version: 2
renderer: networkd
ethernets:
eth1:
match:
macaddress: "00:1b:21:e0:a6:b2" <-- non-obfuscated
set-name: eth1
addresses:
- 99.99.99.162/24
- 2a01:xx:xx:xx::2/126
gateway4: 99.99.99.161
gateway6: 2a01:xx:xx:xx::1
nameservers:
addresses:
- 33.33.33.10
- 44.44.44.10
search: [ company, company.nl ]
eth2:
match:
macaddress: "00:1b:21:e0:a6:b3" <-- non-obfuscated; will appear as IPv6 fe80
set-name: eth2
addresses:
- 10.50.0.1/16
- 2a01:xx:xx:1337:10:50:0:1/64
nameservers:
addresses:
- 33.33.33.10
- 44.44.44.10
Dnsmasq 绑定在除eth1
和 之外的所有网络上lo
。Radvdump
显示 重新启动后dnsmasq
,它会以 RDNSS(递归 DNS 服务器)发送路由器通告fe80::21b:21ff:fee0:a6b3
。我们的客户端似乎没有接收它,只使用 IPv4 服务器。但是,路由器本身会接收:
Link 5 (eth2)
Current Scopes: DNS
DefaultRoute setting: yes
LLMNR setting: yes
MulticastDNS setting: no
DNSOverTLS setting: no
DNSSEC setting: no
DNSSEC supported: no
Current DNS Server: 33.33.33.10
DNS Servers: 44.44.44.10
33.33.33.10
fe80::21b:21ff:fee0:a6b3 <- appears a short while after 'netplan try'
我尝试禁用它:
net.ipv6.conf.all.accept_ra = 0
net.ipv6.conf.lo.accept_ra = 0
net.ipv6.conf.default.accept_ra = 0
但运气不佳。有什么想法吗?
答案1
根据 RDNSS 更新名称服务器不是内核的工作。它是通过您用来管理网络连接的任何方式完成的。
编辑 误解了你想要什么,想到了一个过于复杂的场景。稍微改述一下:“有了静态 ipv4 和 v6 设置,netplan 无论如何都会执行 SLAAC。为什么?”
要解决此问题,请包括
accept-ra: false
在你的 netplan 配置中为所需的接口,来源。
为了完整起见,这里有一个新配置的 Ubuntu 20.10 盒子的示例配置:
network:
ethernets:
enp0s3:
dhcp4: false
dhcp6: false
accept-ra: false
addresses:
- 192.168.1.x/24
- 2001:DB8::64/64
gateway4: 192.168.1.1
gateway6: 2001:DB8::1
nameservers:
addresses:
- 192.168.1.1
version: 2
以下是“我想要 SLAAC,但不需要 RDNSS!”:
在 Ubuntu 中,它是通过 netplan 进行管理的。在测试时,我无法在没有 RDNSS 的情况下使用 SLAAC。我建议静态设置您的 IPv6 地址。
以下是netplan
来自手册页:
dhcp6 (布尔值)
为 IPv6 启用 DHCP。默认关闭。这包括无状态 DHCP(DHCP 服务器提供 DNS 名称服务器等信息但不提供 IP 地址)和有状态 DHCP(服务器提供地址和其他信息)。
如果您处于具有完全无状态自动配置(带有 RDNSS 的 SLAAC)的纯 IPv6 环境中,则可以设置此选项以启动接口。(仅设置 accept-ra 是不够的。)自动配置仍将遵守路由器通告的内容,并且仅在 RA 中请求时才使用 DHCP。
请注意,使用 RDNSS 和 networkd 需要 rdnssd(8)。NetworkManager 不需要额外的软件。
[...]
如果 dhcp4 和 dhcp6 都为真,则 networkd 后端要求 dhcp4-overrides 和 dhcp6-overrides 包含相同的键和值。如果值不匹配,则会显示错误,并且不会应用网络配置。