OpenWrt IPv6中继配置教程

1. IPv6 中继要解决什么问题

OpenWrt正常做IPv6路由时,最理想的情况是上级路由或运营商通过 DHCPv6-PD 给 OpenWrt 下发一个前缀,例如 /56/60 或 /64。OpenWrt 再把这个前缀切给 LAN 侧客户端使用。

但很多家庭网络会遇到这样的情况:

  • 上级光猫或主路由只给 OpenWrt 一个 IPv6 地址,不给 Prefix Delegation。
  • 上级只有一个 /64,不能再标准地切分给下级路由。
  • OpenWrt 放在主路由后面,主路由能拿 IPv6,但不给下级路由分配前缀。
  • 不想使用 NAT66,希望 LAN 客户端仍然拿到上级网络里的公网 IPv6 地址。

这时OpenWrt就可以使用 IPv6 中继模式,把上级网络里的 RA、DHCPv6、NDP 等 IPv6 控制报文转发到 LAN 侧,让 LAN 客户端像直接接在上级路由后面一样获取 IPv6 配置。

简化理解:

普通 IPv6 路由:
上级路由/ISP --下发 IPv6 前缀--> OpenWrt --分配子前缀--> LAN 客户端

IPv6 中继:
上级路由/ISP --RA/DHCPv6/NDP--> OpenWrt 中继 --> LAN 客户端
OpenWrt IPv6 路由与中继对比

2. 中继模式的核心目的

IPv6中继的目的不是“让 OpenWrt 再造一个新的 IPv6 网络”,而是把上级已有的 IPv6 网络能力延伸到 OpenWrt 的 LAN 侧。

它主要完成三件事:

中继内容作用
RA relay把上级路由通告转发给 LAN 客户端,让客户端知道 IPv6 默认网关、前缀、MTU、DNS 等信息
DHCPv6 relay转发 DHCPv6 请求和响应,让客户端从上级 DHCPv6 服务获取地址或其他参数
NDP relay代理邻居发现,让上级网络能找到 LAN 侧客户端的 IPv6 地址

其中最容易被忽略的是 NDP relay。IPv6 没有 IPv4 那种 ARP,而是使用 NDP 做邻居发现。如果只转发 RA,不处理中间的邻居发现,上级路由可能不知道 LAN 客户端在哪里,最终表现为客户端拿到了 IPv6 地址但访问不通。

3. 什么时候应该使用 IPv6 中继

一般我们是为了让终端获取到公网IP才设置中继,大家要记住各个运营商的公网IPv6前缀,用于查看终端是否已经拥有了公网IP。

国内运营商公网IPv6前缀

  • 中国电信(China Telecom):240e开头(240e::/20)
  • 中国移动(China Mobile):2409开头(2409:8000::/20)
  • 中国联通(China Unicom):2408开头(2408:8000::/20)
  • 中国广电(China Broadnet/CBN): 240a开头(240a:4000::/21)
  • 中国教育和科研计算机网(CERNET / CERNET2)
    2001:250::/32
    2001:251::/32
    2001:da8::/32
    2402:f000::/32
    240c:c000::/20
  • 中国科技网(CSTNET)
    2001:cc0::/32
    2400:dd00::/28

推荐使用中继的场景:

  • OpenWrt上级是主路由,而主路由不给 OpenWrt 下发 DHCPv6-PD。
  • OpenWrt的wan6 能拿到 IPv6 地址,但 ifstatus wan6里没有ipv6-prefix
  • LAN 客户端需要公网 IPv6,但你不想使用 NAT66。
  • 上级只给一个 /64,你只需要把这个 /64 延伸到 OpenWrt LAN 侧。

不推荐使用中继的场景:

  • 运营商已经给 OpenWrt 下发 /56/60 或 /64 Prefix Delegation。
  • 你需要多个 LAN、访客网、IoT 网段都拥有独立 IPv6 子网。
  • 你希望 OpenWrt 完整掌控 IPv6 防火墙、前缀分配和多网段路由。
  • 你正在做企业网络或多 VLAN IPv6 规划。

如果上级能给 DHCPv6-PD,优先使用标准 IPv6 路由。中继是“没有前缀委派时的折中方案”,不是 IPv6 的最佳常规部署方式。

4. 典型拓扑

Internet
   |
光猫 / 主路由
   | 只提供 RA / DHCPv6,不提供 DHCPv6-PD
   |
