把 V2Ray 或 Xray 内核放到路由设备上,目标通常不是增加一个手动设置的 SOCKS 代理,而是让局域网设备经过统一网关完成流量识别、路由分流和 DNS 处理。部署是否稳定,主要取决于网关位置、Linux 网络能力、内核配置、规则数据和硬件性能,而不是仅看配置文件能否启动。
本文适合准备在家庭或小型办公网络部署网关代理的读者。内容覆盖主路由直跑与旁路由两种架构、V2Ray 与 Xray 内核选择、透明代理入口、策略路由、DNS 防回环、性能测试和故障定位,读完可以先完成架构评估,再决定是否进入实际部署。
先确定网关位置:主路由直跑还是旁路由
主路由直跑是指承担拨号、NAT、DHCP 和防火墙职责的设备同时运行内核。数据路径最短,客户端默认网关不需要调整,局域网中的新设备也容易自动进入规则体系。代价是所有网络职责集中在一台设备上,内核异常、规则错误或内存不足都可能影响整个局域网。
旁路由网关通常与主路由处于同一网段,由主路由继续负责外网接入,旁路由负责选定设备的转发与透明代理。它便于单独重启和回退,也适合先选择一台电脑或安卓设备试运行,再逐步扩大范围。需要注意的是,旁路由并不是接上线就会自动接管流量,客户端默认网关、DHCP 下发和静态路由必须明确配置。
主路由直跑
拨号、NAT、DHCP、分流与内核进程集中运行,数据路径短,但故障影响范围最大。
适合:硬件余量充足、网络结构简单、可安排维护窗口
旁路由网关
推荐外网接入与代理网关分离,可按设备逐步接管,配置失败时能快速切回主路由。
适合:家庭网络试部署、需要低风险回退、设备分组管理
终端独立运行
由 v2rayN、v2rayNG 或 v2flyNG 在终端处理订阅和代理,不改动局域网网关。
适合:设备数量少、只处理单机流量、不需要全网分流
选择前先画出实际数据路径。例如旁路由地址为 192.168.1.2、主路由地址为 192.168.1.1,被接管设备的默认网关应指向 192.168.1.2,旁路由的默认路由再指向 192.168.1.1。如果客户端仍把主路由作为默认网关,旁路由上的透明代理规则不会收到这些流量。
结论:第一次部署优先保留独立回退路径
先让单台测试设备使用旁路由网关,确认 DNS、国内直连、代理出口和断线恢复均正常,再修改 DHCP 批量下发。这样可以把配置错误限制在测试设备,而不是同时中断全网。
内核、固件与处理器能力怎么评估
路由设备上的“支持 V2Ray”可能只表示能够运行某个二进制文件,并不代表固件已具备透明代理所需的全部能力。至少要确认处理器架构匹配、系统能够执行目标内核、可用存储足够、服务管理器能够拉起进程,并且内核网络模块支持策略路由与透明转发。
V2Ray 内核适合既有 VMess、VLESS 和常见传输配置;Xray 内核在 VLESS、透明代理和较新传输能力方面更常见。两者的配置结构相近,但并非所有字段都能直接互换。订阅链接也不能由路由内核直接当作配置文件读取,通常需要管理层先解析订阅,再生成符合内核格式的出站配置。
推荐方案:网关负责分流,终端保留独立诊断入口
路由网关
- 固定内核版本与配置路径
- 透明入口监听 12345 端口
- 按域名与目标 IP 执行分流
- 日志由系统服务统一轮转
测试终端
- 桌面使用 v2rayN 7.x 验证节点
- 安卓使用 v2rayNG 或 v2flyNG 对照测试
- 保留直连网关用于故障回退
- 分别记录 DNS 与代理出口结果
节点可用性与网关转发能力分开验证,能够避免把订阅失效误判为路由规则故障。
处理器性能不能只看核心数。相同的四核设备可能因主频、缓存、加密指令和散热设计不同而出现明显差距。内存方面,内核本身、规则数据、DNS 缓存、日志和固件后台服务会共同占用空间;只有 128 MB 内存的旧设备在加载较大 GeoSite 数据后更容易触发回收或进程退出。
配置文件的关键字段与透明入口
网关配置至少包含入站、出站、路由和日志四部分。透明代理入站常用 dokodemo-door,并通过 followRedirect 接收防火墙重定向后的原始目标地址。出站应设置清晰的标签,例如 proxy、direct 和 block,路由规则再引用这些标签。
下面是结构示意,省略了真实服务器地址、认证信息和完整 DNS 配置。示例监听 12345,同时接收 TCP 与 UDP,并启用目标嗅探。实际使用时,出站协议和传输字段必须与节点参数一致。
{
"log": {
"loglevel": "warning"
},
"inbounds": [
{
"tag": "transparent-in",
"port": 12345,
"protocol": "dokodemo-door",
"settings": {
"network": "tcp,udp",
"followRedirect": true
},
"sniffing": {
"enabled": true,
"destOverride": ["http", "tls"]
},
"streamSettings": {
"sockopt": {
"tproxy": "tproxy"
}
}
}
],
"outbounds": [
{
"tag": "proxy",
"protocol": "vless",
"settings": {
"vnext": []
}
},
{
"tag": "direct",
"protocol": "freedom"
},
{
"tag": "block",
"protocol": "blackhole"
}
],
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{
"type": "field",
"ip": ["geoip:private"],
"outboundTag": "direct"
},
{
"type": "field",
"domain": ["geosite:cn"],
"outboundTag": "direct"
},
{
"type": "field",
"ip": ["geoip:cn"],
"outboundTag": "direct"
}
]
}
}geoip:private 应放在靠前位置,避免局域网、回环和保留地址进入代理出站。域名规则通常先由嗅探结果或 DNS 结果参与匹配,未命中时再按目标 IP 判断。规则由上到下执行,范围过大的规则放在前面,会遮挡后续更精确的直连或阻断规则。
- inbounds:确定透明入口监听地址、端口、网络类型与重定向行为。
- outbounds:保存代理、直连和阻断出口,标签必须与路由规则完全一致。
- routing:按域名、IP、端口、入站标签等条件决定流量出口。
- dns:决定域名向哪个服务器查询,以及查询流量是否经过代理。
- log:首次部署建议使用
warning或临时切换至info,稳定后避免长期输出过量日志。
结论:先验证最小配置,再加入订阅和规则数据
先用一个入站、一个可用出站和一条私网直连规则确认内核可启动,再逐项加入 DNS、GeoIP、GeoSite 与多节点选择。一次引入全部功能,会让端口、字段和规则错误难以分离。
透明代理、策略路由与 DNS 回环
透明代理并不是内核单独完成的功能。防火墙负责选中流量并设置标记,策略路由把带标记的数据包送到本地透明入口,内核读取原始目标后再选择出站。TCP 可以使用重定向或 TPROXY,UDP 通常需要 TPROXY 才能保留目标信息。具体命令取决于固件使用的防火墙后端。
以下命令只展示 Linux 策略路由与 TPROXY 的核心关系,不是可直接覆盖所有固件的完整脚本。执行前应确认系统包含对应模块,并排除网关自身、局域网地址、内核出站连接和管理端口,否则容易形成流量回环。
ip rule add fwmark 1 table 100
ip route add local 0.0.0.0/0 dev lo table 100
iptables -t mangle -N V2RAY
iptables -t mangle -A V2RAY -d 0.0.0.0/8 -j RETURN
iptables -t mangle -A V2RAY -d 10.0.0.0/8 -j RETURN
iptables -t mangle -A V2RAY -d 127.0.0.0/8 -j RETURN
iptables -t mangle -A V2RAY -d 172.16.0.0/12 -j RETURN
iptables -t mangle -A V2RAY -d 192.168.0.0/16 -j RETURN
iptables -t mangle -A V2RAY -p tcp -j TPROXY --on-port 12345 --tproxy-mark 1
iptables -t mangle -A V2RAY -p udp -j TPROXY --on-port 12345 --tproxy-mark 1旁路由还需要开启 IPv4 转发,可通过 sysctl net.ipv4.ip_forward 检查,返回 1 才表示已启用。若使用 IPv6,则必须单独设计 IPv6 路由与防火墙规则;仅处理 IPv4 时,应确认客户端不会通过未接管的 IPv6 默认路由绕过旁路由。
- 先用
ip route确认旁路由默认出口指向主路由。 - 用
ip rule检查标记1是否查询路由表100。 - 用防火墙计数器确认测试流量确实进入自定义链。
- 检查
12345是否由目标内核监听,且监听协议包含 TCP 与 UDP。 - 最后查看内核日志,区分“没有流量进入”和“出站连接失败”。
DNS 最常见的问题是查询路径与代理路径互相套用。例如局域网设备把旁路由设为 DNS,旁路由又把查询发送到会被透明规则重新截获的地址,最终出现超时或重复连接。处理方式是给 DNS 出站设置明确标签,或在防火墙中排除本地 DNS 进程与上游地址。
性能瓶颈要用持续负载判断
路由设备的吞吐由协议、传输层、加密计算、连接数量和散热共同决定。网页偶尔打开并不能证明性能足够,短时测速也可能被 CPU 突发频率掩盖。更有效的方法是在固定节点和固定网络条件下持续传输 10 分钟,同时记录吞吐、CPU、内存、温度和丢包。
一组实验室参考条件为四核 ARM Cortex-A53 1.5 GHz、1 GB 内存、千兆网口、300 Mbps 外网。直连实测约 286 Mbps;启用单个 VLESS over TCP with TLS 出站后,持续吞吐约 126 Mbps,CPU 峰值 91%,设备温度从 54°C 上升到 72°C。该结果只说明此硬件组合存在计算瓶颈,不能替代对具体设备的测试。
如果 CPU 单核长期接近满载而网口利用率不高,瓶颈多半在协议处理或加密计算;如果 CPU 较低但丢包增加,应检查网卡驱动、软中断和队列;如果运行数分钟后速度逐步下降,则要检查温度与降频。大量短连接还会提高连接跟踪表和内存压力,与单连接测速结果并不相同。
| 观察项 | 典型现象 | 优先检查 |
|---|---|---|
| CPU | 单核持续 90% 以上,吞吐不再增长 | 协议开销、加密能力、进程线程分布 |
| 内存 | 可用内存持续下降,内核进程被终止 | 规则数据、日志大小、连接数量 |
| 温度 | 前两分钟速度正常,之后阶梯式下降 | 散热、降频状态、设备摆放 |
| 丢包 | 延迟抖动,UDP 应用首先异常 | 网口协商、软中断、防火墙队列 |
家庭千兆网络并不意味着网关必须跑满千兆代理吞吐,但至少应覆盖实际外网带宽,并保留约 20% 的计算余量。若 300 Mbps 外网在测试中只能稳定处理 126 Mbps,继续增加规则并不能解决硬件瓶颈,应降低接管范围、改用性能更高的旁路由,或让高负载终端独立运行客户端。
上线前检查与常见故障处理
部署完成后不要只看内核状态显示“运行中”。完整验证应覆盖直连域名、代理域名、局域网地址、DNS 查询、TCP、UDP 和网关重启恢复。还要检查配置文件权限、系统时间和规则数据位置,因为证书校验依赖准确时间,而 GeoIP、GeoSite 文件缺失会导致对应规则无法按预期加载。
- 客户端能访问主路由与旁路由的管理地址,私网流量没有进入代理。
- 国内直连规则与代理规则分别命中预期出站标签。
- 53 端口只有计划中的 DNS 服务监听,不存在重复占用。
- 透明入口端口
12345未暴露到外网接口。 - 重启后内核、策略路由和防火墙规则按正确顺序恢复。
- 停止内核时有明确降级策略,不让全部流量继续送往失效端口。
旁路由已经启动,设备流量为什么完全不经过它?
先在设备上查看默认网关。若仍是主路由地址,就把测试设备网关改为旁路由地址,再用防火墙计数器确认数据包是否进入透明代理链。只修改 DNS 地址不会自动改变默认转发路径。
网页可以打开,语音或游戏流量却超时怎么办?
检查透明入口是否同时监听 TCP 与 UDP,并确认 UDP 规则使用 TPROXY 且标记进入路由表 100。随后查看出站节点是否支持当前 UDP 用法,不要只依据 TCP 网页测试判断整体连通性。
重启旁路由后必须手动执行命令才能恢复?
把启动过程拆成网络就绪、内核启动、策略路由加载和防火墙加载四步,并让后续步骤依赖前一步成功。若防火墙先于透明端口生效,启动阶段的流量可能被送到尚未监听的 12345 端口。
订阅在 v2rayN 中可用,放到路由器上却启动失败?
先在 v2rayN 7.x 的「设置」→「参数设置」中确认实际 Core 类型,再对照路由器上的内核类型和版本。订阅管理层生成的字段可能依赖特定内核,不能把客户端导出的全部字段直接视为通用配置。
访问局域网存储时速度变慢,应该先改哪条规则?
把 geoip:private 或明确的局域网网段直连规则放在代理规则之前,并确认防火墙在进入 TPROXY 前已排除 192.168.0.0/16 等实际私网范围。修改后观察规则计数,而不是只清理浏览器缓存。
最终配置应保留一份可启动的最小版本和一份当前运行版本。每次只调整一个变量,例如更换内核、更新规则数据或修改 DNS 上游,调整后完成同一套验证。路由器部署的可靠性来自可观察、可回退和可重复,而不是一次写入大量规则后长期不检查。