环境: 在单网卡(两个 vlan )的 CentOS 7 系统上搭建了 IPv6 网关的下游设备通过 NAT66 模式对外访问,该网关部署有一个 RA 服务(纯 SLAAC 模式)来让下游设备自动配置 IPv6 地址,RA 服务具体配置文件附在最后。
现状:
网关下游 Windows 设备正常获取 RA 并自动收成地址,使用 IPv6 对外访问均正常,也就是整个 NAT66 功能均没有任何问题。
Windows ( 10 ) IPv6 会不时出现 "无 Internet 访问权限" 的情况。有时候很快会出现,有时候几个小时才出现,总之出现的时机没有很明显的特征。这个状态有时候会在收到网关的下一个 RA 消息广播的时候自动恢复,有时候就一直持续除非手动重启接口等方式来恢复,这个时候系统发送 路由请求消息( RS ),RA 服务正常响应。
如果下游设备使用手动方式配置固定 IPv6 地址,一直使用都没有任何问题。
使用 dnsmasq 和 radvd 分别搭建 RA 服务均有同样的问题。
特征: "无 Internet 访问权限" 出现的时候 IPv6 地址是正常有效并且是刚生成不久的状态。但 ::/0 的默认路由条目没有了,所以想问题应该就出在这里。
分析:
前缀和路由的各种 lifetime 参数设置不对,但参考其他正常的 RA 消息尝试修改其他值问题依旧。
RA 发送间隔有问题, 但调小间隔后问题依旧。
windows 自身机制或配置有问题导致当默认路由消失的时候不能及时发送路由请求消息( RS ), 但该系统在其他路由器纯 SLAAC 模式下工作正常(至少没有明显发现这个问题)。
centos 配置有问题或者说服务有冲突, 比如:NetworkManaer 与 radvd , 因为 NetworkManaer 好像支持管理 radvd 。
** 个人能力有限分析有了一些原因但总又能推翻,所以有了解的大佬能指教一下不? **
附:
enable-ra
ra-param=enp0, 120, 3600
dhcp-range=enp0, 2001:db8::, ra-only, 1h
dhcp-option=option6:dns-server, [2001:db8::1]
interface enp0
{
IgnoreIfMissing on;
AdvSendAdvert on;
MinRtrAdvInterval 120;
MaxRtrAdvInterval 300;
AdvManagedFlag off;
AdvOtherConfigFlag off;
AdvDefaultLifetime 3600;
AdvDefaultPreference medium;
AdvSourceLLAddress on;
prefix 2001:db8::/64
{
AdvValidLifetime 3600;
AdvPreferredLifetime 3600;
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr off;
};
RDNSS 2001:db8::1
{
AdvRDNSSLifetime 3600;
};
};
结论(貌似):与 RA 服务(dnsmasq / radvd)和 Windows 一点关系都没有,是 Linux 发送的 ICMPv6 Type 136 (NA) 消息的 RouterFlag 标记错误, 网关发送的包该标记必须为 1 而默认是 0!
调整:RouterFlag 标记,修改方法就是调整内核参数 net.ipv6.conf.***.forwarding = 1 (其实这条记录也有只是不知道什么时候注释了) 另外, Windows IPv6 有一个 DeadGatewayDetection 参数,从字面上理解关闭它应该也可以(未尝试)!
疑惑: 1. 其实,本来之前已经有一条 net.ipv6.conf.all.forwarding = 1 其他网卡都默认开启了但是 就网关的这个卡却没有开启; 2. 网关的这个卡没有开启也可以转发数据。
过程: 在 windows 上 tracert #### 就有很大概率默认路由会丢失,所以就怀疑到ICMPv6消息的问题了,以前只一直关注 ICMPv6 Type 133 (RA) 消息,甚至还以为是NetworkManager服务的问题,NA NS消息看着有就没有仔细去对比 ...
写到这里,希望能其他人一参考!
1
shenwei18 316 天前
`SLAAC 无状态分配 IP`在 win10 没问题
`RDNSS`分配的 dns 在 win10 中有问题,有概率收不到 RA 服务器下发的 DNS 地址,所以出现**无 Internet 访问权限**。 虽然在 Windows 10 1703 开始,Windows 支持使用`RDNSS`无状态获取 DNS 服务器--IPv6 标准(RFC 8106)。 > 实测我的 Win10TLSC 2021 ,不行,但是在`ipv6 单栈`的情况下,可以收到`RDNSS`下发的 dns 地址。参考:[After update from Windows 10 to Windows 11 - IPv6 RFC 6106 / RDNSS (Router Advertisement Options for DNS) stopped working - Microsoft Q&A]( https://learn.microsoft.com/en-us/answers/questions/884756/after-update-from-windows-10-to-windows-11-ipv6-rf) |
2
ac169 OP @shenwei18
特征: "无 Internet 访问权限" 出现的时候 IPv6 地址是正常有效并且是刚生成不久的状态。但 ::/0 的默认路由条目没有了,所以想问题应该就出在这里。 我的观察 RDNSS 目前只有 WIN 7 有问题无法处理! IPv6 地址,DNS 都是正常通过 RA 消息获取并配置! 其实问题完全是 ::/0 的默认路由条目没有导致的,这点基本可以确定,只是不知道什么原因。 |
4
wheat0r 315 天前
说个题外话,各种文档里都遵守 2001:db8::/32 这个文档段,一度让我以为这个段是 ULA
|