旁路由部署不是把桌面客户端搬到路由器上。它需要同时处理网关、内核入口、防火墙、DNS 和回程。本文面向能登录 Linux 终端的读者,用一个明确的 IPv4 测试网段说明部署顺序:先验证 Xray 出站,再接入单台设备,最后扩展透明代理范围。配置片段只用于分层验收,不是一份复制后即可接管全网的脚本。
一、主路由与旁路由的流量路径
主路由承担上网出口,通常负责拨号、地址分配和 NAT。旁路由则是在现有局域网里增加一台转发设备,让选定终端先把流量送给它,再由它决定直连还是交给代理出站。旁路由只接上网线,并不会自动获得其他设备的流量;必须通过终端网关、DHCP 选项或主路由策略路由明确引流。
本文示例中,主路由为 192.168.10.1/24,Linux 小主机为 192.168.10.2/24,测试电脑为 192.168.10.100/24。这些地址是教学用私网地址,部署前要按实际网段调整,并在主路由中保留小主机地址,避免与 DHCP 动态分配冲突。
单台终端旁路由
推荐保持主路由现状,只将测试电脑的默认网关改为 192.168.10.2。小主机的默认网关仍为 192.168.10.1。影响范围小,断网时容易恢复。
适合:首次验证、已有家庭网络、逐台迁移
主路由直接运行
在主路由上运行 Xray,并在同一设备完成引流。路径较集中,但需要确认处理器架构、可用内存、存储空间和防火墙集成方式。
适合:可控路由系统、能够维护防火墙的用户
双网口独立网段
小主机上游接主路由,下游使用独立子网。下游终端统一把小主机作为网关,回程更清晰,但需要单独配置地址分配、转发与出口 NAT。
适合:独立测试网络、长期网关部署
结论:先限制到一台测试电脑
首次部署不要直接修改全网 DHCP 网关。先让 192.168.10.100 走旁路由,确认普通网页、DNS 和局域网访问均正常,再考虑批量接入。
二、直跑 Xray 前的环境检查
V2Ray 常被用作这类代理工具的统称,但 Xray 与 V2Fly 是不同内核项目,配置能力不能混为一谈。这里采用 Xray。v2rayN 是桌面客户端,v2rayNG 使用 Xray 内核,v2flyNG 使用 V2Fly 内核;它们的订阅管理和界面设置,不等于 Linux 上已经配置好透明代理。
在路由器上要先检查 CPU 架构和系统 C 库要求,在 Linux 小主机上要确认服务管理器、防火墙体系及二进制路径。不能把一个架构的可执行文件直接搬到另一种架构,也不应在已有管理脚本的设备上再叠加另一套规则。
# 查看架构、内核和当前网络状态
uname -m
uname -r
ip -br address
ip route
timedatectl status
# 以下命令假定 Xray 已安装在这个路径
/usr/local/bin/xray version
/usr/local/bin/xray run -test -config /etc/xray/config.json
# 查看本文示例涉及的端口
ss -lntup | grep -E ':(53|10808|12345)\b'
这些数字是配置约定,不是性能测试结果。若端口已有占用,要同时调整内核配置与防火墙规则。系统时间也应保持准确;TLS 握手依赖证书有效期,时间错误可能表现为连接失败,而不是单纯的路由问题。
三、按五步接入测试终端
操作顺序应从应用层到网络层。先证明内核能主动连接,再证明终端流量能到达旁路由,最后处理透明入口。反过来一次改网关、DNS 和防火墙,出了问题就很难区分是哪一层失效。
-
记录原配置
记录测试电脑原来的地址、网关和 DNS,保存小主机的
ip route输出,并备份/etc/xray/config.json。远程维护时保留一条本地管理通道。 -
验证出站
在
/etc/xray/config.json配置仅监听 127.0.0.1:10808 的 SOCKS 入口和已确认的代理出站。先执行配置测试,再从小主机主动请求目标地址。 -
设置网关
Windows 测试电脑进入「设置」→「网络和 Internet」→ 当前网卡属性 →「IP 分配」→「编辑」,选择手动 IPv4。示例地址为 192.168.10.100,子网掩码为 255.255.255.0,网关为 192.168.10.2。不同版本字段位置可能略有变化。
-
接入 TCP
增加 12345 透明入口,防火墙只匹配测试电脑来源和实际 LAN 接口。先处理 TCP,保留内网目的地址直连,不同时加入 UDP 与设备自身流量接管。
-
接入 DNS
小主机的 DNS 服务能够回答查询后,再将测试电脑 DNS 改为 192.168.10.2。验证 UDP 53、TCP 53 和域名解析结果,最后重连网卡并检查设置是否生效。
小主机自己的默认路由必须指向主路由,不能指向自己。在单网口、同子网方案中,直连转发包可能由主路由直接回到终端,形成非对称路径。是否采用受限 SNAT,应根据回程与状态防火墙要求决定;SNAT 会隐藏原始终端地址,不是可以随手开启的万能修复。
四、透明入口与防火墙如何配合
透明代理由两部分组成:防火墙负责把符合条件的包送到本机入口,Xray 负责读取原始目的地址并选择出站。仅监听一个端口不会自动截获终端流量;仅设置重定向而没有对应入口,也不会产生可用代理。
| 接入方式 | 关键机制 | 部署边界 |
|---|---|---|
| 显式 SOCKS | 应用主动连接本地入口 | 适合先验证出站,不需要透明引流 |
| TCP REDIRECT | NAT 重定向配合原始目的地址读取 | 适合分阶段验证 TCP,不代表 UDP 已被接管 |
| TPROXY | 透明套接字、包标记、策略路由 | 可处理 TCP 与 UDP,需要内核及防火墙配套 |
下面是用于直连验收的最小配置。它提供本机 SOCKS 和 TCP 透明入口,但唯一出站为 freedom,所有请求仍然直连。它不包含代理节点、DNS 服务或防火墙规则,不能把它误当作最终代理方案。
{
"log": {
"loglevel": "warning"
},
"inbounds": [
{
"tag": "local-socks",
"listen": "127.0.0.1",
"port": 10808,
"protocol": "socks",
"settings": {
"auth": "noauth",
"udp": false
}
},
{
"tag": "lan-tcp",
"listen": "0.0.0.0",
"port": 12345,
"protocol": "dokodemo-door",
"settings": {
"network": "tcp",
"followRedirect": true
}
}
],
"outbounds": [
{
"tag": "direct",
"protocol": "freedom",
"settings": {}
}
]
}
- 入口隔离:12345 监听所有 IPv4 接口,只是为了接收 LAN 重定向流量。防火墙必须限定可信来源,并阻止 WAN 访问;10808 仍只对本机开放。
- 排除目的地址:本机管理地址、局域网网段、回环、链路本地、组播与广播目的地不应进入普通代理重定向。实际使用的其他内部网段也要明确排除。
- 排除代理服务器:代理出站的服务器地址应保持可达。若后续接管设备自身流量,还需通过进程身份或标记排除 Xray 出站,防止递归代理。
- 限制接管范围:首轮只匹配 LAN 入站接口及 192.168.10.100。不要一开始就对所有来源、所有协议或 OUTPUT 链做全量处理。
TPROXY 不是把 REDIRECT 的名字换掉即可。它通常要用包标记选择专用路由表,并在该表中设置本地投递路由,内核入口也要启用对应透明套接字选项。标记值、路由表编号及防火墙优先级必须与已有系统规则错开。本文不提供脱离设备环境的全网规则脚本。
五、DNS 接管要独立验收
网关和 DNS 是两项独立配置。把终端网关改成旁路由,并不保证它会使用旁路由解析域名。终端可能继续查询主路由,也可能使用浏览器加密 DNS。传统端口 53 的重定向,不能自动接管基于 HTTPS 的 DNS 请求。
建议先在小主机上准备一个只对可信 LAN 提供服务的解析器,然后让它明确选择上游路径。Xray 配置里的 dns 字段用于内核内部解析,不等于已经在局域网地址上开放了一个通用 DNS 服务。内核解析、终端查询和路由匹配需要分别验证。
| 检查对象 | 验证方法 | 判断重点 |
|---|---|---|
| 终端 DNS 指向 | 查看网卡当前 DNS 地址 | 确认不是仅修改了默认网关 |
| UDP 查询 | dig @192.168.10.2 example.com A | 确认服务监听、来源授权和上游可达 |
| TCP 查询 | dig +tcp @192.168.10.2 example.com A | 确认 TCP 53 没有被漏掉 |
| IPv6 解析 | dig @192.168.10.2 example.com AAAA | 确认 IPv6 数据路径与预期一致 |
透明入口收到的流量常常只有目标 IP。如果希望按域名分流,需要考虑域名信息从何而来。嗅探可从部分 HTTP 或 TLS 流量提取信息,但不能保证覆盖所有连接;启用嗅探也不意味着浏览器的 DNS 行为被统一。IP 规则与域名规则要结合实际入口能力设计。
六、转发、回程与启动顺序
旁路由上未被透明入口捕获的包仍需要正常转发。Linux 的 IPv4 转发开关、FORWARD 放行规则和上游回程必须同时成立。打开转发开关不是允许所有包通过,防火墙也不应因此改成全放行。
# 查看 IPv4 转发是否开启
sysctl net.ipv4.ip_forward
# 查看反向路径过滤设置,是否调整需结合实际拓扑判断
sysctl net.ipv4.conf.all.rp_filter
sysctl net.ipv4.conf.default.rp_filter
# 查看规则与策略路由,不要在远程会话中直接清空规则
sudo nft list ruleset
ip rule show
ip route show table all
# 仅适用于已创建 xray.service 的 systemd 环境
systemctl status xray --no-pager
journalctl -u xray -n 80 --no-pager
严格反向路径过滤在策略路由或非对称回程下可能丢包,但不应遇到断网就全局关闭。先确认包从哪个接口进入、反向路由指向哪里,再决定是否在相关接口采用合适策略。使用 nftables 或 iptables 应遵循系统现有管理方式,避免两套脚本互相覆盖。
- 启动依赖:内核需要网络可达;DNS 上游若经代理出站,还要避免代理服务器域名的解析反过来依赖尚未启动的代理。
- 持久化:交互执行的转发开关和防火墙规则可能在重启后消失。应通过系统配置文件和既有防火墙服务保存,而不是仅留在终端历史记录里。
- 故障行为:内核停止后,仍生效的重定向可能把流量送到一个无人监听的端口。必须明确失败时是停止联网,还是撤销接管恢复直连。
- 资源观察:看 CPU、内存、连接数和日志增长,而不是只看一次网页打开速度。路由器存储有限,不宜长期保留详细访问日志。
七、常见故障与恢复顺序
排查时固定一台终端、一个目标和一种协议。先检查显式 SOCKS 是否能通,再看透明 TCP,最后看 DNS 与 UDP。不要把所有超时都归为节点问题:包可能根本没有进入 Xray,也可能已经从内核出站但回程被防火墙丢弃。
| 现象 | 优先检查 | 处理方向 |
|---|---|---|
| 小主机 SOCKS 也失败 | 出站参数、系统时间、服务日志 | 先修复应用层,不修改终端网关 |
| SOCKS 正常,透明访问失败 | 来源匹配、入口监听、规则计数 | 确认包是否抵达 12345 入口 |
| 直连 IP 可达,域名失败 | DNS 监听与上游、TCP/UDP 53 | 独立验证解析服务,不反复更换节点 |
| 网页正常,UDP 应用失败 | 是否只接管了 TCP | 补齐 UDP 方案后再验收,不能用 TCP 成功代替 |
| 部分连接绕过旁路由 | IPv6 路由、应用自设代理与 DNS | 检查完整双栈路径和应用行为 |
| 重启后全网断开 | 地址变化、服务启动、规则持久化 | 按地址、服务、规则的顺序恢复 |
需要观察链路时,可在小主机使用 tcpdump -ni eth0 host 192.168.10.100,其中 eth0 必须替换为实际接口名。抓包可能包含域名和通信元数据,应缩小范围、短时间运行,并在分享前隐藏敏感信息。规则计数和入口日志结合起来,比只看浏览器报错更容易定位断点。
结论:保留明确的撤回路径
验收前不要扩展到全网。故障时先把测试电脑网关恢复为 192.168.10.1,并恢复原 DNS;随后仅撤销本次新增规则,不清空整个防火墙。确认主路由直连正常后,再逐层恢复旁路由配置。
旁路由的核心价值是集中处理指定设备的流量,而不是减少网络配置工作。稳定方案需要把入口、出口、DNS、回程和重启行为都写清楚。若只是单台电脑或 Android 设备使用代理,先通过客户端完成节点与协议验证,通常比直接接管网络更容易排查。基本概念可查阅概念速查,连接问题可参考高级用法中的连接排查。