OpenWrt IPv6 设置方案 - pzyyll/Custom_OpenClash_Rules GitHub Wiki

🌐 OpenWrt IPv6 网络架构与配置详解

本文档将指导您如何以最优雅、规范的方式在 OpenWrt 主路由环境下配置 IPv6 网络。 本文在原本基础上经 AI 优化,如存在错误请尽快反馈。


👋 0. 引言与前置条件

本方案专为 OpenWrt/ImmortalWrt 主路由拨号环境 设计。

0.1. 关于旁路由

[!CAUTION] 本方案不适用于旁路由架构!

我们强烈建议您采用 主路由架构。旁路由架构在网络层面上存在固有的缺陷和复杂性,本项目不提供任何针对旁路由的 IPv6 支持方案。如果您坚持使用旁路由,请自行解决相关问题。

延伸阅读:关于“旁路由”的一些吐槽

0.2. 关于二级路由

对于二级路由下的 IPv6 配置,因网络环境差异较大且缺乏测试环境,本文档暂不提供特定配置指南。

0.3. 必备条件

在使用本方案前,请确保满足以下条件:

  1. 光猫配置:光猫已开启 IPv6 功能(连接模式为 IPv4&IPv6),并建议设置为桥接模式
  2. 宽带支持:您的宽带运营商必须支持 IPv6-PD (Prefix Delegation) 下发。如果无法获取 PD 前缀,本方案将无法实施。

🛠️ 1. OpenWrt/ImmortalWrt 配置指南

本指南适用于 OpenWrt 和 ImmortalWrt 固件。LEDE 固件用户请参考后续章节。

1.1. Dnsmasq 设置

首先,我们需要确保 Dnsmasq 能够正确解析并返回 IPv6 地址。

操作步骤: 进入 网络 > DHCP/DNS > 高级设置取消勾选 过滤 IPv6 AAAA 记录

[!WARNING] 若不关闭此选项,Dnsmasq 将过滤掉所有域名的 IPv6 解析结果,导致无法访问 IPv6 站点。

过滤 IPv6 AAAA 记录设置


1.2. WAN 接口配置

请根据实际情况选择 自动配置手动创建 其中一种方式。

🅰️ 方案 A:自动配置(推荐)

适用于大多数标准环境。

  1. 清理接口:如果存在旧的 WAN6 接口,建议先删除。
  2. 修改 WAN 接口:进入 WAN 接口的 高级设置
  3. 配置协议:开启 IPv6 选项。
  4. 配置委托
    • 禁用 IPv6 分配长度
    • 启用 委托 IPv6 前缀关键步骤)。
    • IPv6 首选项 留空。

WAN 接口 IPv6 配置 WAN 接口委派设置

  1. 检查 DHCP:在 WAN 接口的 DHCP 服务器 > IPv6 设置 中,确保所有选项均为 "已禁用"

WAN 接口 DHCP IPv6 设置

  1. 验证结果:保存并应用后,接口列表应自动生成一个虚拟的 wan_6 接口,并成功获取 IPv6-PD 地址。

WAN 接口获取 IPv6-PD

🅱️ 方案 B:手动创建

适用于需要自行修改参数的高级用户。

  1. 清理 WAN 设置:在原 WAN 接口的 高级设置 中,禁用以下选项:

    • 获取 IPv6 地址
    • IPv6 源路由
    • 委托 IPv6 前缀
    • IPv6 分配长度
  2. 创建接口:新建接口,命名为 WAN6,协议选择 DHCPv6 客户端,物理接口选择与 WAN 口相同的网卡(如 eth1)。

创建 WAN6 接口

  1. 高级设置:启用 委托 IPv6 前缀IPv6 源路由

WAN6 高级设置

  1. 验证结果:保存并应用后,检查 WAN6 接口是否获取到了 IPv6-PD 地址。

WAN6 获取 IPv6-PD 地址

[!TIP] 如果无法获取 PD 地址,请检查是否被上级光猫占用,或联系运营商确认宽带业务是否正常开通 IPv6-PD 功能。


1.3. LAN 接口配置(下发地址)

完成 WAN 端接入后,我们需要配置 LAN 口以便向局域网设备分发 IPv6 地址。

1. 配置前缀委托

WAN (或 WAN6) 接口设置中,根据需求决定是否勾选 委托 IPv6 前缀 给下级路由。

委派 IPv6 前缀设置

2. 配置地址分配模式

IPv6 地址后缀分配主要有两种方式:

  • SLAAC (无状态):由设备根据网关通告自动生成,所有设备均支持。
  • DHCPv6 (有状态):由路由器统一管理分配,部分 Android 设备不支持。

推荐配置:SLAAC + EUI-64

进入 LAN 接口 > 高级设置,在 IPv6 后缀 中填入 eui64

EUI-64 后缀设置

[!NOTE] 为什么要用 EUI-64? EUI-64 机制允许设备根据自身的 MAC 地址生成固定的 IPv6 后缀。这意味着即使运营商下发的前缀发生变动,设备的后缀依然固定,便于管理和防火墙规则配置。

