在 OpenWrt 上配置 NAT66 并通过端口转发实现被访问
在 OpenWrt 上配置 NAT66 并通过端口转发实现被访问
为什么要使用 NAT66?
在中国大陆,ISP 通常都不会给用户分配固定的 IPv6-PD 前缀,
有些地区只要不重新连接 PD 前缀就不会变,但至少我的 ISP 会在连接时间到 20 天时强制重连,会导致我内网的某些设备不能及时获取到最新前缀的DHCPv6地址。
NAT66 + ULA 前缀就可以解决上述问题
IPv6 上网方式
我使用 PPPoE 拨号的方式上网,
在 OpenWrt 的默认配置下拨号成功后会自动创建一个 DHCPv6 接口。
但我并不推荐直接使用默认配置来使用。
我更推荐以下方式
手动配置 IPv6 接口
- 编辑 PPPoE 接口,高级设置/获取 IPv6 地址,
将方式从自动设置为手动
- 新建接口,
接口名称为 (PPPoE接口名称)_6,
设备选择@(PPPoE接口名称)
- 取消勾选 高级设置/IPv6 源路由,
为稍后 NAT66 的配置做准备
配置完成后你应该可以获取 IPv6 地址和 PD 前缀并且正常上网
配置 NAT66 和端口转发
设置完 IPv6 接口后就可以开始配置NAT66了
以下方法参考了OpenWrt官方指导
配置 NAT66
- 在网络/全局网络选项中设置 IPv6 ULA 前缀,
你可以使用默认随机生成的前缀也可以按照要求自行手动修改
- 编辑 LAN 接口,高级设置/IPv6 前缀过滤,
只选择local (Local ULA)
- 编辑 LAN 接口,DHCP 服务器/IPv6 RA 设置,
设置默认路由器为 在可用的前缀上 或 强制的 (推荐前者)
- 在防火墙/常规设置中找到并编辑区域/wan
勾选 IPv6 伪装
配置完成后可以发现出口 IPv6 地址变成路由器上 IPv6 接口的地址
配置完NAT66之后,如果还需要外网访问内网的设备,可以跟随以下方法
配置端口转发
- 在防火墙/端口转发中添加转发
地址族限制设为 仅 IPv6
协议设为 任何
内部地址设为 ULA 前缀的 IPv6 地址 (推荐选择 DHCPv6 地址)
- 在高级设置中设置外部 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 前缀和自定义的后缀就能实现访问内部设备