本文面向已经能使用桌面或安卓客户端、准备让局域网设备共用代理出口的用户。先用一台测试设备确认旁路由网关,再依次检查内核、透明入口、DNS 和分流规则。读完可以判断该把内核放在主路由还是旁路由,并明确哪些配置属于 OpenWrt 网络层、哪些属于 Xray 或 V2Fly 内核。这里提供部署路线与核对方法,不提供可以脱离设备环境直接套用的完整防火墙脚本。
一、主路由与旁路由:先确定流量经过哪里
透明代理的前提是流量实际经过运行内核的设备。“同一个局域网里放了一台 OpenWrt”不等于其他设备会自动使用它。主路由负责默认网关时,可以在转发路径上接管流量;旁路由只接入交换机时,通常需要修改终端默认网关,或者由主路由通过策略路由把指定流量送过去。
旁路由单设备试点
推荐保留原主路由的拨号、无线与 DHCP,只给一台测试电脑指定旁路由网关。故障范围小,恢复时只需还原这台电脑的网络设置。
适合:已有稳定网络、首次部署透明代理
主路由直接运行内核
OpenWrt 同时承担网关与代理转发,路径较直观,但内核故障、防火墙变更和资源不足都可能影响整个局域网。
适合:熟悉 OpenWrt、能够维护统一网关
主路由策略送往旁路由
终端继续使用主路由网关,由主路由按设备或网段转发给旁路由。需要设计往返路径和回环排除,不能只加一条默认路由。
适合:需要集中控制设备分组、具备策略路由经验
单网口旁路由常出现“主路由与终端位于同一子网”的情况:去程先到旁路由,回程却可能由主路由直接发给终端。是否需要源地址转换,要根据回程、状态防火墙和连接跟踪决定,不能把开启 NAT 当作万能步骤。同接口转发还可能触发 ICMP 重定向,部署时应检查终端是否因此绕开预期网关。
二、规划地址与端口:避免两个 DHCP 同时发地址
以下采用一个明确的示例网络:主路由为 192.168.10.1,旁路由为 192.168.10.2,测试电脑为 192.168.10.100,子网掩码为 255.255.255.0。这些是本文规划值,不是设备出厂设置;使用前应确认地址未被占用,并把旁路由地址排除在动态地址池之外。
| 对象 | 示例设置 | 作用 |
|---|---|---|
| 主路由 | 192.168.10.1/24 | 连接上游网络,保留现有 DHCP 服务 |
| 旁路由 LAN | 192.168.10.2/24 | 固定管理地址,上游网关指向主路由 |
| 测试电脑 | 192.168.10.100/24 | 默认网关与 DNS 暂设为旁路由地址 |
| 其他终端 | 维持现有自动配置 | 试点期间继续使用原网络路径 |
端口必须与实际监听配置一致。本文用 1053 表示可选的本机解析服务,用 12345 表示透明代理入站;安装内核不会自动创建这两个监听。dnsmasq 通常向终端提供 53 端口服务,不要让另一个进程同时抢占同一地址的 53 端口。
三、Xray 与 V2Fly:协议配置决定内核选择
V2Ray 是项目与技术生态中的常见称呼,部署时仍要区分具体内核。Xray 与 V2Fly 不是互换名称,也不能保证同一份配置在两者之间直接通用。已有连接若要求 REALITY 或 XTLS Vision,应核对 Xray 的对应支持;使用 VMess 等连接时,则按服务端参数、传输方式和所选版本确认兼容性。
- 桌面验证:先在 v2rayN 上验证连接可用,记录协议、地址、端口、用户标识、TLS、传输方式及相关字段。桌面端可用不代表路由器配置已经正确。
- 安卓对照:v2rayNG 使用 Xray 内核,v2flyNG 使用 V2Fly 内核。客户端保存的订阅与运行时核心配置不是同一种文件。
- 订阅边界:订阅可能是编码后的分享链接集合,也可能是特定客户端格式。裸内核通常读取自己的配置文件,不会把任意订阅 URL 自动变成可运行配置。
- 平台匹配:以 OpenWrt 软件包架构和处理器信息为准选择程序。仅看设备宣传中的“64 位”不足以确定二进制能否运行,还要考虑指令集和构建兼容性。
cat /etc/openwrt_release
ubus call system board
uname -m
# 已安装对应内核时检查版本
xray version
v2ray version
安装渠道优先使用与当前固件版本、架构相匹配的软件源。OpenWrt 22.03 起默认防火墙切换到 firewall4 与 nftables;旧版基于 iptables 的教程不能直接视为通用方案。软件包管理工具也可能随固件版本变化,应先确认当前系统使用的工具,不要混用不同发行版本的软件源。
结论:先验证连接,再接管流量
在修改网关之前,先让旁路由上的内核通过显式代理入口完成一次连接测试。这样可把“节点或配置失败”与“透明转发失败”分开,避免同时排查协议、DNS 和防火墙。
四、OpenWrt 部署步骤:网络、内核、转发分开完成
下面的菜单路径按常见中文 LuCI 界面描述,字段名称可能随固件与翻译变化。操作前保存现有配置,并确保有一台设备仍可直接访问主路由。首次试点不要修改全网 DHCP 网关,更不要在远程连接中一次性替换所有防火墙规则。
-
保存配置
进入「系统」→「备份/升级」→「生成备份」,保存当前配置。记录主路由地址、DHCP 范围和旁路由接线方式,预先准备直连管理入口。
-
固定地址
进入「网络」→「接口」→「LAN」→「编辑」→「常规设置」,配置静态地址
192.168.10.2、掩码255.255.255.0、网关192.168.10.1。确认管理地址可访问,再处理 DHCP。 -
验证内核
安装匹配架构的 Xray 或 V2Fly,创建对应格式的配置。先做语法检查,再启动临时显式代理入口测试连接;此时不启用全局流量接管。
-
配置转发
按当前防火墙后端建立透明入口、流量标记与必要的策略路由。先限定来源为
192.168.10.100,并排除旁路由本机、内核出口及管理网段。 -
接入测试机
把测试电脑的默认网关与 DNS 改为
192.168.10.2,关闭该电脑上的系统代理,分别测试直连地址、代理目标和域名解析,防止桌面客户端掩盖路由故障。 -
设置自启
确认测试通过后,再配置 procd 服务与防火墙持久化规则。通过「系统」→「启动项」检查服务状态,并重启设备验证规则和进程都能恢复。
下面使用约定的配置位置演示检查命令。仅执行已安装内核对应的一组;文件路径需要与服务启动参数一致。V2Fly 示例使用 v5 命令形式,旧版本应先查看自身帮助,不要照搬参数。
# Xray 配置检查
xray run -test -config /etc/xray/config.json
# V2Fly v5 配置检查
v2ray test -c /etc/v2ray/config.json
# OpenWrt 服务日志
logread
配置检查成功只说明文件能够被解析,不证明远端可达。正式运行还要检查进程权限、日志输出、监听地址、系统时间与证书验证。路由器重启后时间尚未同步,可能导致 TLS 连接失败,应把时间同步纳入启动后核对项。
五、透明代理原理:防火墙接管与内核分流是两层
第一层由 OpenWrt 决定哪些包交给内核,第二层由内核决定交进来的连接走直连出口还是代理出口。只写内核 routing 规则却没有透明入口,终端流量不会凭空进入内核;只做防火墙转发却没有正确的出站配置,也无法完成代理连接。
| 机制 | 主要作用 | 部署注意 |
|---|---|---|
| REDIRECT | 把连接重定向到本机端口,常用于 TCP 接管 | 要匹配内核恢复原目标地址的方式,不能把 TCP 方案直接套给 UDP |
| TPROXY | 透明地把流量送至本机监听,可用于 TCP 与 UDP | 需要透明套接字支持、标记、策略路由和配套防火墙规则 |
| 内核路由 | 按域名、目标地址、端口等选择出站 | 注意规则顺序、域名信息来源和所用数据文件 |
| 出口排除 | 防止内核发起的连接再次被接管 | 按进程、标记或目的地址等条件设计,兼顾节点域名解析 |
以 Xray 为例,透明入口可使用 dokodemo-door,配合 followRedirect 及匹配的 socket 设置;这些字段仍需按具体模式组合。TPROXY 常配合一张专用路由表,把带指定标记的包作为本地流量送到回环设备。标记值和路由表编号属于本机规划,必须避开已有 VPN、策略路由或其他服务占用的值。
- 先排除路由器管理地址、局域网目标、组播与广播,不要把设备发现和管理流量全部送入远端代理。
- 防火墙只接管测试设备时,用来源 IP 限定;随后再逐步扩展到明确的设备组,不要一开始匹配整个 LAN。
- 内核自身的出站连接必须绕过透明入口,否则会形成“代理连接再进入代理”的回环。
- 验证阶段检查流量卸载设置。某些快速转发路径可能让后续数据包绕开预期处理,应先排除其干扰,再评估是否重新启用。
六、DNS 与 IPv6:网关正确也可能绕开分流
终端 DNS 指向旁路由后,还要检查旁路由把查询发往哪里,以及这条路径是否符合分流目标。让直连域名使用合适的解析出口、让代理域名的查询通过预期通道完成,比把所有解析请求简单塞进同一个出口更容易定位问题。不要让 dnsmasq 转发给内核,而内核解析又回到 dnsmasq,形成解析循环。
- 明确监听关系。终端访问
192.168.10.2:53;若设置独立本机解析服务,可让 dnsmasq 转发到127.0.0.1:1053。后者必须真的支持所需 DNS 请求,不能拿普通代理端口代替。 - 核对转发设置。在「网络」→「DHCP/DNS」中检查 DNS 转发与上游解析来源,确认没有意外沿用运营网络提供的解析器。修改前记录原值,以便回退。
- 区分内核 DNS。内核内置 DNS 是否用于路由判断、是否提供可供局域网访问的 DNS 入站,是不同问题。不能仅凭配置里有一个 DNS 字段,就认定已经接管终端解析。
- 检查加密解析。浏览器的安全 DNS 或应用自带解析可能绕过终端设置。测试时先统一解析路径,再决定如何通过设备设置或路由策略处理。
- 单独检查 IPv6。IPv4 网关改为旁路由后,终端仍可能根据主路由的 IPv6 路由通告直连上游。应为 IPv6 建立对应转发与 DNS 策略,或在测试设备上临时停用它来隔离问题。
FakeDNS 会返回合成地址,再由内核恢复目标域名。它不是“打开就防泄漏”的开关:分配地址范围、终端缓存、透明入口和路由识别必须协同。第一次部署建议先完成普通 DNS 与 TCP、UDP 转发验证,再评估是否需要 FakeDNS,避免把地址映射故障和网关故障混在一起。
七、排查与回退:按地址、解析、转发顺序检查
连接失败时先看基础网络,不要立刻更换协议。测试电脑能访问旁路由管理地址,旁路由能到达主路由,内核显式代理可用,三项都成立后,才集中排查透明接管与 DNS。测试工具可能来自可选软件包,缺少命令时先确认安装情况,不要据此判断网络已经损坏。
# 在旁路由检查地址、路由与策略规则
ip addr show
ip route show
ip rule show
# 使用 firewall4 的系统检查实际规则
nft list ruleset
# 在具备 nslookup 的测试终端检查指定 DNS
nslookup example.com 192.168.10.2
| 现象 | 优先检查 | 判断方向 |
|---|---|---|
| 管理页也打不开 | 地址冲突、网线、掩码与设备路由 | 先修复局域网连通性,不涉及代理协议 |
| 显式代理可用,透明模式失败 | 来源匹配、透明监听、标记与策略路由 | 重点检查 OpenWrt 接管路径 |
| 解析超时或反复失败 | 53 端口监听、上游可达性、解析循环 | 分别测试终端到旁路由与旁路由到上游 |
| 只有部分应用绕过代理 | UDP、IPv6、应用自带 DNS 与网关 | 不能只凭浏览器页面判断全设备流量 |
| 重启后失效 | procd、自启、规则持久化与时间同步 | 检查启动过程,而非重复导入订阅 |
结论:保留单设备回退入口
在全网推广前,把测试电脑网关和 DNS 恢复为原设置,确认原网络仍可使用。之后逐台加入旁路由策略,并记录每次变更;只有重启、DNS、UDP 和 IPv6 检查都通过,才考虑统一下发网关。
旁路由部署的关键不在于让内核进程“运行中”,而在于形成可解释、可验证、可回退的网络路径。先确认协议连接,再确认流量进入内核,最后确认直连与代理分别从正确出口离开。桌面与安卓客户端适合先验证连接参数;OpenWrt 则需要额外维护防火墙、网关、DNS 与服务生命周期。