本文面向能登录 OpenWrt、读懂 IP 路由与基础 JSON 的用户。先用一台测试设备验证旁路由网关,再区分显式代理与透明代理,最后安排 DNS、内核路由和防火墙规则。示例地址与端口用于说明拓扑,不是可以直接覆盖现网的完整部署脚本。
先画清旁路由与主路由的路径
旁路由不是插上网线就能接管全网的设备。局域网终端必须把流量交给它,或者主路由必须有明确的策略把选定流量送过去。本文采用单网口、同网段旁路由:主路由负责宽带接入与 DHCP,OpenWrt 负责接收指定终端的流量,判断直连或交给 Xray 出站。
| 设备或项目 | 示例值 | 职责 |
|---|---|---|
| 主路由 LAN | 192.168.10.1/24 | 连接上游网络,保留 DHCP 服务 |
| OpenWrt LAN | 192.168.10.2/24 | 作为测试终端的 IPv4 网关 |
| OpenWrt 默认网关 | 192.168.10.1 | 让旁路由自身连接上游 |
| 测试终端 | 192.168.10.100/24 | 手动指定网关,先不改全网 DHCP |
| 测试终端网关 | 192.168.10.2 | 把非本地网段的流量送往旁路由 |
上行路径是“终端 → OpenWrt → 主路由 → 上游”。同一子网内的设备互访通常直接通过二层网络完成,不会因为修改默认网关就自动经过旁路由。OpenWrt 的默认网关仍指向主路由;不要同时把主路由的默认网关改成旁路由,否则容易形成转发环路。
区分 Xray 内核、客户端与透明代理
Xray 是处理入站、路由与出站的内核,不自带 OpenWrt 网络管理界面。v2rayN 是桌面客户端,v2rayNG 是使用 Xray 内核的 Android 客户端,v2flyNG 是使用 v2fly 内核的 Android 客户端。它们的订阅管理界面不等于 OpenWrt 服务配置,也不能把订阅地址直接当作 Xray 的 JSON 配置文件。
先测显式代理
推荐先让一台终端明确连接旁路由上的 SOCKS 入站。确认远端出站可以工作后,再增加透明转发规则,减少同时排查协议配置与内核转发的变量。
适合:首次部署、验证节点参数、定位出站错误
再接透明代理
终端只指定网关,由 OpenWrt 防火墙和策略路由把选中的 TCP、UDP 流量送入 Xray。应用通常不必单独填写代理地址,但转发链路更复杂。
适合:已完成基础验证、需要接入多台局域网设备
显式代理只服务主动连接代理端口的应用;透明代理需要在网络层截获流量。仅启动 Xray、仅开放一个入站端口,或仅修改终端网关,都不足以完成透明代理。还需要 Linux 转发、防火墙匹配、策略路由和正确的回程处理。
按顺序检查 OpenWrt 基础配置
以下菜单按常见 LuCI 中文界面描述;翻译与主题可能略有区别。OpenWrt 22.03 起默认使用 firewall4 与 nftables,旧版常见 firewall3 与 iptables。先识别现有系统,再选择对应规则写法;不要把两套命令拼成一个启动脚本。
-
确认系统
打开「状态」→「概览」,记录固件版本和目标平台;登录终端运行
ubus call system board与uname -m。内核程序必须匹配设备架构与运行环境,不能把桌面安装包放进路由器运行。 -
设置地址
进入「网络」→「接口」→「LAN」→「编辑」→「常规设置」,将协议设为「静态地址」,配置示例地址
192.168.10.2、掩码255.255.255.0和 IPv4 网关192.168.10.1。按实际网段替换后再保存应用。 -
关闭重复 DHCP
在「网络」→「接口」→「LAN」→「编辑」→「DHCP 服务器」→「常规设置」中勾选「忽略此接口」,让主路由继续负责地址分配。本步骤针对本文同网段拓扑,不适用于由 OpenWrt 独立管理下游网段的方案。
-
验证本机联网
在「系统」→「系统」检查时间与时区,再检查默认路由、域名解析和上游可达性。系统时间明显错误会影响 TLS 连接;本机都不能正常联网时,不要先调整透明代理规则。
-
启动内核测试
从适配固件的可信软件源安装或部署 Xray,运行
xray version确认实际版本。用xray run -test -config /etc/xray/config.json检查配置;这里的文件路径是本文约定,服务实际读取路径需核对启动脚本。
测试通过只代表配置可被解析,不代表远端可连接。继续核对服务器地址、端口、协议、传输方式与 TLS 参数。使用 VMess 或 VLESS 时,应逐项对应提供方给出的配置,不要凭协议名称猜测 security、flow 或传输设置。
ubus call system board
uname -m
ip -4 route show
sysctl net.ipv4.ip_forward
xray version
xray run -test -config /etc/xray/config.json
上述命令用于查看与测试,不会替你设置防火墙。net.ipv4.ip_forward 应按转发需求启用;同时确认防火墙允许所需的 LAN 转发。不要为了排错直接关闭整个防火墙,也不要向上游接口公开代理入站。
安排透明入站、流量标记与回环排除
透明代理常见入口是 REDIRECT 或 TPROXY。REDIRECT 常用于 TCP 重定向,不能把 TCP 的配置照搬为完整 UDP 方案;TPROXY 可处理 TCP 与 UDP,但需要匹配的内核模块、防火墙规则和策略路由。本文以 TPROXY 解释各层关系,不提供脱离具体固件的“一键规则”。
这些是规划值,不是性能测试结果。端口 12345 必须与防火墙的 TPROXY 目标端口一致;路由表 100 只是可选编号,使用前先查是否已被其他服务占用。标记值同样需要统一规划,不能与现有多线接入、策略路由规则冲突。
{
"inbounds": [
{
"tag": "lan-tproxy",
"listen": "0.0.0.0",
"port": 12345,
"protocol": "dokodemo-door",
"settings": {
"network": "tcp,udp",
"followRedirect": true
},
"streamSettings": {
"sockopt": {
"tproxy": "tproxy"
}
}
}
]
}
- 截获层:在 LAN 入方向识别测试终端,将指定 TCP、UDP 流量交给透明入站,而不是无条件截获所有接口。
- 路由层:让被标记的数据包通过策略路由送到本地接收路径;查看
ip rule show与ip route show table 100核对规则是否真的存在。 - 排除层:排除局域网、回环、组播等不应代理的目的地址,并按实际环境排除其他保留网段。
- 回环防护:保证 Xray 发往远端服务器的连接不会再次被截获。按来源、目标端点或专用标记设计绕过规则,尤其注意域名端点解析后的地址变化。
- 回程层:同网段单臂转发的直连回包可能绕过旁路由。按拓扑评估选择性 SNAT、ICMP 重定向与连接跟踪;SNAT 会隐藏原始终端地址,不应盲目全量添加。
把防火墙分流与 Xray 路由分开
OpenWrt 防火墙决定“哪些包进入 Xray”;Xray 的 routing.rules 决定“进入内核后走哪个出站”。一条连接如果已经在防火墙层绕过,Xray 就看不到它,再精确的域名规则也不会生效。建议防火墙只负责必要的地址排除与接入范围,域名和业务分类集中在内核路由中维护。
| 处理位置 | 放置内容 | 验证方式 |
|---|---|---|
| OpenWrt 防火墙 | 源设备选择、保留地址排除、透明端口转交 | 查看规则计数与 LAN 入方向流量 |
| Linux 策略路由 | 标记匹配、本地路由表 | 查看 ip rule 与对应路由表 |
| Xray 路由 | 域名、目标地址、端口、入站标签匹配 | 查看访问日志中的入站与出站标签 |
| Xray 出站 | 远端协议参数、直连与拒绝动作 | 分别测试直连目标和代理目标 |
Xray 路由按规则顺序匹配,先命中的规则决定出站。把明确的局域网目标与特殊例外放在宽泛规则之前,避免一条大范围规则提前吞掉后面的细分条件。outboundTag 必须与实际出站的 tag 完全相同;不要只复制路由规则却漏掉对应出站。
domainStrategy: AsIs不会仅为路由 IP 匹配而主动解析域名。IPIfNonMatch在域名规则未匹配时,可能解析域名并重新进行 IP 规则匹配;它不是“所有 DNS 都走代理”的开关。- 透明连接常以目标 IP 进入内核。域名规则是否可用,取决于 DNS 设计或嗅探是否能提供域名信息;嗅探并不能恢复所有协议中的域名。
- 依赖
geosite或geoip时,需确认数据文件存在、路径正确且分类符合预期。不能把文件缺失误判为服务器故障。
单独设计 DNS 与 IPv6 接入
只修改 IPv4 网关,不等于 DNS 和 IPv6 都已进入旁路由。终端可能仍把 DNS 请求发往主路由,也可能通过主路由发布的 IPv6 默认路由直接访问上游。若希望测试设备通过旁路由解析域名,可以将其 DNS 指向 192.168.10.2,但前提是该地址确实运行了可用的 DNS 服务。
- 确定唯一入口。常见做法是让 OpenWrt 的 dnsmasq 接收 LAN 的
53端口请求,再按明确策略转发。先检查端口占用,避免另一个 DNS 进程绑定同一地址和端口。 - 避免解析闭环。若 dnsmasq 转发给本机另一 DNS 服务,后者的上游不能再指回 dnsmasq。代理服务器本身使用域名时,还需准备不依赖尚未建立的代理连接的初始解析路径。
- 区分内核 DNS。Xray 的
dns配置服务于内核相关解析,并不意味着局域网终端会自动改用它。终端请求必须经过实际 DNS 监听与转发链路。 - 检查加密 DNS。浏览器或应用自己的加密 DNS 不一定遵循系统 DNS 设置。测试时明确使用哪条解析路径,不要只根据一次
nslookup判断所有应用。 - 核对 IPv6。分别检查终端 IPv4 与 IPv6 默认路由。准备接管 IPv6 时,应单独设计路由通告、IPv6 防火墙和透明转发;暂不接管时,在测试终端上明确限制测试范围。
用一台设备验证,再扩展接入范围
把测试终端设为 192.168.10.100,网关设为 192.168.10.2,先验证主路由管理页、局域网设备与普通直连目标可访问,再测试需要代理的目标。TCP 网页成功之后,单独验证 UDP 应用和 DNS;一张网页能打开并不能证明整个透明链路已经完整。
改了网关就断网,先看哪里?
先把网关改回主路由恢复连接,再检查 OpenWrt 的默认路由、net.ipv4.ip_forward 与 LAN 转发策略。若关闭透明截获后仍不通,优先排查基础转发和回程,不要先改远端协议参数。
显式代理能用,透明代理却不行?
对照防火墙命中计数、透明入站端口和策略路由表。检查 TPROXY 所需模块与服务权限。只测试同一台设备、同一个目标,并观察 Xray 是否出现对应入站记录;没有记录时先查流量入口。
网页能开,语音或游戏不通?
分别检查 UDP 是否被截获、入站是否包含 udp、远端链路是否支持所需 UDP 转发,以及防火墙回包是否允许。不要把启用 TCP 重定向等同于启用了 UDP 透明代理。
为什么有些设备没有经过旁路由?
检查该设备当前默认网关、IPv6 路由及防火墙源地址匹配。手动网关只影响已修改的终端;要扩大接入,应在验证后通过主路由 DHCP 的网关选项统一下发,并让终端续租。
完成单机验证后,再考虑让主路由通过 DHCP 选项 3 下发旁路由 IPv4 网关,通过选项 6 下发经过验证的 DNS 地址;具体界面由主路由固件决定。保留恢复原网关的记录,并注意终端可能继续使用旧租约。不要在没有回滚入口时一次性改动全网。
- 检查持久化:重启后确认 Xray 服务、策略路由与防火墙规则仍存在,避免只在命令行临时生效。
- 检查规则归属:若由某个管理组件生成配置,不要同时手工维护同一份文件与规则链,以免更新时互相覆盖。
- 检查日志成本:排错时临时增加日志,结束后恢复合适级别。长期高频写入会增加存储与设备负担;分享日志前移除访问目标、凭据和设备标识。
- 检查实际负载:观察 CPU、内存、连接数与温度。吞吐取决于硬件、协议和链路条件,不能根据入站端口或设备名称推算固定速度。
继续阅读 进阶手册,核对路由规则顺序与 DNS 设置;遇到概念混淆时,先用 术语表 区分入站、出站和系统代理。旁路由部署的关键是逐层验证:先通基础网络,再通内核出站,最后接入透明转发。