OpenWRT/ImmortalWrt 配置NAT6
在 OpenWRT 上配置 IPv6 网络,使其在仅获得 IPv6 地址但没有 PD(Prefix Delegation)前缀的情况下,使用 ULA(Unique Local Address)并通过 NAT6 访问互联网,可以按照以下步骤操作:
1. 确认 WAN 接口仅获取 IPv6 地址,但没有 PD 前缀
-
检查 WAN6 接口的 IPv6 信息:
ubus call network.interface.wan6 status | grep -A 10 ipv6
如果输出类似:
"ipv6-address": [ { "address": "2408:xxxx:xxxx::xxxx", "mask": 64 } ], "ipv6-prefix": [] # 没有 PD 前缀
说明 ISP 只分配了单个 IPv6 地址,但没有 PD 前缀。
Web路径:点击 网络 > 接口 查看。
2. 启用 ULA(Unique Local Address)
ULA(fd00::/8
)是 IPv6 的私有地址空间,类似于 IPv4 的 192.168.0.0/16
,用于内网通信。
方法 1:手动配置 ULA
编辑 /etc/config/network
,在 globals
部分添加:
config globals 'globals'
option ula_prefix 'fd00:1234:5678::/48' # 可自定义,但必须是 /48
可在此生成前缀: https://www.unique-local-ipv6.com/
然后重启网络:
/etc/init.d/network restart
方法 2:自动生成 ULA
OpenWRT 默认会生成 ULA 前缀,检查:
uci show network.globals.ula_prefix
如果未设置,可以手动生成:
uci set network.globals.ula_prefix="$(dd if=/dev/urandom bs=1 count=5 2>/dev/null | hexdump -e '5/1 "fd%02x"' -e '"\n"')::/48"
uci commit
/etc/init.d/network restart
Web路径:点击 网络 > 接口 > 全局网络选项 > IPv6 ULA 前缀。
3. 配置 NAT6(让 ULA 访问 IPv6 互联网)
由于没有 PD 前缀,无法直接分配公网 IPv6 给内网设备,因此需要 NAT6(类似于 IPv4 的 NAT)。
(1)安装 kmod-ipt-nat6
和 kmod-nf-nat6
opkg update
opkg install kmod-ipt-nat6 kmod-nf-nat6
(2)配置 NAT6 规则
# Configure firewall
uci set firewall.@zone[1].masq6="1"
# 启用 FullCone NAT6
uci set firewall.cfg01e63d.fullcone6='1'
uci commit firewall
service firewall restart
Web路径:点击 网络 > 常规设置。建议直接在命令行下操作。
关闭上游IPv6 过滤:
# Configure network
uci set network.wan6.sourcefilter="0"
uci commit network
service network restart
Web路径:点击 网络 > 接口 > WAN6 > 编辑 。建议直接在命令行下操作。
(3)启用 IPv6 转发
编辑 /etc/sysctl.conf
,确保:
net.ipv6.conf.default.forwarding=1
net.ipv6.conf.all.forwarding=1
然后应用:
sysctl -p
(4)修改 LAN 接口 IPv6 分配方式
修改路由通告,总是通告为默认路由
uci set dhcp.lan.ra_default=2
uci commit dhcp
/etc/init.d/odhcpd restart
(5)重启网络和防火墙
/etc/init.d/network restart
/etc/init.d/firewall restart
4. 测试 IPv6 连接
-
检查 LAN 设备是否获得 ULA 地址:
ip -6 addr show dev br-lan
应该看到类似:
inet6 fd00:1234:5678::1/64 scope global
-
测试 IPv6 互联网访问:
ping6 www.taobao.com
如果成功,说明 NAT6 生效。
5. 解决 IPv6 前缀频繁变化的问题
如果 ISP 分配的 IPv6 前缀经常变化(导致 WAN 接口 IPv6 地址变化),可以禁用 DHCPv6 请求 PD 前缀,这样就不会给内网地址分配前缀经常变化的全球单播地址:
-
禁用 DHCPv6 请求 PD 前缀:
uci set network.wan6.reqprefix='no' uci commit /etc/init.d/network restart
-
使用
odhcpd
仅获取 IPv6 地址:uci set network.wan6.proto='dhcpv6' uci set network.wan6.reqaddress='try' uci set network.wan6.reqprefix='no' uci commit /etc/init.d/network restart
6. 最终网络拓扑
[光猫] (仅分配单个 IPv6 地址)
|
[OpenWRT] (WAN: 公网 IPv6, LAN: ULA fd00::/64 + NAT6)
|
[内网设备] (fd00:1234:5678::xxxx, 通过 NAT6 访问 IPv6 互联网)
这样,即使 ISP 不提供 PD 前缀,内网设备仍然可以通过 ULA + NAT6 访问 IPv6 互联网。