更多技术细节:关于 EUI-64 的说明

3. 配置 DHCP 服务器

进入 LAN 接口 > DHCP 服务器 > IPv6 设置

  • 路由通告服务 (RA):服务器模式
  • DHCPv6 服务:已禁用
  • NDP 代理:已禁用
  • 本地 IPv6 DNS 服务器取消勾选

LAN 接口 RA 设置 LAN 接口 DHCPv6 设置

核心逻辑说明: 我们故意不通告 IPv6 DNS 地址,而是强制局域网设备使用路由器的 IPv4 地址(如 192.168.1.1)进行 DNS 解析。这可以有效防止客户端优先使用运营商下发的 IPv6 DNS 进行抢答,从而跳过 OpenClash 的 DNS 分流机制。这也解决了部分系统(如 Win11)偶尔无法通过 IPv6 ULA 地址通信的问题。

[!INFO] 关于多个 IPv6 地址: 配置完成后,您可能会发现 Windows 或 iOS 设备获取了多个 IPv6 地址。这是现代操作系统的隐私扩展 (Privacy Extensions) 功能,生成的临时随机地址用于对外访问以保护隐私,而 EUI-64 生成的固定地址用于接收传入连接。这是正常现象,无需担心。


1.4. 连通性测试

请使用 Chrome/Edge 等浏览器(关闭安全 DNS 功能)访问以下测试网站。

[!WARNING] 请勿使用 Firefox 进行测试,因其默认策略倾向于 IPv4,可能导致测试结果不准确。

🔗 测试地址https://testipv6.cn/

预期结果:所有检测项均应显示通过。

IPv6 连通性测试结果


1.5. 进阶技巧:日常使用监控

如果您希望实时了解当前网页是走 IPv4 还是 IPv6 通道,推荐安装浏览器扩展 IPvFoo

  • Chrome: 显示 IP 地址列表
  • Firefox: 需在 about:config 中设置 network.dns.preferIPv6true 才能优先使用 IPv6。

Chrome IPvFoo 扩展 Firefox 设置


🏗️ 2. Lean's LEDE 固件设置

由于维护者已全面转向使用 Official OpenWrt 和 ImmortalWrt,LEDE 固件不再作为主力维护对象。

设置逻辑与上述方案基本一致,以下截图仅供参考:

LEDE WAN6 设置 LEDE DHCPv6 设置


🚪 3. 如何正确配置"端口转发"

在 IPv6 环境下,所有设备均拥有公网 IP,因此传统的 NAT "端口转发" 概念已不再适用。取而代之的是 防火墙放行规则

原理说明

OpenWrt 默认防火墙策略会拒绝所有从公网主动发起的入站连接(除了 ICMP Ping),包括对下游设备的访问。这是为了保护内网设备不直接暴露在公网风险中。

配置放行规则

若需从外网访问内网设备(如 NAS 的 5000 端口),需在防火墙的 通信规则 中添加放行规则。

关键技巧:只匹配后缀 由于运营商下发的前缀(Prefix)可能会变动,我们在配置防火墙规则时,目标地址 只需填写 IPv6 地址的后 64 位后缀(即 EUI-64 生成的部分)。OpenWrt 的防火墙支持仅匹配后缀,从而实现动态前缀下的精准放行。

详细教程:IPv6 如何正确配置端口转发?


🧠 4. 深度解析:Why IPv4 DNS?

为什么我们建议只使用 IPv4 DNS 来解析 IPv6 域名?

很多用户存在误区,认为解析 IPv6 网站必须要有 IPv6 DNS 服务器。其实不然。

DNS 解析请求本质上是一次数据库查询:

  • 查询 A 记录 -> 返回 IPv4 地址
  • 查询 AAAA 记录 -> 返回 IPv6 地址

这个查询请求本身是可以通过 IPv4 网络发送的,也可以通过 IPv6 网络发送。只要 DNS 服务器数据库里有这条记录,无论你用什么协议去问,它都能把结果告诉你。

本方案的核心逻辑:

  1. 链路:客户端通过 IPv4 链路向 OpenWrt (192.168.1.1) 发起 DNS 请求。
  2. 解析:OpenWrt 的 Dnsmasq(或 OpenClash 内核)向上游查询到 IPv6 地址 (AAAA 记录)。
  3. 返回:OpenWrt 将 IPv6 地址返回给客户端。
  4. 连接:客户端拿到 IPv6 地址后,直接通过本机的 IPv6 协议栈发起连接。

这样做的好处:

  • 避免抢答:防止运营商下发的 IPv6 DNS 跳过 OpenClash 直接响应,导致分流失效或解析结果异常。
  • 兼容性好:规避了部分操作系统(如 Windows)对 IPv6 DNS 优先级处理不当导致的网络卡顿问题。

一句话总结:让 DNS 走 IPv4 通道查询,让流量走 IPv6 通道传输。这是兼顾分流效果与网络兼容性的最佳实践