旁路由部署要先打通普通转发,再接入内核与透明代理。本文面向能进入 OpenWrt 管理页并使用 SSH 的读者,用一组局域网地址说明网关、DNS、策略路由与出站规则如何配合。读完可以制定单设备试运行方案,区分配置错误与流量接管错误,并保留断网时的回退路径。
旁路由架构:网关与 DNS 分开确认
只在 OpenWrt 上启动 V2Ray,局域网设备不会自动使用代理。内核负责处理送到入站的连接;操作系统负责把设备流量送过来。透明代理还需要防火墙规则、策略路由与对应的监听端口。三层中少一层,进程即使正常运行,也可能没有任何业务流量。
本文采用单臂旁路由示例:主路由是 192.168.10.1,OpenWrt 是 192.168.10.2,测试电脑是 192.168.10.100,子网掩码均为 255.255.255.0。这些地址仅用于说明,部署前必须换成自己的网段,并确认旁路由地址不在 DHCP 自动分配范围内。
| 设备 | 配置示例 | 职责 |
|---|---|---|
| 主路由 | 192.168.10.1 | 连接上游网络,初期继续提供 DHCP。 |
| OpenWrt | 192.168.10.2,上游网关为 192.168.10.1 | 转发测试设备流量,运行内核与本地 DNS 服务。 |
| 测试电脑 | 网关与 DNS 均先设为 192.168.10.2 | 验证接管链路,暂不改其他设备。 |
| 其他设备 | 仍由主路由分配原网关与 DNS | 保留正常上网路径,减少试验影响。 |
网关决定数据包下一跳,DNS 决定域名解析路径,两者不是同一个开关。只改 DNS,通常不会接管普通网页连接;只改网关,也不保证设备采用旁路由的 DNS 策略。浏览器的安全 DNS、自带解析器的应用以及 IPv6 默认路由,都可能形成另一条路径。
内核选择:按节点配置判断
OpenWrt 上直接运行的是内核进程,不是桌面客户端界面。v2rayN 管理桌面配置,v2rayNG 与 v2flyNG 管理 Android 配置;这些客户端的菜单不能直接搬到路由器上。服务器地址、端口、身份字段、传输方式、TLS 与服务名称等参数,需要转换成所选内核能够读取的配置。
V2Fly 内核
推荐本文以 V2Fly 的 V2Ray 5.x 命令行为主线。已有 VMess 等兼容配置时,可先沿用对应内核,减少迁移变量;仍须按实际版本核对传输字段。
适合:已有兼容配置,准备先验证旁路由链路
Xray 内核
节点明确要求 REALITY 或 XTLS Vision 时,应使用支持相应能力的 Xray 版本。不能只把可执行文件改名为 v2ray,再假设配置字段和命令参数全部通用。
适合:节点明确依赖 Xray 特有配置
结论:先核对完整节点参数
把协议、传输、安全层和内核版本写成一份配置记录,再决定部署哪一个内核。仅看到“VLESS”或“VMess”名称,不足以判断整份节点配置是否兼容。
安装前还要核对处理器架构、存储空间与 OpenWrt 软件源。运行 uname -m 可查看运行架构,但软件包还受发行版 ABI 与依赖约束。不要混用其他 OpenWrt 分支的软件源。订阅链接也不等于原生内核配置;订阅需要由明确支持其格式的工具解析,更新后应先测试再替换运行配置。
- 记录
v2ray version的输出,以及cat /etc/openwrt_release的系统信息,方便后续复现问题。 - 节点凭据只保存在受限配置文件中,例如将配置权限设为
600;分享日志前移除凭据和订阅地址。 - 若使用域名规则或地域规则,确认对应资源文件存在,且路径与当前内核配置一致。
- 通过 OpenWrt 的 procd 服务机制管理进程,保留启动日志与重启策略;单次 SSH 前台运行不等于开机自启。
部署顺序:先转发,再接管单台设备
不要同时修改全网 DHCP、DNS 与防火墙。推荐先备份配置,再只改变一台测试电脑。下面菜单以常见 LuCI 界面为例;翻译或版本可能略有差异,应按页面字段确认,不要仅凭按钮位置操作。
-
保存备份
进入「系统」→「备份/升级」→「生成备份」,保存现有配置。记录电脑原来的网关和 DNS,同时保留直连 OpenWrt 管理地址的方式。
-
固定地址
进入「网络」→「接口」→「LAN」→「编辑」,确认静态地址为示例中的
192.168.10.2/24,上游 IPv4 网关为192.168.10.1。检查是否存在第二个 DHCP 服务,避免两台设备竞争分配地址。 -
验证转发
暂不启用透明代理,只把测试电脑网关改为旁路由。进入「网络」→「防火墙」检查相关区域的转发策略与需要的源地址转换,确认普通直连可以工作。
-
测试内核
准备完整配置后执行
v2ray test -c /etc/v2ray/config.json。通过后先前台运行,观察日志;再交给已配置的 procd 服务管理。旧版命令不同,先查看v2ray help。 -
限定接管
只匹配测试电脑
192.168.10.100的流量,配置透明入站、策略路由与防火墙。确认直连、代理和 DNS 都符合预期后,再考虑由 DHCP 下发旁路由网关。
# 以下为 V2Fly V2Ray 5.x 的检查与前台运行示例
v2ray version
v2ray test -c /etc/v2ray/config.json
v2ray run -c /etc/v2ray/config.json
# 以下在另一个 SSH 会话中检查系统状态
ip -4 route show
ip -4 rule show
ss -lntup
logread -e v2ray
透明代理:入站、标记与策略路由
透明代理不是把系统代理端口对外开放。常见方案中,REDIRECT 主要用于 TCP 重定向;TPROXY 可以处理 TCP 和 UDP,但需要内核模块、透明套接字支持、报文标记与策略路由共同配合。具体入站设置必须匹配防火墙采用的机制。
OpenWrt 22.03 起默认防火墙体系转向 firewall4 与 nftables。旧教程中的 iptables 命令不能直接当作当前配置依据。先查看系统实际使用的防火墙,并确认所需的 TPROXY 支持可用;命令执行成功,也不代表规则已命中目标流量。
以上是规划值,不是实测数据,也不是所有系统的固定要求。TPROXY 规则把指定连接交给 12345 入站,并设置标记;对应的 ip rule 将带标记的报文送到独立路由表,表内需要本地投递路由。标记值、掩码与路由表编号必须成套核对,并避免与已有策略冲突。
| 检查层 | 核对内容 | 遗漏后的现象 |
|---|---|---|
| 流量入口 | 源地址、LAN 接口与 TCP/UDP 匹配范围 | 内核没有连接记录,或误接管其他设备。 |
| 排除规则 | 局域网、管理地址、广播组播、节点服务器地址 | 管理页失联、局域网服务异常或代理循环。 |
| 透明入站 | 监听地址、端口、原目标读取及 TPROXY 套接字选项 | 流量到达本机,却没有可用进程接收。 |
| 策略路由 | 报文标记、规则优先级与本地投递路由 | 报文继续转发或被丢弃,入站仍无请求。 |
| 内核出站 | 服务器参数、DNS 与直连/代理规则顺序 | 入站有记录,但出站连接失败。 |
最初只接管 LAN 转入流量,不要立即接管路由器自身的 OUTPUT 流量。内核连接远端服务器时会产生新的本机连接;若这些连接再次被送回透明入站,就会形成循环。后续确需接管本机流量时,要设计独立的出站标记或进程排除,并处理节点域名解析后的地址变化。
- 使用
nft list ruleset查看规则位置与计数器,判断流量是否实际命中。 - 使用
ip -4 rule show和ip -4 route show table 100检查示例策略链路。 - 排查期间确认流量卸载是否影响观察结果;硬件或软件卸载可能让后续报文绕开预期处理路径。
- 通过 firewall4 支持的持久化方式维护自定义规则。仅在终端临时添加规则,重启防火墙后可能丢失。
DNS 与分流:解析路径要能解释
推荐把 DNS 当作独立服务规划。终端向旁路由的 53 端口查询,由 dnsmasq 等本地解析服务转发到合适的上游。V2Ray 配置中的 DNS 模块并不自动等于一个对 LAN 开放的 DNS 服务;需要另行配置监听或转发链路。
一种可检查的设计是让本地 DNS 服务监听 LAN 的 53,再把指定查询转交给本机 127.0.0.1:1053 上已经运行的解析服务。端口只是示例,必须确认实际有服务监听。若下游解析服务又把查询发回 192.168.10.2:53,就会形成 DNS 转发循环。
- 本地名称先保留:局域网主机名与内部域名应由本地 DNS 处理,不要全部送往远端。
- 节点域名先能解析:建立代理前就需要找到服务器地址,避免把唯一的解析路径依赖于尚未建立的代理。
- 具体规则在前:内核路由中先处理局域网、明确直连域名与指定代理域名,再设置默认出站。
- UDP 单独验证:TCP 网页正常不代表 UDP 已接管。DNS、实时通信和使用 QUIC 的连接要分别检查。
- IPv6 单独规划:若只部署 IPv4 接管,IPv6 连接可能走另一条默认路由。试验时可在测试设备上暂时关闭 IPv6;正式方案应补齐相应路由、DNS 与防火墙策略。
# 从安装了 nslookup 的测试电脑执行
nslookup example.com 192.168.10.2
# 在 OpenWrt 上核对监听与策略
ss -lnup
ip -6 route show
nft list ruleset
结论:用日志确认路径,不用测速猜路径
分别测试一个明确直连的目标和一个明确代理的目标,对照 DNS 日志、规则计数器与内核出站标签。网页能打开只能证明连接完成,不能证明它走了预期的出站。
透明接管后的流量可能只带目标 IP。若分流依赖域名,就要说明域名信息从哪里获得;内核嗅探只能识别部分协议中的信息,并非所有应用都可还原域名。DNS 返回地址、域名规则与实际连接应保持一致。相关字段可继续查看DNS 设置说明,但桌面客户端的设置项不能直接视为 OpenWrt 防火墙规则。
常见故障:按链路逐层排查
改网关后全都打不开,先查哪里?
先把测试电脑网关恢复为主路由,确认上游正常。再关闭透明接管,只验证旁路由普通转发。检查 LAN 转发策略、上游默认路由和回程路径,不要先更换节点。
内核在运行,为什么没有连接记录?
检查电脑实际网关是否为 192.168.10.2,再看 nftables 规则计数器。若计数增长但入站无记录,核对 12345 监听和标记到路由表的映射,同时排除浏览器仍使用显式代理的情况。
能连接 IP,域名却一直超时?
运行 nslookup example.com 192.168.10.2。检查 53 端口是否监听、LAN 到本机的 DNS 输入是否允许,以及上游解析是否可达;若使用 1053 转发,再确认该端口存在真实服务。
网页正常,游戏和部分应用不通?
检查是否只配置了 TCP 重定向,以及节点和出站是否支持所需 UDP。查看 IPv6 默认路由与相关规则。不要通过永久封锁某种协议来掩盖接管缺失,应先确认应用实际使用的传输。
防火墙重启后代理失效怎么办?
对比重启前后的 nft list ruleset 与 ip rule show。自定义规则、策略路由和内核服务都要有持久化与启动顺序安排;同时确认没有另一份规则重复添加相同标记。
共享日志时,保留时间、入站标签、出站标签和错误类型即可。超时可能来自服务器不可达、解析失败或回程异常;端口占用则应从 ss -lntup 中找监听进程。不要只截最后一行“连接失败”,也不要公开完整订阅链接或身份字段。
验收与回退:扩大到全网之前
旁路由的价值是集中管理,但故障影响范围也会扩大。单设备试运行至少应覆盖重启、DNS 查询、局域网访问、直连与代理出站、UDP 和 IPv6。没有完成这些检查前,保留主路由原有 DHCP 分配,不急着让全网改网关。
- 验证重启:重启 OpenWrt 后,确认内核服务、DNS、透明规则和策略路由均恢复,且没有重复规则。
- 验证内网:访问主路由管理页、文件共享和其他本地服务,确认局域网排除规则没有误伤。
- 验证失效行为:停止内核,观察被接管连接的表现。没有明确设计故障旁路时,代理流量通常会失败,不能假定它会自动直连。
- 验证回退:把测试设备网关和 DNS 改回原值,再移除自定义接管规则与策略路由。只停止内核、保留重定向规则,仍可能导致断网。
- 最后再推广:通过主路由 DHCP 设置下发旁路由网关和 DNS 后,更新客户端租约,并抽查实际收到的地址。静态配置设备需要单独处理。