我有一个 Ubuntu 22.04.2 虚拟机。我的目的是仅在接口上执行 dhcpv6 并忽略路由器通告,这样我就不会获得 SLAAC v6 地址及其路由。目前,我在接口上成功获取了链路本地、SLAAC 和 dhcpv6 地址(和 v4)。如果我将“net.ipv6.conf.eth0.accept_ra=0”放入 /etc/sysctl.conf(并执行 sysctl -p),我仍然会获得接口上的所有地址。另外,执行 'all.accept_ra=0' 和 'default.accept_ra=0' 也没有效果。参数更改后我关闭/打开界面。我还有什么需要做的吗? sysctl -w 和这些参数对我来说也不起作用。
如果我将“accept-ra: false”放入 netplan yaml 文件中(sysctl 中的accept_ra=1),我的接口上不会获得 SLAAC 或 dhcpv6 地址。所以,这似乎像我想要的那样忽略了 RA,但 dhcpv6 停止工作。我只有一个 v6 链路本地地址。查看 tcpdump,我没有看到任何 SOLICIT 或任何其他 dhcp6 或 icmp6 消息正在发送。我看到 RA 进来了,所以它被成功忽略了。
如果有人能让我知道为什么 sysctl 无效以及为什么 netplan yaml 更改也会影响 dhcpv6,我将不胜感激。
其他说明:2个接口系统(eth0、eth1)。我正在 eth0 上工作。所有转发均被禁用(例如 net.ipv4.conf.eth0.forwarding = 0)yaml 文件中的 eth1 具有“accept-ra: false”
答案1
sysctl 无效,因为它不是处理 RA 的内核。对于 netplan,这由 systemd-networkd 在用户空间中处理,就像 DHCPv6 一样。
要禁用地址分配,您需要相当于 systemd.network(5) 选项的 Netplan:
[IPv6AcceptRA]
UseAutonomousPrefix=false
根据设计,RA 是触发器DHCPv6,也提供到系统的默认路由(DHCPv6 不这样做)。您可以使用 Netplan 等效项(同样在 .network 文件中)使 systemd-networkd 在没有 RA 的情况下启动 DHCPv6:
[DHCPv6]
WithoutRA=solicit
(不,我不知道这些选项的 Netplan 等价物是什么,或者它是否有任何选项。坦率地说,在没有 Netplan 的情况下直接配置 systemd-networkd 可能会更容易 - 通过复制 Netplan 生成的 .network 文件并根据需要扩展它。)