目前越来越多的地方开始支持IPv6,可以启用openwrt路由器的IPv6功能,从运营商获取IPv6地址,并由openwrt向电脑分配IPv6地址。

我启用IPv6的原因是获取公网IP,以便在公网访问家里的设备。我这里无法获取IPv4的公网地址,但可以获取IPv6公网地址,虽然是动态IP,但可以通过DDNS技术来动态更新域名与IP的绑定。因为是动态IP,可能在几天后获取的IP就会被刷新,即使没有重启路由器也可能会被刷新。

我的环境:光猫的宽带连接设置为桥接模式,宽带连接启用IPv4&IPv6。使用openwrt路由器进行PPPoE拨号。

openwrt在进行PPPoE后,WAN口会获取一个IPv6地址,并从运营商获取一个DHCPv6-PD地址段,然后可以从DHCPv6-PD地址段向openwrt下面的电脑分配IPv6地址,也可以继续向openwrt下面的其他路由器下发DHCPv6-PD地址段,这样下面的路由器也可以给连接在它上面的电脑分配IPv6地址了。也就是进行了多次DHCPv6-PD的下发。

拓扑

拓扑

openwrt的设置

部分openwrt固件已经启用了IPv6,这样在openwrt首次启动的时候就会创建一个WAN接口和一个WAN6接口,它们都是关联同一个物理接口的。在实际使用过程中,可以只配置WAN口,而不用配置WAN6接口。

在“网络—接口”页面中,“全局网络选项”默认会写有一个IPv6前缀,这是一个ULA地址(唯一本地地址),这个地址段类似IPv4中的私有地址。

IPv6 ULA前缀是私网地址

如果保留这里的地址,openwrt的LAN接口会从这个网段中获取IP,连接到LAN接口的电脑也会获得相同网段的IP。如果删除这个地址段,LAN接口只能从DHCPv6-PD地址段中获取IPv6地址。是否保留ULA前缀都没有影响,因为电脑要上网,最终使用的是公网IPv6地址。

IPv6 ULA前缀和DHCPv6-PD都是openwrt的地址池。

WAN接口

WAN接口主要是设置PPPoE,只有部分选项与IPv6有关,必须进行设置的是“高级设置”中的“获取IPv6地址”。里面有三个选项:“自动”、“已禁用”、“手动”,显然只能选择“自动”。

WAN—基本设置

WAN基本设置

WAN—高级设置

WAN高级设置

使用内置的IPv6管理:
获取IPv6地址:自动
使用对端通告的DNS服务器:如果选择,就是从运营商获取DNS
使用自定义的DNS服务器:如果不选择运营商的DNS,可以手动设置

获取IPv6地址要选择“自动”,以便自动从运营商获取IPv6地址。

在WAN接口和LAN接口都有“使用内置的IPv6管理”这个选项,我不确定选与不选有什么影响。

WAN—物理设置

WAN物理设置

WAN—防火墙设置

WAN防火墙设置

LAN接口

LAN接口中关于IPv6的设置,主要是设置分配给LAN接口的IPv6前缀长度。

LAN—基本设置

LAN基本设置

IPv6分配长度:分配给LAN接口的IPv6的前缀长度,可以填64位。

为了openwrt路由器LAN接口下的电脑可以自动配置IPv6地址,openwrt路由器LAN接口的IPv6前缀长度至少是64位,不能大于64位。设备接口进行IPv6自动配置时,一般是指自动配置IPv6地址的接口ID,即IPv6地址第65到128位;而IPv6地址的前缀一般是从路由器获取。

LAN接口中可以手动配置IPv4地址,但没有直接填写IPv6地址的地方。 LAN接口的IPv6地址来源于“IPv6 ULA前缀“,但这是私有地址;以及来源于运营商分配的DHCPv6-PD前缀,这是公网地址。 openwrt路由器从DHCPv6-PD中选择地址,配合LAN接口中“IPv6分配长度”设置的前缀长度,将一个IPv6网段分配给LAN接口。

如果openwrt路由器还要继续为下面的其他路由器分配DHCPv6-PD,则LAN接口“IPv6分配长度“可能要设置为比64更小,如60、56,前提是运营商分配的DHCPv6-PD前缀长度小于64位。

LAN—高级设置

LAN高级设置

LAN—物理设置

LAN物理设置

LAN—防火墙设置

LAN防火墙设置

DHCP/DNS

由于是使用openwrt作用DHCP服务器,需要在LAN接口启用IPv6的DHCP功能,并检查DHCP/DNS中IPv6相关的设置。

网络—接口—LAN—DHCP服务器—IPv6设置

DHCP IPv6设置

因为这里是使用openwrt路由器本身来作为DHCP服务器,所以“路由通告服务”和“DHCPv6服务”选择服务器模式即可,NDP代理则可以禁用。

DHCPv6模式可以选择“无状态的+有状态的”。

