wan口的拨号有好几种方式,SLAAC, stateless DHCPv6, stateful DHCPv6, DHCPv6-PD,这些请求方式在odhcpv6里面都可以配置。
1. odhcp6c客户端启动过程
开启openwrt .config配置
odhcp6c的启动需要在/etc/config/network uci里面配置允许,类似IPV4的udhcpc
配置好之后需要重启里面会执行然后就是一系列的ubus传输,最终会调用到里面对应的脚本,脚本脚本里面会调用函数,启动各个协议进程。
1.1 IPV4 CLIENT udhcpc启动
ipv4的启动在脚本里面的函数
- dhcp.sh脚本属于netifd-2014-09-08.1模块
- udhcpc可执行程序属于busybox-1.22.1模块
1.2 IPV6 CLIENT odhcp6c启动
ipv6的启动在脚本里面的函数
- dhcpv6.sh脚本和odhcp6c都属于odhcp6c-2014-12-10模块
1.3 进程查看
odhcp6c启动之后,在netstat下面可以看到udp的546端口,因为DHCPv6的客户端使用546端口,服务器使用的是547端口
2. odhcp6c拨号方式选择
上面提到了wan口的拨号是有很多种的,而且wan口的ifname也是会变化的。
2.1 dhcpv6方式
wan口拨号的uci配置在官网可以查看到
https://openwrt.org/docs/guide-user/network/ipv6/start
所以默认情况,udhcp6c的dhcpv6使用的方式进行拨号的。
所以路由器wan口获取到多少个ipv6地址,就看上一级的服务器能提供多少种服务。
如果上级只有dhcpv6服务器,则wan只获取到一个Global 地址,加上自己本地的link地址,是两个ipv6地址
如果上级既有dhcpv6服务器,也有ra服务器,则就会有三个地址,一个本地link,一个dhcp服务器分配的Global地址,一个ra服务器下发前缀算出来的Global地址。
支持DHCP-PD功能,所以在发送消息里面如果带了IA-Prefix的请求,则服务器就会在IA Prefix字段里面附带自己要在br-lan端口设置的ipv6端口地址前缀,,用于下发地址给lan口的设备的地址前缀,然后设置到br-lan的ifconfig里面。
在odhcp6c客户端发送DHCP-PD之后,会在br-lan口设置dhcp服务器的IP前缀,如下2001:db8:0:f00::,这样lan端就可以使用这个前缀地址通过odhcpd服务器下发给下一级ipv6地址了。
2.2 staticv6方式
ohdcp6c的静态IP方式将uci的值单独抽出来,没有跟上面的在一起,主要有如下参数
上面这种方式就把wan接口配置成静态ipv6了模式了,这样ipv4也得是静态模式,所以一般在wan6里面设置成static,而wan里面ipv4的还是正常的dhcp/static
3. 查看ipv6信息
在获取到ipv6地址后,除了使用ifconfig看下信息外,还可以使用ifstatus查看
4. 手机热点的测试
现在的手机热点,一般都可以提供ipv6地址,中继成功后获取到如下ipv6地址,跟手机在同一个网段
手机可以在http://www.test-ipv6.com/上面看到自己的网段
然后路由器设置成无线中继模式,连接手机的热点,wan6的ifname设置成apcli0,dhcpv6模式
连接成功后,可以看到以下信息,一个本地链路地址和一个全球单播地址。
使用手机热点获取到的Global ipv6地址是通过EUI64自己算出来的,所以这个地址应该不是dhcpv6服务器下发的,而是通过RA无状态模式生成的。
另外可以看到路由器的br-lan端口是没有全球单播地址的,路由器发出的IA-PD手机没办法回复,没有提供给下一级设备使用的地址。
这时候可以在lan口设置一个同网段的ipv6地址,这样lan端的设备就可以获取到ipv6地址,不过担心会冲突吧,比较不是正在的dhcpv6/ra服务器下发的