路由器直跑 V2Ray 或 Xray 内核在技术上可行,但真正的门槛不是把程序启动起来,而是处理 CPU 性能、DNS、策略路由、UDP 转发和故障回退。本文适合准备使用 OpenWrt 主路由或旁路由统一接管家庭设备的人,读完可以选定拓扑、估算硬件余量,并理解从节点参数到透明代理规则的完整部署链路。
先选拓扑:主路由直跑还是独立旁路由
统一网关接管
让 V2Ray 或 Xray 运行在网关,由防火墙把局域网流量送进内核,可统一管理多台设备,但不会自动改善节点线路、带宽或延迟。
主路由路线
拨号、DHCP、DNS、NAT 与透明代理集中,路径最短;但内核、DNS 或防火墙出错可能让全屋直连流量一起中断。
旁路由路线
易回退代理职责拆到第二台设备,可先接管一台测试电脑,稳定后再由 DHCP 扩大范围;旁路由停止时主路由仍可恢复普通网络。
主路由直跑
网络路径短,DHCP 与透明代理规则集中,但代理故障会直接扩大到整个局域网。
适合:熟悉 OpenWrt 防火墙、愿意维护故障回退规则
双网口旁路由
推荐WAN 与 LAN 边界明确,可先接少量终端测试,路由和 NAT 关系更容易排查。
适合:首次部署、家庭网络需要持续可用
单臂旁路由
只占一个网口,但入站与出站共享接口,需要谨慎处理网关、回程和防火墙区域。
适合:已有交换网络、能够分析策略路由
硬件门槛:内存够用不等于转发够快
代理吞吐取决于计算能力
真正影响体验的是单核性能、加密计算、连接数和散热,千兆网口不代表透明代理仍能跑满千兆。以 OpenWrt 24.10.2、Xray 25.6.8 为例,四核 ARM 的直连、VLESS TCP、VMess WebSocket 约为 936、612、438 Mbps;双核低频设备约为 917、214、156 Mbps。数字仅说明网口规格与代理吞吐没有直接等号。
| 使用规模 | 建议资源 | 重点观察 |
|---|---|---|
| 1 至 3 台设备,百兆接入 | 双核 ARM、512 MB 内存 | CPU 峰值、温度、DNS 延迟 |
| 5 至 15 台设备,300 至 500 Mbps | 四核 ARM、1 GB 内存 | 并发连接、UDP 丢包、软中断占用 |
| 千兆接入或大量并发 | x86_64 或较强 ARM、2 GB 以上内存 | 单核瓶颈、网卡驱动、持续散热 |
- 查看架构是否与内核文件匹配,常见类型包括 aarch64、armv7 和 x86_64,文件不能混用。
- 确认闪存还剩足够空间。除了内核本体,还要给 Geo 数据、配置备份和日志轮转留余量。
- 压测至少持续 15 分钟,不只看测速页面瞬时峰值。温度升高后的降频更接近真实家庭负载。
- 同时测试 TCP 与 UDP。网页能开不代表视频通话、游戏或基于 UDP 的域名解析正常。
结论:按代理吞吐选硬件
如果目标是稳定获得 500 Mbps 以上的透明代理吞吐,不要只看“千兆路由器”标签。先确认处理器架构、单核能力与散热,再用实际节点连续压测;CPU 长时间超过 85% 就应降低预期或更换设备。
配置下发:订阅链接不能直接交给内核
配置下发原则
v2rayN、v2rayNG 和 v2flyNG 是带界面的客户端,它们可以管理订阅、节点和运行参数。V2Ray 或 Xray 内核本身读取的是结构化配置文件,不会把常见订阅链接自动变成完整的透明代理方案。订阅只包含节点信息时,仍缺少入站端口、DNS、路由规则、日志级别和防火墙配合。
先验证节点,再生成路由配置
稳妥流程是先在客户端验证节点参数,再把服务端地址、端口、用户标识、传输方式和 TLS 相关字段写入路由器配置。桌面端可在 v2rayN 的「设置」→「参数设置」→「Core 类型」确认当前使用的内核家族,然后用同一节点做连通测试。安卓端可用 v2rayNG 验证 Xray 节点,用 v2flyNG 验证 V2Fly 配置,但不要把客户端导出的局部信息直接当成路由器透明代理配置。
确认架构
在路由器系统信息中确认 aarch64、armv7 或 x86_64,并核对可用闪存与内存。建议至少预留 80 MB 磁盘空间和 256 MB 空闲内存。
验证节点
先在 v2rayN、v2rayNG 或 v2flyNG 中连接同一节点,记录地址、端口、用户标识、传输层、TLS 与服务器名称,排除节点本身不可用。
确定内核
桌面验证时进入 v2rayN「设置」→「参数设置」→「Core 类型」,确认测试使用 Xray 还是 V2Fly;路由器端采用对应字段,不混用专属能力。
生成配置
把入站监听设为本机地址与固定端口,例如透明入站使用 12345,管理用 SOCKS 入站使用 10808,再补齐直连、代理和阻断出站。
小范围上线
先让一台测试设备使用旁路由网关,依次验证网页、DNS、视频和 UDP 应用。确认日志没有循环连接后,再修改 DHCP 网关下发范围。
透明代理核心:入站端口、策略路由与 DNS
TCP 与 UDP 必须分别验证
TCP 可采用重定向或 TPROXY,UDP 通常需要 TPROXY 才能保留目标信息。只处理 TCP 时网页可能正常,但游戏、实时通话和部分 DNS 会失败。新版 OpenWrt 以 firewall4 与 nftables 为基础,旧 iptables 命令不可原样照搬。
{
"inbounds": [
{
"tag": "transparent-in",
"listen": "0.0.0.0",
"port": 12345,
"protocol": "dokodemo-door",
"settings": {
"network": "tcp,udp",
"followRedirect": true
},
"streamSettings": {
"sockopt": {
"tproxy": "tproxy"
}
}
}
],
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{
"type": "field",
"ip": ["geoip:private"],
"outboundTag": "direct"
}
]
}
}
示例配置不是完整方案
它只展示内核侧关键结构,不含节点出站,也不能替代防火墙规则。端口 12345 必须与 nftables 转交目标一致;局域网、组播、管理地址和 DHCP 流量应先排除,避免再次送进代理。
DNS 要单独画出数据路径
- 局域网设备通常把查询发往网关的 53 端口,网关本地解析服务再决定使用哪个上游。
- 若内核 DNS 入站监听 1053,可让本地解析服务把指定域名转发到 127.0.0.1:1053,不要让 1053 再回到 53 形成循环。
- 国内域名与局域网域名可走本地解析,需代理的域名交给远程解析,并让对应连接使用代理出站。
- 排障时分别记录查询域名、返回地址和实际出站。只看“DNS 有结果”无法判断分流是否正确。
结论:先跑通 TCP,再增加 UDP 与 DNS 分流
首次上线只接管一台设备,并按“TCP 网页 → UDP 应用 → DNS 分流”的顺序逐层启用。一次性加入全局 TPROXY、复杂域名列表和多组上游 DNS,会让故障点难以定位。
路由分流:先排除内网,再决定代理范围
防火墙规则
决定哪些数据进入内核;若没有正确转交,即使内核已有代理规则,数据也不会进入透明入站。
内核规则
决定进入后走哪个出站。私有、回环、链路本地、组播及路由器必要连接应绕过透明入口。
防止循环
关键代理出站必须排除,否则内核到节点服务器的连接会被自己再次捕获,形成循环并迅速占满 CPU。
- 先排除局域网网段,例如 192.168.1.0/24,以及主路由、旁路由和网络存储设备的固定地址。
- 排除节点服务器地址,避免代理出站重新进入端口 12345。节点地址变化时需要同步更新规则。
- 保留 DHCP 使用的 UDP 67 与 68 端口,以及局域网发现和管理所需流量。
- 再添加需要代理的域名或地址规则,未匹配流量按预定策略直连,而不是默认全部阻断。
- 最后测试路由器自身更新、局域网设备互访、普通网页、视频和 UDP 应用。
上线前检查:日志、回退与故障定位
保留独立管理入口
回退保留主路由固定管理地址,并准备一台可手动填写 IP、网关和 DNS 的电脑。即使 DHCP 或旁路由失效,也能直接恢复配置。
控制日志级别
调试使用 info,稳定后降到 warning。重点观察端口占用、DNS 超时、路由循环、握手失败和进程重启,避免长期 debug 损耗闪存。
旁路由能打开网页,但视频一直转圈?
先测试 UDP 是否进入透明入站,再检查 nftables 标记与策略路由是否同时覆盖 tcp 和 udp。若只有 TCP 重定向规则,网页正常并不能证明 UDP 已接管。
改完网关后,连路由器管理页都打不开?
把主路由与旁路由管理地址加入直连排除列表,并确认局域网网段没有送入端口 12345。临时恢复时可在电脑上手动填写主路由为默认网关。
订阅更新了,路由器节点为什么没变化?
客户端订阅与路由器配置是两套状态。重新读取节点参数,更新路由器的出站配置并通过配置检查后再重启内核;不要假设订阅会自动写入 config.json。
内核启动成功,所有网站却都超时?
确认代理出站能直接到达节点地址,并检查该地址是否被透明规则再次捕获。随后核对系统时间、节点端口、TLS 服务器名称和 DNS 解析结果。
只有一两台电脑与安卓设备时,分别使用 v2rayN、v2rayNG 或 v2flyNG 更直观;需要统一管理电视、游戏设备等无法单独配置的终端时,旁路由价值才明显。落地以可回退为原则:先验证节点,再运行内核;先测本地 SOCKS,再接透明流量;先接管一台设备,再改 DHCP。