i> 无状态地址自动配置:即SLAAC,电脑根据路由器的RA消息来配置自己的前缀和网关
无状态DHCPv6:DHCP服务器为客户端提供除了前缀和网关之外的信息,如DNS
有状态DHCPv6:DHCP服务器为客户端提供IPv6地址和DNS,但不提供网关信息

总是通告默认路由,表示即使LAN接口没有获得IPv6公网前缀,也仍通告自己为默认路由。电脑总是将LAN接口的链路本地地址设置为默认网关。选不选都没有太大影响。

通告的DNS服务器,可以自定义IPv6的DNS服务器,如果留空就使用LAN接口的公网IPv6地址作为电脑的DNS。

网络—DHCP/DNS—高级设置

取消选择“禁止解析IPv6 DNS记录”

这里主要查看“禁止解析IPv6 DNS记录”这个选项,有部分openwrt固件可能默认把这个选项给选上了,这会导致电脑的IPv6 DNS查询报文被openwrt过滤掉,无法完成DNS查询,最终无法连接IPv6域名。把这个选项取消选择即可。

防火墙设置

在IPv6中,ICMPv6是比较重要的报文,接口IPv6地址的自动获取会用到ICMPv6 RS、ICMPv6 RA等报文。DHCPv6-PD地址的获取又需要用到DHCPv6报文。所以需要设置openwrt的防火墙,允许这些报文在openwrt和运营商服务器之间传输。

我这个openwrt固件已经支持IPv6,防火墙默认已经放行了相关报文。

网络—防火墙—通信规则

与IPv6相关的防火墙规则

!> 因为获取的IPv6地址是公网地址,可以直接从互联网连接到openwrt路由器。防火墙主要是阻止从公网方向进来的流量,也就是从互联网发起的、到达openwrt路由器的流量。放行了必要的报文类型或端口后,不要再打开其他端口,更不能直接关闭防火墙。

查看状态

openwrt路由器进行PPPoE拨号成功后,可以在路由器概览中查看WAN接口是否获取了IP地址和DHCPv6-PD地址段。

状态—概览

IPv6 WAN状态

IPv6 WAN状态:WAN接口获取的IPv6地址
类型:dhcpv6-pd,表明openwrt从运营商获取了DHCPv6-PD地址段
分发前缀:获得的DHCPv6-PD前缀和前缀长度,/之前的地址表示DHCPv6-PD前缀,/56表示DHCPv6-PD前缀长度为56位
地址:WAN接口获取的IPv6地址
网关:openwrt WAN接口的IPv6网关是运营商设备的链路本地地址,以fe80开头

WAN接口获得的IPv6地址和DHCPv6-PD不是同一个网段,DHCPv6-PD用于给openwrt的LAN接口分配IPv6地址。

DHCPv6-PD的前缀长度如果是64,则只能分配给一个LAN接口,而且不能再继续给openwrt下面的其他路由器分配DHCPv6-PD。我这里获取的是56位的前缀长度。

或者在“网络—接口”页面查看

WAN接口的IPv6

这里只能看到WAN接口的链路本地地址,看不到公网地址。

LAN接口的IPv6

LAN接口获取了IPv6地址,IPv6地址前缀是240e:351:556:4000::,这个前缀来源于运营商分配的DHCPv6-PD地址段;IPv6地址接口ID是1,在LAN接口“IPv6后缀“中设置,如果不设置,默认是1;IPv6掩码是/60,在LAN接口“IPv6分配长度”中设置。

电脑的设置

电脑网卡启用IPv6的DHCP。

电脑自动获取的IPv6

测试

可以在电脑ping一个IPv6地址,比如ping你设置的DNS。

d:\work>ping 2400:3200::1

正在 Ping 2400:3200::1 具有 32 字节的数据:
来自 2400:3200::1 的回复: 时间=18ms
来自 2400:3200::1 的回复: 时间=18ms
来自 2400:3200::1 的回复: 时间=18ms
来自 2400:3200::1 的回复: 时间=18ms

2400:3200::1 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 18ms,最长 = 18ms,平均 = 18ms

或者使用ping -6去测试一个IPv6域名,测试IPv6连通性和IPv6的DNS是否正常。

d:\work>ping -6 b1.planetnp.com

正在 Ping ty.hellonp.com [2603:c024:c002:3100::4001] 具有 32 字节的数据:
来自 2603:c024:c002:3100::4001 的回复: 时间=195ms
来自 2603:c024:c002:3100::4001 的回复: 时间=195ms
来自 2603:c024:c002:3100::4001 的回复: 时间=196ms
来自 2603:c024:c002:3100::4001 的回复: 时间=193ms

2603:c024:c002:3100::4001 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 193ms,最长 = 196ms,平均 = 194ms

可以搜索IPv6测试网站进行测试。

通过第三方网站进行测试

参考资料

最后修改:2024 年 07 月 18 日
如果觉得我的文章对你有用,请随意赞赏