iPv6 折腾

折腾前:

起因:

因为了解了iPv6的相关技术,所以希望在自己的环境里进行实验。

技术介绍:

  1. Asuswrt:
  2. OpenWrt:
  3. iPv6:
  4. DHCPV6-PD:pppoe-wan获取到ipv4和ipv6地址,在lan上直接获取到本地ISP的iPv6前缀,路由器再根据前缀分配ipv6地址给局域网设备。
  5. 域名解析,解析iPv6地址,需要在nameserver上增加AAAA的解析。
  6. DDNS:动态域名解析。

初步折腾:

  1. 直接在路由系统iPv6页面上设置,连接选项Native,端口ppp,勾选Dhcpv6-dp
  2. 这样设置之后本地可以直接获取到iPv6,因为本地ISP支持DHCPV6-PD,自动会分配给局域网每个支持iPv6设备iPv6。
  3. DHCPV6-PD分配iPv6后缀有两种方式:stateless(无状态)、stateful(有状态)。简单来说无状态会分配一个较短的iPv6后缀地址,且相对稳定不变。
  4. 在路由器页面上放宽iPv6地址(直接ip或者ip后缀)的端口请求。
  5. 解析域名的AAAA为局域网内设备的iPv6地址配合防火墙放宽,可以实现iPv6互通。
缺点:
  1. 路由器系统Merlin的httpd服务仅能绑定ipv4地址,不支持ipv6访问管理,导致无法利用公网iPv6对路由器进行管理,这是最为致命的缺点。
  2. Merlin闭源,在进行DDNS设置中,收到闭源影响,导致支持较少。

二次折腾:

  1. Merlin不理想之后,尝试转到开源的OpenWrt,我选择了目前支持最为广泛的K3-lede版本:coolsnowwolf/lede,手动编译。
  2. 编译步骤见原文。
  3. 首次按照编译设置进行编译,编译第一次需要保持外网连接,之后编译不需要花费这么多的时间。第一次编译出来的固件版本,内置不含iPv6支持,需要后续安装iPv6协议以及odhcp,安装出错,依赖错误。
  4. 尝试修复依赖错误,删除了OpenWrt底层lib: libubox,导致所有操作都几乎失败。
  5. 利用CEF直接刷写LEDE固件,失败。利用CFE刷入tb的固件,成功。
  6. 进入tb固件刷入lean的LEDE固件,操作见上文网站。
  7. 此时LEDE固件的版本较低,但是iPv6的分配、操作都没有问题。虽然此时iPv6都可用,但是鉴于固件版本较低,我希望可以利用较新的固件。

二次折腾之后,经历非常多次的编译设置、编译,终于编译了一个版本,可以初步实现iPv6协议以及odhcp的功能实现。

最后折腾:

编译设置:
  1. 需要选用大部分的iPv6的功能。
  2. 需要安装luci-proto-ipv6、odhcp-onlyipv6
OpenWrt设置:
  1. WAN接口:连接校园宽带。

  2. LAN接口:dhcp设置 config dhcp 'lan' option interface 'lan' option ra 'server' option dhcpv6 'server' option ra_default '1' option ra_management '2'

  3. WAN6接口:默认即可

  4. 如果编译设置成功以及ISP支持DHCPV6-PD,那么这个时候应该已经初步实现功能。

难点:
  1. iPv6防火墙设置
  2. 局域网iPv6转发(端口放行)
  3. 通过iPv6访问管理路由器
  4. 通过DDNS实现路由器iPv6地址自动解析到域名
防火墙设置:
  1. 需要开放路由器端口,由于已知ISP封禁80、443所以我这里选用开放8081、23333两个端口。
iPv6转发:
  1. wan -> lan
  2. 端口自选(23333、8081 etc.)
DDNS解析:
  1. 域名来自namesilo
  2. 早先域名解析由DnsPod完成,虽然速度快,但是ddns的支持比较差。
  3. 转由he.net进行解析
  4. OpenWrt直接支持he.net