OpenWrt中IPv6的状态管理
根据RFC,IPv6有两种地址管理方式,分别是有状态Stateful
和无状态Stateless
。如其名所示,Stateful
模式下主机IPv6地址由路由器分配,而Stateless
模式下主机IPv6地址根据协议自身计算得出。大概可以猜到的是,Stateful
模式下管理较为方便(如DDNS等),而Stateless
模式则是减轻了路由器的工作负担(毕竟IPv6地址池那么大一个,记录所有地址还是很消耗资源的)。
OpenWrt默认使用了Stateless
的方式管理IPv6下的内网NAT,然而我想知道内网设备中有多少获取到了IPv6地址= = 于是试图网上冲浪找出配置方法。
左摸索右摸索,也不知道是不是关键词用得不对,老半天才在一篇国人折腾IPv6的文章中摸到了个边。注意到文中配置有个未经解释的ra_management
参数,搜了一下发现OpenWrt官网上给出了极为惨淡的解释:
ra_management integer 1 RA management mode 0: no M-Flag but A-Flag 1: both M and A 2: M but not A
这里提到了A
和M
两个标志位,而这两个标志位正是DHCPv6中用于控制Stateful
和Stateless
模式的标志。
Flag Type | Name | Message | Manual | SLAAC | DHCPv6 |
---|---|---|---|---|---|
A | Autonomous | Prefix Information | No | Yes | Maybe |
M | Managed | ICMPv6 134 RA | No | No | Yes |
O | Other | ICMPv6 134 RA | No | Maybe | Yes |
L | On-Link | Prefix Information | No | Yes | Yes |
也就是说,理论上,将ra_management
设置为2
的话就可以强制启用Stateful
模式管理IPv6地址。有待试验。
参考: https://blogs.infoblox.com/ipv6-coe/the-ipv6-prefix-information-option-or-fun-with-the-l-flag/