看不良林ipv6配置视频有感,可以算是笔记。
主路由NAT6
第一步,添加ULA前缀
第二步,添加NAT6防火墙规则
需要考虑两种情况,一种是iptables另一种是nftables。基于nftables的最新的openwrt系统可以在防火墙设置中找到,具体是什么命令我也没有仔细研究。
基于iptables的openwrt在防火墙中可能没有可以直接开启NAT6的选项,需要自己手动添加一下防火墙规则。
iptables需要添加的防火墙规则如下:
ip6tables -t nat -A POSTROUTING -o (wan接口) -j MASQUERADE |
第三步,设置LAN口,为路由器LAN口分配一个内网ipv6地址,并开启ipv6 RA服务。
注意,这个地方为路由器LAN口分配,而不是为局域网设备分配!!!
第三步,打开RA服务(路由通告服务)。
注意,需要勾选总是通告默认路由,因为LAN口没有获得公网ipv6,如果不勾选会不给下面设备设置ipv6网关,从而无法正常通过ipv6上网。
如果没有进一步的IPv6 RA设置,可以在/etc/config/dhcp
文件中进行设置。
具体说明可以查看:https://openwrt.org/docs/guide-user/base-system/dhcp#dhcp_pools
这样基本上可以算是大功告成了。
IPv6的工作模式
IPv6中共有这么几种地址,本地链路地址、临时地址、受到抨击的地址(Deprecated、弃用的地址)。
本地链路地址:也就是fe80::和设备mac地址的eui-64格式的组合,用于邻居发现协议和无状态自动配置进程中链路本地上节点之间的通信。
临时地址:用于访问ipv6网站时使用的地址,但随时会变化,防止被反向追踪。与之对应的是其上面的IPv6地址,是不变的,用于对外提供服务。(无状态默认是通过eui64进行配置)
受到抨击的地址:perferred lifetime已经过了,但是valid lifetime还没有过,简单理解就是还可以用但是不会在用了。过了valid lifetime系统就会将地址删除了。
DHCPv6 的问题
对于ipv6的分配模式共有两种:有状态(DHCPv6)和无状态 (SLAAC)。对于有状态来说,就和ipv4的DHCP模式一样,而无状态相当于给你一个前缀,你自己分配。
对于Windows来说,即使配置的是无状态模式,Windows也会通过DHCPv6向路由器索要一个有状态的IPv6地址,Linux则没有这种问题。此外,Android到目前为止还不支持DHCPv6。
所以不准备启动DHCPv6,我没有这个需求。
IPv6的RA标记 A、M、O
A标记(auto address-configuration):即SLAAC,启用后,客户端将执行无状态 IPv6 地址自动配置。
M标记(management):开启后,表示可以通过DHCPv6获取IPv6地址,也就是有状态分配。
O标记(other):开启后,表示可以通过DHCPv6获取其他信息,如:DNS服务器、NTP服务器等。
IPv4地址的dns服务器也是可以解析出IPv6地址地址的,因为解析出IPv4地址相当于向DNS服务器发起了请求解析A类型,IPv6发起了解析AAAA类型,跟用什么DNS服务器无关。如果不需要使用IPv6 DNS服务器,需要在OPENWrt中关闭下面两个选项。
如果开启,会在RA数据包中携带RDNSS选项,通知IPv6服务器。
另外两个标记具体是否生效,也可以根据下面的方法查看收到的RA包
A标记在Option的Prefix information中
M、O标记
旁路由配置IPv6
第一步,需要关闭主路由的RA。如果需要将旁路由设置为IPv6的默认网关,就需要将主路由的RA服务关闭了,因为IPv6会默认将发送RA数据报的路由器作为网关。
第二步,为旁路由添加ipv6接口。
在网络→接口中添加一个接口,协议选择DHCPv6,设备选择br-lan的别名,可以输入@lan。
添加接口后,点击编辑,设置IPv6网关和IPv6路由前缀(IPv6-PD)。前缀可以和主路由的ULA前缀相同。
修改lan口,IPv6分配长度选择64,这是为旁路由的lan口分配ipv6,不分配旁路由可能无法上网。
第三步,lan口配置DHCP服务器,将RA服务打开。
开启SLAAC和关闭其他标记。
第四步,为旁路由添加默认IPv6路由。
在网络→路由中,添加静态IPv6路由。
接口选择lan,目标输入::/0,网关输入主路由的IPv6地址,如下。
在高级设置中,选择表为main表,并勾选On-Link路由。
补充
IPv6 RA包抓取
如果需要测试,到底是哪个系统响应的RA包,可以在WireShark中过滤出icmpv6.type == 134
的包。