Ubuntu 22.04虚拟机UFW默认拒绝出站时的IPv6相关问题咨询
Ubuntu 22.04虚拟机UFW默认拒绝出站时的IPv6相关问题咨询
问题1:明明设置了dhcp6: false,为什么虚拟机还会尝试和DHCPv6服务器(ff02::1:2)通信?
这个现象其实和你开启的accept-ra: true配置直接相关。虽然你禁用了DHCPv6的地址获取功能,但accept-ra(接受路由宣告)会让系统接收路由器发送的IPv6路由信息,而在这个过程中,系统默认会主动发送DHCPv6的信息请求报文——目的是获取DNS服务器地址、搜索域名这类额外的网络配置项,这些请求会被发往链路本地的DHCPv6服务器组播地址ff02::1:2,这就是你在日志里看到的被UFW拦截的流量。
如果想彻底阻止这类请求,你可以在netplan的eth0配置里补充参数,明确告诉系统不要通过DHCPv6获取额外配置:
network: ethernets: eth0: addresses: - 10.100.100.100/24 dhcp4: false dhcp6: false accept-ra: true ipv6-privacy: true # 新增配置:禁止请求DHCPv6额外参数 dhcp6-options: request: []
修改完成后执行sudo netplan apply让配置生效,系统就不会再发送这类DHCPv6请求报文了。
问题2:UFW默认拒绝所有出站流量,为什么accept-ra: true还能正常获取SLAAC的IPv6地址?
这是因为UFW默认会自动放行IPv6网络正常运行所必需的ICMPv6报文类型,而SLAAC(无状态地址自动配置)的核心流程完全依赖ICMPv6的邻居发现协议(NDP):
- 路由器会定期发送**路由宣告(RA)**报文(入站),告知虚拟机链路的IPv6前缀信息;
- 虚拟机生成自己的SLAAC地址后,会发送**邻居请求(NS)**报文(出站)检查地址是否冲突;
- 同时接收**邻居通告(NA)**报文(入站)确认地址可用性。
这些ICMPv6报文属于IPv6网络的基础通信组件,UFW的默认规则不会拦截它们,所以即使你设置了ufw default deny outgoing,这些关键报文依然能正常收发,自然就能成功获取SLAAC地址了。
备注:内容来源于stack exchange,提问作者ProTofik
相关产品推荐
相关产品推荐