OpenWrt WAN6
   |
OpenWrt IPv6 Relay
   |
OpenWrt LAN
   |
LAN 客户端获取上级 IPv6 地址
OpenWrt IPv6 中继典型拓扑

配置完成后,LAN 客户端通常会拿到和上级网络同一个 /64 里的 IPv6 地址。OpenWrt 在中间负责转发和代理相关 IPv6 控制流量。

5. 配置前检查

先确认 OpenWrt 上级 IPv6 是否正常。

ifstatus wan6
ip -6 addr show
ip -6 route show
logread -e odhcp6c

重点看 ifstatus wan6

ifstatus wan6 | grep -E '"ipv6-address"|"ipv6-prefix"|"route"'

如果能看到 ipv6-address,说明 OpenWrt 自己拿到了 IPv6 地址。

如果看不到 ipv6-prefix,或者 ipv6-prefix 是空的,说明上级没有给 OpenWrt 下发可分配给 LAN 的前缀,这正是中继模式常见的适用场景。

还要确认相关软件包存在:

opkg list-installed | grep -E 'odhcp6c|odhcpd|luci-proto-ipv6'

常规 OpenWrt 固件一般默认包含 odhcp6c 和 odhcpd。如果是精简固件,可能需要安装:

opkg update
opkg install odhcp6c odhcpd-ipv6only luci-proto-ipv6

如果你的固件使用完整 odhcpd 包,而不是 odhcpd-ipv6only,无需重复安装。

6. 命令行配置 IPv6 中继

下面示例假设:

  • 上游 IPv6 接口:wan6
  • 下游内网接口:lan
  • OpenWrt 已经可以通过 wan6 获取上级 IPv6 信息

6.1 设置 LAN 为 relay 模式

uci set dhcp.lan.ra="relay"
uci set dhcp.lan.dhcpv6="relay"
uci set dhcp.lan.ndp="relay"
uci commit dhcp

这三项分别表示:

  • ra=relay:中继 Router Advertisement。
  • dhcpv6=relay:中继 DHCPv6。
  • ndp=relay:中继 Neighbor Discovery。

6.2 设置 WAN6 为 relay master

wan6 是连接上级 IPv6 网络的一侧,需要作为中继的 master 接口:

uci set dhcp.wan6=dhcp
uci set dhcp.wan6.interface="wan6"
uci set dhcp.wan6.ra="relay"
uci set dhcp.wan6.dhcpv6="relay"
uci set dhcp.wan6.ndp="relay"
uci set dhcp.wan6.master="1"
uci commit dhcp

如果你的上游接口不叫 wan6,例如叫 wan_6wwan6vps6,请把命令里的 wan6 改成实际接口名。

6.3 重启 odhcpd

service odhcpd restart

必要时也可以重启网络:

service network restart
service odhcpd restart

6.4 完整命令示例

# LAN 侧启用 IPv6 中继
uci set dhcp.lan.ra="relay"
uci set dhcp.lan.dhcpv6="relay"
uci set dhcp.lan.ndp="relay"

# WAN6 侧作为中继 master
uci set dhcp.wan6=dhcp
uci set dhcp.wan6.interface="wan6"
uci set dhcp.wan6.ra="relay"
uci set dhcp.wan6.dhcpv6="relay"
uci set dhcp.wan6.ndp="relay"
uci set dhcp.wan6.master="1"

uci commit dhcp
service odhcpd restart
OpenWrt IPv6 中继配置流程

7. LuCI 页面配置

不同 OpenWrt 版本和主题的文字略有差异,但大致位置相同。

7.1 配置 LAN 接口

进入:

网络 -> 接口 -> LAN -> 编辑 -> DHCP 服务器 -> IPv6 设置

将下面三项改为中继模式:

页面选项建议值
Router Advertisement-Servicerelay mode
DHCPv6-Servicerelay mode
NDP-Proxyrelay mode

中文界面可能显示为:

页面选项建议值
路由器通告服务中继模式
DHCPv6 服务中继模式
NDP 代理中继模式

保存,但先不要急着应用,继续配置上游接口。

7.2 配置 WAN6 接口

进入:

网络 -> 接口 -> WAN6 -> 编辑 -> DHCP 服务器 -> IPv6 设置
页面选项建议值
路由器通告服务中继模式
DHCPv6 服务中继模式
NDP 代理中继模式
指定为主接口 / Master勾选

