在 Linux 中不接受来自路由器公告的 RDNSS

在 Linux 中不接受来自路由器公告的 RDNSS

我有一台 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/242a01:xx:xx:xx::2/126
  • eth2 = LAN1。10.50.0.1/162a01: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和 之外的所有网络上loRadvdump显示 重新启动后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 包含相同的键和值。如果值不匹配,则会显示错误,并且不会应用网络配置。

相关内容