少于 1 分钟阅读

在 OpenWrt 上配置 NAT66 并通过端口转发实现被访问

为什么要使用 NAT66?

在中国大陆,ISP 通常都不会给用户分配固定的 IPv6-PD 前缀,
有些地区只要不重新连接 PD 前缀就不会变,但至少我的 ISP 会在连接时间到 20 天时强制重连,会导致我内网的某些设备不能及时获取到最新前缀的DHCPv6地址。
NAT66 + ULA 前缀就可以解决上述问题

IPv6 上网方式

我使用 PPPoE 拨号的方式上网,
在 OpenWrt 的默认配置下拨号成功后会自动创建一个 DHCPv6 接口。
但我并不推荐直接使用默认配置来使用。
我更推荐以下方式

手动配置 IPv6 接口

  1. 编辑 PPPoE 接口,高级设置/获取 IPv6 地址
    将方式从自动设置为手动
    接口设置
  2. 新建接口,
    接口名称为 (PPPoE接口名称)_6,
    设备选择@(PPPoE接口名称)
    接口设置
  3. 取消勾选 高级设置/IPv6 源路由
    为稍后 NAT66 的配置做准备
    接口设置

配置完成后你应该可以获取 IPv6 地址和 PD 前缀并且正常上网

配置 NAT66 和端口转发

设置完 IPv6 接口后就可以开始配置NAT66了
以下方法参考了OpenWrt官方指导

配置 NAT66

  1. 网络/全局网络选项中设置 IPv6 ULA 前缀,
    你可以使用默认随机生成的前缀也可以按照要求自行手动修改
    IPv6 ULA 前缀设置
  2. 编辑 LAN 接口,高级设置/IPv6 前缀过滤
    只选择local (Local ULA)
    接口设置
  3. 编辑 LAN 接口,DHCP 服务器/IPv6 RA 设置
    设置默认路由器为 在可用的前缀上强制的 (推荐前者)
    接口设置
  4. 防火墙/常规设置中找到并编辑区域/wan
    勾选 IPv6 伪装
    区域设置

配置完成后可以发现出口 IPv6 地址变成路由器上 IPv6 接口的地址

配置完NAT66之后,如果还需要外网访问内网的设备,可以跟随以下方法

配置端口转发

  1. 防火墙/端口转发中添加转发
    地址族限制设为 仅 IPv6
    协议设为 任何
    内部地址设为 ULA 前缀的 IPv6 地址 (推荐选择 DHCPv6 地址)
    转发设置
  2. 高级设置中设置外部 IP 地址
    转发设置
    格式使用反向掩码,首先你需要知道 ISP 分配的 IPv6-PD 前缀长度有多少位是应该固定的
    IPv6 CIDR解析工具
    例如我的 ISP 分配给我的前缀长度为 /60,自定后缀为4ce,那么就应该写为
    ::4ce/::000f:ffff:ffff:ffff:ffff
    

    如果你的运营商给你的前缀长度为/64,外部地址应写为

    ::4ce/::ffff:ffff:ffff:ffff
    

    以此类推,如果前缀长度为/56,应写为

    ::4ce/::00ff:ffff:ffff:ffff:ffff
    

    假设我的 PD 前缀为 240e:3a1:468:c1f0::/60
    在设置完转发后访问 240e:3a1:468:c1f0::4ce 即可到达目标设备

完成后手动拼接 IPv6 PD 前缀和自定义的后缀就能实现访问内部设备