如果 LuCI 在 WAN6 页面看不到 DHCP 服务器或 IPv6 设置区域,可以直接使用命令行配置 /etc/config/dhcp。很多版本为了避免误操作,会让 WAN 侧界面看起来不像“DHCP 服务器”,但 UCI 配置仍然有效。

7.3 应用配置

完成后点击:

保存并应用

或者在 SSH 中执行:

service odhcpd restart

8. 配置结果示例

配置完成后,/etc/config/dhcp 里相关部分大致应类似:

config dhcp 'lan'
        option interface 'lan'
        option ra 'relay'
        option dhcpv6 'relay'
        option ndp 'relay'

config dhcp 'wan6'
        option interface 'wan6'
        option ra 'relay'
        option dhcpv6 'relay'
        option ndp 'relay'
        option master '1'

重点是:

  • 下游 LAN:radhcpv6ndp 都是 relay
  • 上游 WAN6:同样是 relay,并且有 master '1'
  • 一个中继组里通常只能有一个 master 上游接口。

9. 客户端验证

配置后,先让客户端重新获取 IPv6 地址:

  • 断开并重新连接 Wi-Fi。
  • 拔插网线。
  • 禁用再启用网卡。
  • 或者重启客户端。

Windows 查看:

ipconfig /all
ping -6 2400:3200::1
tracert -6 2400:3200::1
nslookup openwrt.org

Linux / macOS 查看:

ip -6 addr
ip -6 route
ping -6 2400:3200::1
traceroute6 2400:3200::1

正常情况下,客户端应具备:

  • 一个公网 IPv6 地址,通常不是 fe80:: 开头,也不是 fdxx: ULA 地址。
  • 一条 IPv6 默认路由。
  • 能 ping 通外部 IPv6 地址。
  • 能解析并访问带 AAAA 记录的网站。

10. OpenWrt侧验证

查看 odhcpd 日志:

logread -e odhcpd

查看接口 IPv6 信息:

ifstatus wan6
ifstatus lan
ip -6 neigh show
ip -6 route show table all

抓包观察 RA、DHCPv6、NDP:

tcpdump -i br-lan -n icmp6
tcpdump -i br-lan -n udp port 546 or udp port 547
tcpdump -i wan -n icmp6

如果你的上游 IPv6 实际设备不是 wan,请把抓包命令中的接口名改成实际设备名。可以用下面命令查看:

ip link show

11. 注意事项

11.1 有 DHCPv6-PD 时优先不用中继

如果 ifstatus wan6 里能看到 ipv6-prefix,说明上级已经给 OpenWrt 下发了前缀。此时更推荐让 OpenWrt 使用标准 IPv6 路由:

wan6 获取前缀 -> lan 使用 ra server / dhcpv6 server 分配地址

中继主要用于没有 Prefix Delegation 的情况。

11.2 中继不适合复杂多网段

IPv6 中继适合一个 LAN 延伸上级 /64。如果你有多个 LAN、多个 VLAN、访客网络或旁路由策略网络,中继会变得很别扭,因为多个下游网段共享同一个上级前缀时,NDP 和路由行为更难预测。

这种环境更推荐:

  • 正常 DHCPv6-PD。
  • 静态 IPv6 前缀路由。
  • NPTv6。
  • NAT66。
  • 重新规划上级路由,让它给 OpenWrt 分配前缀。

11.3 不要同时把 LAN 设置成 server 和 relay

LAN 侧要么是 IPv6 server 模式,要么是 relay 模式,不建议混用。

中继模式下应使用:

option ra 'relay'
option dhcpv6 'relay'
option ndp 'relay'

如果还保留 ra server 或 dhcpv6 server,客户端可能收到两套互相冲突的 IPv6 信息。

11.4 上游必须真的提供IPv6

IPv6中继不能凭空生成 IPv6 网络。它只是转发上游已有的 RA、DHCPv6、NDP 信息。

如果 OpenWrt 的 wan6 自己都没有 IPv6 地址、默认路由或上游 RA,中继不会让 LAN 客户端神奇地获得 IPv6。

11.5 防火墙要允许必要的 IPv6 控制流量

OpenWrt 默认防火墙通常已经允许 DHCPv6、ICMPv6 等必要流量。如果你改过防火墙,要确认没有拦截:

  • ICMPv6 Router Solicitation / Router Advertisement。
  • ICMPv6 Neighbor Solicitation / Neighbor Advertisement。
  • DHCPv6 UDP 546/547。

