在家庭或小型办公网络中,旁路由(旁路网关)架构因其灵活的分流能力而广受欢迎。但随着IPv6的普及,一个新的矛盾开始浮现:启用IPv6后,流量经常绕过旁路由直接通过主路由出口,导致代理规则失效;而如果为了代理强行关闭IPv6,又会失去远程串流、BT下载、内网穿透等依赖原生IPv6地址的能力。
这个问题的根源在于IPv6的地址分配与路由通告机制。IPv4时代,客户端通过DHCP获取网关地址;而在IPv6中,路由通告(RA)由主路由直接下发,客户端默认将主路由视为IPv6网关,旁路由被“跳过”。要让OpenClash在旁路由上重新接管IPv6流量,同时保留原生IPv6地址的端到端能力,需要在网络拓扑、OpenClash模式和DNS策略上做协同配置。本文将完整梳理这套共存方案。
前置条件与网络拓扑规划
在动手之前,先确认环境满足两个硬性条件。运营商下发的IPv6 PD前缀应小于/64(通常为/60或/62),如果前缀是/64,旁路由将无法从该前缀中划分子网进行中继,本文的方案不适用。代理服务商需支持IPv6出站,否则IPv6流量即使被OpenClash接管,也无法通过节点转发到目标网站。
推荐的拓扑如下:主路由负责拨号与IPv6前缀下发,旁路由(OpenWrt)作为OpenClash的运行载体,不承担NAT转换,仅对特定客户端提供代理网关和DNS服务。需要代理的设备将IPv4网关和DNS指向旁路由;不需要代理的设备保持自动获取,继续使用主路由作为网关,避免BT、PCDN等大流量业务挤占代理节点的带宽。
旁路由基础网络配置
登录OpenWrt管理界面,进入「网络」→「接口」,编辑LAN口。IPv4地址设置为与主路由同网段的静态地址(如`192.168.1.2`),网关指向主路由,DNS填入`127.0.0.1`(将解析交给OpenClash处理)。
关键一步是关闭旁路由的DHCP服务。在LAN口的「DHCP服务器」选项卡中勾选“忽略此接口”,防止与主路由的地址池冲突。同时,在「网络」→「防火墙」中,将转发(Forward)策略设为“接受”,确保流量能在主路由和旁路由之间正常通行。
关于IPv6,旁路由自身需要具备获取IPv6地址的能力,但不要在LAN口开启RA服务和DHCPv6服务,这两个功能应留给主路由或通过中继模式处理。
OpenClash的模式选择:TUN接管与Fake-IP
OpenClash的流量接管能力取决于运行模式。在旁路由+IPv6的场景下,推荐使用Fake-IP(TUN-混合模式)。TUN模式会创建一个虚拟网卡,在网络层直接接管流量,对IPv6和UDP的兼容性更好;Fake-IP则解决了DNS解析与连接建立的时序问题,让域名规则能够正确匹配。
进入「插件设置」→「模式设置」,将运行模式切换为Fake-IP(TUN-混合),内核选择Meta(mihomo)。如果此前使用的是Redir-Host模式,IPv6流量很容易绕过规则直接暴露,必须切换。
IPv6流量接管的两种路径
这是整个配置的核心分歧点,取决于代理节点是否支持IPv6出站。
路径A:节点支持IPv6出站——启用IPv6流量代理
在「插件设置」→「IPv6设置」中,勾选“IPv6流量代理”和“允许IPv6类型DNS解析”。如果使用TProxy模式,还需确认IPv6代理模式正确,UDP流量转发已启用。
此时,客户端的IPv6流量会进入TUN虚拟网卡,被Mihomo内核按规则分流。国外IPv6流量通过机 场的IPv6节点转发,国内IPv6流量则直连,保留原生地址的端到端特性。
路径B:节点不支持IPv6出站——过滤AAAA记录
如果节点仅有IPv4出口,强行代理IPv6流量会导致连接在节点侧失败。正确的做法是在OpenClash中过滤AAAA记录,让需要代理的域名只解析出IPv4地址,客户端不会尝试通过IPv6连接目标网站。同时,在「IPv6设置」中取消勾选“IPv6流量代理”,但保留“允许IPv6类型DNS解析”以确保直连的国内IPv6网站正常解析。
路由通告与NDP中继:让设备“看到”旁路由
即使OpenClash已经就绪,如果客户端的IPv6流量仍然直接发往主路由,旁路由依然无法接管。需要让客户端将旁路由识别为可达的IPv6下一跳。
在OpenWrt的LAN口「DHCP服务器」→「IPv6设置」中,将RA服务、DHCPv6服务和NDP代理三项全部设置为`relay mode`(中继模式)。中继模式的作用是让旁路由转发主路由的RA通告,并代为响应邻居发现请求,使客户端在保留主路由下发前缀的同时,将旁路由纳入IPv6路径。
配置完成后,在客户端上用`ip-6 route`查看IPv6默认网关。如果网关指向旁路由的链路本地地址,说明中继生效;如果仍然指向主路由,检查主路由是否允许RA中继,以及旁路由的WAN6接口是否已正确获取IPv6前缀。
DNS防泄漏:IPv6场景下的隐形防线
IPv6环境下的代理失效,很多时候不是路由没接管,而是DNS查询先绕过了代理。如果客户端仍然使用主路由或运营商下发的IPv6 DNS,解析结果可能与代理出口不匹配,触发风控或导致连接超时。
在OpenClash的「DNS设置」中,确保DNS劫持已开启,所有发往53端口的查询(包括IPv6 DNS)都被接管。如果节点不支持IPv6出站,务必禁用IPv6 DNS解析,避免客户端获得AAAA记录后尝试直连。同时检查`/etc/resolv.conf`或LAN口的DNS通告,确保客户端拿到的DNS指向旁路由而非主路由。
基础设施层面的隐性依赖
这套旁路由+OpenClash的方案,对本地配置的精确度要求很高,但它对代理节点的网络质量同样敏感。OpenClash的规则匹配、节点测速和DNS解析都依赖上行链路。如果代理节点在晚高峰丢包严重,即便本地分流完全正确,TLS握手和TCP重传依然会把体验拉垮。
常见问题
Q:开启IPv6流量代理后,部分设备完全无法上网,怎么办?
A:首先确认代理节点是否支持IPv6出站。如果节点只有IPv4出口,取消“IPv6流量代理”,改为在OpenClash中过滤AAAA记录。同时检查LAN口的RA/DHCPv6/NDP是否已设为relay模式,避免客户端拿到无法路由的IPv6地址。
Q:为什么旁路由的IPv6中继配置后,客户端仍然优先走主路由?
A:检查主路由的RA通告中是否包含“其他配置”标志。部分主路由默认只下发地址前缀而不下发网关信息,客户端只能将主路由视为网关。可以在主路由上调整RA设置,或在旁路由上启用NDP代理强制响应。
Q:IPv4代理正常,但IPv6网站无法访问,问题出在哪一层?
A:按顺序排查:OpenClash是否启用了IPv6流量代理或AAAA过滤、节点是否支持IPv6出口、DNS是否被正确劫持、以及客户端的IPv6默认网关是否指向旁路由。用`curl-6`从客户端测试IPv6出口,可以快速定位是代理层还是路由层的问题。
CN
EN