OpenWRT ImmortalWrt 配置NAT6

内容目录

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-nat6kmod-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 前缀,这样就不会给内网地址分配前缀经常变化的全球单播地址:

  1. 禁用 DHCPv6 请求 PD 前缀

    uci set network.wan6.reqprefix='no'
    uci commit
    /etc/init.d/network restart
  2. 使用 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 互联网。