可以先查看默认规则:

uci show firewall | grep -i dhcpv6
uci show firewall | grep -i icmp
nft list ruleset | grep -i icmpv6

11.6 客户端可能需要重新连接

IPv6 地址、默认路由和 DNS 信息通常来自 RA 和 DHCPv6。改完中继后,客户端不一定立刻刷新。建议先断开重连网络,或者重启客户端。

11.7 Android 与 DHCPv6

Android 通常不使用 DHCPv6 获取地址,更依赖 SLAAC 和 RA。因此中继时不要只开 DHCPv6 relay,还要确保 RA relay 正常。

11.8 不要把 IPv6 中继和 relayd 混为一谈

odhcpd 的 IPv6 relay 是 RA/DHCPv6/NDP 中继。

relayd 通常用于 Wi-Fi 中继或伪桥接场景,主要解决二层桥接受限时的 IPv4/IPv6 连通问题。两者不是同一个功能,不要把 relayd 当作 IPv6 中继的必要组件。

12. 常见问题

客户端拿到了 IPv6 地址,但不能访问 IPv6 网站

检查顺序:

ip -6 route
ping -6 2400:3200::1
nslookup openwrt.org

重点确认:

  • 客户端有没有 IPv6 默认路由。
  • 默认路由是否来自上级或 OpenWrt 中继。
  • OpenWrt 的 dhcp.lan.ndp 是否是 relay
  • 上游防火墙是否允许 LAN 客户端的 IPv6 地址访问外网。

客户端只有 fe80:: 地址

fe80:: 是链路本地地址,不能代表公网 IPv6 可用。此时重点检查:

  • 上级是否发送 RA。
  • dhcp.lan.ra 是否为 relay
  • dhcp.wan6.ra 是否为 relay
  • dhcp.wan6.master 是否为 1
  • 客户端是否已经重新连接网络。

OpenWrt 自己有 IPv6,但 LAN 客户端没有

这通常说明上游只配置到了 OpenWrt 自己,LAN 侧没有得到中继信息。检查:

uci show dhcp.lan
uci show dhcp.wan6
logread -e odhcpd

确认 LAN 和 WAN6 都是 relay,且 WAN6 是 master。

wan6 页面找不到中继选项怎么办?

直接使用命令行配置即可:

uci set dhcp.wan6=dhcp
uci set dhcp.wan6.interface="wan6"
uci set dhcp.wan6.ra="relay"
uci set dhcp.wan6.dhcpv6="relay"
uci set dhcp.wan6.ndp="relay"
uci set dhcp.wan6.master="1"
uci commit dhcp
service odhcpd restart

LuCI 页面只是 UCI 配置的图形入口,命令行写入后同样生效。

中继和 NAT66 应该选哪个?

优先级建议:

  1. 有 DHCPv6-PD:使用标准 IPv6 路由。
  2. 没有 DHCPv6-PD,但上级有 /64 可延伸:使用 IPv6 中继。
  3. 中继不适合拓扑,且确实需要 IPv6 出站:再考虑 NAT66。
OpenWrt IPv6 路由、中继和 NAT66 选择流程

中继比 NAT66 更接近 IPv6 的原始设计,因为客户端仍然使用公网 IPv6 地址,不需要做地址转换。

13. 推荐排错清单

# 上游状态
ifstatus wan6
ip -6 addr show
ip -6 route show

# 中继配置
uci show dhcp.lan
uci show dhcp.wan6

# odhcpd 状态
service odhcpd status
logread -e odhcpd

# 邻居发现和路由
ip -6 neigh show
ip -6 route show table all

# 抓包
tcpdump -i br-lan -n icmp6
tcpdump -i br-lan -n udp port 546 or udp port 547

建议按顺序排查:

  1. OpenWrt wan6 自己是否有 IPv6。
  2. 上级是否没有下发 ipv6-prefix,确认确实需要中继。
  3. LAN 是否设置了 ra/dhcpv6/ndp relay
  4. WAN6 是否设置了 ra/dhcpv6/ndp relay 和 master 1
  5. 客户端是否重新获取网络配置。
  6. 防火墙是否拦截 ICMPv6 或 DHCPv6。
OpenWrt IPv6 中继排错流程
如需转载请保留该博客链接!OpenWrt flashing tutorials, firmware, routers, ipks and apps - ttcoder » OpenWrt IPv6中继配置教程

相关文章