本文于2020年4月成文。
2020年9月12日修订。
2024年6月13日再次修订。
之前写过一篇《在PPPoE拨号宽带上使用IPv6(Cisco路由器)》,今天就H3C设备又写了一篇。
使用此配置,H3C路由器(或其他H3C网络边界设备)可以使用DHCPv6 PD从运营商请求一个前缀,并使用该前缀为内网的终端分配全球单播IPv6地址(公共地址)。公网上的IPv6节点可以直接访问内网的IPv6终端,不需要像IPv4做端口映射之类的配置。
但有几点需要注意:
1、该配置需要V7版本的设备软件;
2、内网终端上网期间,路由器的WAN口掉线重拨,会导致内网终端IPv6不通。因为双栈客户端优先使用IPv6 DNS解析域名,所以同时会导致双栈终端IPv4应用缓慢。
此问题是由于路由器处理失效前缀时,未遵循RFC7084的规定——未通过RA向内网终端宣告前缀失效。无效的前缀因其valid lifetime还有很长时间,可残留在终端上长达一两天。
对于软件版本较老的网关设备,可通过重启内网终端设备来临时缓解。(对一般家用网络,电脑会每天重启;手机会经常脱离、加入Wi-Fi,会重新获取地址,故影响不大。)
---------------------2020年9月12日更新---------------------
经过笔者与H3C研发部门长达五个月的沟通,H3C终于在R5435P02版本中增加了一个新命令,用于处理该种情况,详见下文接口中的配置命令。
---------------------2024年6月13日更新---------------------
前文所述V7 R5435P02版本,仅针对H3C的一体化无线设备(MSG/WAC等),并不适用于路由器设备。
H3C在2024年5月发布了路由器产品的V7 R6749P2102(2023年度稳定版本),在此版本中路由器产品首次支持对IPv6失效前缀宣告无效。
在这里重点标记以下这个关键的命令(用于宣告失效的被委派IPv6前缀无效):
ipv6 nd ra invalid-delegated-prefix advertise enable
dialer-group 1 rule ip permit
#
ipv6 dhcp pool stateless //创建DHCPv6无状态地址池
option-group 1 //引用DHCPv6选项组1中的信息(见Dialer接口中的相关命令)
#
interface Dialer5 //PPPoE拨号接口
mtu 1492
ppp chap password simple pwd
ppp chap user usr
ppp ipcp dns admit-any
ppp ipcp dns request
ppp pap local-user usr password simple pwd
dialer bundle enable
dialer-group 1
dialer timer idle 0
dialer timer autodial 60
ip address ppp-negotiate
tcp mss 1452
nat outbound
ipv6 address auto //无状态自动配置IPv6(全球单播)地址
ipv6 address auto link-local //设置IPv6链路本地地址
ipv6 dhcp client pd 1 rapid-commit option-group 1 //通过DHCPv6 PD向ISP请求前缀。pd 1指将获得的前缀分配为前缀编号1;option-group 1指将DHCPv6下发的其他选项(如DNS地址)指派到本地的选项组(option-group);rapid-commit指优先使用DHCPv6快速交互(rapid commit)模式。
#
interface Vlan-interface1 //第一个内网(比如是内部员工或家庭成员使用)
ip address 192.168.8.1 255.255.255.0
ipv6 mtu 1280 //H3C V7版本暂不支持ipv6 tcp mss,只能尽量减小MTU(此mtu设置会通过RA通告给“内网”的终端)。
ipv6 dhcp select server //指定接口工作在DHCPv6服务器模式
ipv6 dhcp server apply pool stateless //引用DHCPv6无状态地址池
ipv6 address 1 ::1/64 //引用前缀编号1中的前缀,接口主机位设置为::1,前缀长度设置为/64(从运营商获得的委派前缀长度可能为/60)
ipv6 nd autoconfig other-flag //指示客户端使用DHCPv6获取IPv6地址之外的其他配置(如DNS)
undo ipv6 nd ra halt //允许在此接口上发送RA
ipv6 nd ra interval 60 10 //RA的最大发送间隔和最小发送间隔(在最大和最小之间随机选择时机)
ipv6 nd ra invalid-delegated-prefix advertise enable //被委派前缀失效时发送RA,向内网终端宣告前缀失效(修订本文时新增的命令,对于无线一体化产品2020年9月的R5435P02版本开始支持,对于路由器产品2024年5月的R6749P2102版本开始支持)
ipv6 nd ra dns server 240C::6666 sequence 0 //使用RA RDNSS通告DNS服务器,以兼容不支持DHCPv6的客户端
ipv6 nd ra dns server 240C::6644 sequence 1 //使用RA RDNSS通告备用DNS服务器
#
interface Vlan-interface200 //第二个内网(比如给来宾、访客使用)
ip address 192.168.9.1 255.255.255.0
ipv6 mtu 1280
ipv6 dhcp select server
ipv6 dhcp server apply pool stateless
ipv6 address 1 ::1:0:0:0:1/64 //运营商委派的前缀长度为/60。出于管理需要,让vlan200下终端获取的IPv6地址与vlan1下的相区别,在此设置接口的主机位为::1:0:0:0:1,前缀长度仍为/64
ipv6 nd autoconfig other-flag
undo ipv6 nd ra halt //允许在此接口上发送RA
ipv6 nd ra interval 60 10
ipv6 nd ra invalid-delegated-prefix advertise enable
ipv6 nd ra dns server 240C::6666 sequence 0
ipv6 nd ra dns server 240C::6644 sequence 1
#
interface GigabitEthernet1/0/5 //拨号绑定的物理接口
port link-mode route
undo lldp enable
undo dhcp select server
pppoe-client dial-bundle-number 5
#
ip route-static 0.0.0.0 0 Dialer5
ipv6 route-static :: 0 Dialer5 //IPv6默认路由
验证配置:
display ipv6 interface Dialer 5 //检查拨号口是否正确获得了IPv6地址
display ipv6 prefix //检查IPv6前缀列表
display ipv6 dhcp option-group //检查DHCPv6选项组(option-group)中的信息是否正确
display ipv6 dhcp server //检查DHCPv6服务器是否已经启动,是否绑定到正确的接口
display ipv6 dhcp server statistics //检查DHCPv6服务器收发数据包的统计值
display ipv6 dhcp client //检查DHCPv6 PD是否正确获得前缀信息
2020年9月12日修订的内容:
增加了一条Vlan接口中的命令,该命令于R5435P02版本首次引入。
2024年6月13日修订的内容:
区分了无线一体化产品和路由器产品支持“IPv6失效被委派前缀宣告无效”命令的版本。