iPv6 折腾
折腾前:
- 路由器:斐讯K3
- 路由器系统:Merlin(tbvvnet)基于Asuswrt
- 网络:校园移动网络
起因:
因为了解了iPv6的相关技术,所以希望在自己的环境里进行实验。
技术介绍:
- Asuswrt:
- OpenWrt:
- iPv6:
- DHCPV6-PD:pppoe-wan获取到ipv4和ipv6地址,在lan上直接获取到本地ISP的iPv6前缀,路由器再根据前缀分配ipv6地址给局域网设备。
- 域名解析,解析iPv6地址,需要在nameserver上增加AAAA的解析。
- DDNS:动态域名解析。
初步折腾:
- 直接在路由系统iPv6页面上设置,连接选项Native,端口ppp,勾选Dhcpv6-dp
- 这样设置之后本地可以直接获取到iPv6,因为本地ISP支持DHCPV6-PD,自动会分配给局域网每个支持iPv6设备iPv6。
- DHCPV6-PD分配iPv6后缀有两种方式:stateless(无状态)、stateful(有状态)。简单来说无状态会分配一个较短的iPv6后缀地址,且相对稳定不变。
- 在路由器页面上放宽iPv6地址(直接ip或者ip后缀)的端口请求。
- 解析域名的AAAA为局域网内设备的iPv6地址配合防火墙放宽,可以实现iPv6互通。
缺点:
- 路由器系统Merlin的httpd服务仅能绑定ipv4地址,不支持ipv6访问管理,导致无法利用公网iPv6对路由器进行管理,这是最为致命的缺点。
- Merlin闭源,在进行DDNS设置中,收到闭源影响,导致支持较少。
二次折腾:
- Merlin不理想之后,尝试转到开源的OpenWrt,我选择了目前支持最为广泛的K3-lede版本:coolsnowwolf/lede,手动编译。
- 编译步骤见原文。
- 首次按照编译设置进行编译,编译第一次需要保持外网连接,之后编译不需要花费这么多的时间。第一次编译出来的固件版本,内置不含iPv6支持,需要后续安装iPv6协议以及odhcp,安装出错,依赖错误。
- 尝试修复依赖错误,删除了OpenWrt底层lib: libubox,导致所有操作都几乎失败。
- 利用CEF直接刷写LEDE固件,失败。利用CFE刷入tb的固件,成功。
- 进入tb固件刷入lean的LEDE固件,操作见上文网站。
- 此时LEDE固件的版本较低,但是iPv6的分配、操作都没有问题。虽然此时iPv6都可用,但是鉴于固件版本较低,我希望可以利用较新的固件。
二次折腾之后,经历非常多次的编译设置、编译,终于编译了一个版本,可以初步实现iPv6协议以及odhcp的功能实现。
最后折腾:
编译设置:
- 需要选用大部分的iPv6的功能。
- 需要安装luci-proto-ipv6、odhcp-onlyipv6
OpenWrt设置:
-
WAN接口:连接校园宽带。
-
LAN接口:dhcp设置 config dhcp 'lan' option interface 'lan' option ra 'server' option dhcpv6 'server' option ra_default '1' option ra_management '2'
-
WAN6接口:默认即可
-
如果编译设置成功以及ISP支持DHCPV6-PD,那么这个时候应该已经初步实现功能。
难点:
- iPv6防火墙设置
- 局域网iPv6转发(端口放行)
- 通过iPv6访问管理路由器
- 通过DDNS实现路由器iPv6地址自动解析到域名
防火墙设置:
- 需要开放路由器端口,由于已知ISP封禁80、443所以我这里选用开放8081、23333两个端口。
iPv6转发:
- wan -> lan
- 端口自选(23333、8081 etc.)
DDNS解析:
- 域名来自namesilo
- 早先域名解析由DnsPod完成,虽然速度快,但是ddns的支持比较差。
- 转由he.net进行解析
- OpenWrt直接支持he.net