OpenWrt 旁路由设置与排错指南:透明代理原理、TPROXY vs REDIRECT 与断网排查

导读摘要:旁路由(旁路网关)怎么设置才不出问题:IP、网关、DHCP 怎么配;透明代理在 Linux 内核里怎么工作,为什么 TPROXY 比 REDIRECT 更适合 UDP;以及旁路由最常见的「国内网站打不开、时好时坏」问题的原因和解决方法。

简短回答:旁路由就是让设备把默认网关指向另一台跑代理的 OpenWrt,由它透明地分流,主路由继续负责拨号和 DHCP。设置时旁路由的网关和 DNS 指向主路由、关闭旁路由自己的 DHCP;透明代理优先选 TPROXY(同时支持 TCP 和 UDP);遇到国内网站时好时坏,多半是非对称路由,在旁路由上开启 LAN 口 IP 动态伪装(MASQUERADE)即可解决。

一、旁路由是什么

「旁路由」是国内的俗称,更准确的叫法是旁路网关。它和主路由接在同一个局域网里,只有一个网口工作(单臂),数据流向是:

设备 → 旁路由(判断直连还是代理)→ 主路由 → 互联网

好处是不改动原有网络,主路由出问题的概率低;坏处是旁路由宕机时,指向它的设备会断网。

二、基本设置

项目主路由(例 192.168.1.1)旁路由(例 192.168.1.2)
LAN IP192.168.1.1192.168.1.2,静态地址
网关—192.168.1.1
DNS—192.168.1.1 或公共 DNS
DHCP开启(可把下发网关改为 .2)关闭(勾选「忽略此接口」)

局域网里只能有一个 DHCP 服务器,两个同时开启会导致设备拿到随机的网关,表现为时好时坏。

三、透明代理原理:REDIRECT 与 TPROXY

「透明」是指设备不需要做任何代理设置,流量经过网关时被内核截获并交给代理程序。Linux 有两种常见做法:

REDIRECTTPROXY
实现方式在 nat 表做目标地址转换,改写成本机端口在 mangle 表打标记,通过策略路由把包交给本机监听的透明套接字,不改写地址
支持协议主要是 TCPTCP 和 UDP
原始目标地址需要通过 conntrack 查询套接字直接拿到
适合只代理 TCP 的简单场景游戏、语音、QUIC 等 UDP 场景

TPROXY 的典型规则如下(iptables 写法,nftables 有等价语法)。实际使用中 OpenClash、Nikki 等插件会自动生成这些规则,这里只是帮助理解:

# 带标记 1 的包查路由表 100,表中把所有地址视为本机,交给本机套接字
ip rule add fwmark 1 table 100
ip route add local 0.0.0.0/0 dev lo table 100

# 内网和保留地址不代理
iptables -t mangle -A PREROUTING -d 192.168.0.0/16 -j RETURN
# TCP 和 UDP 交给本机 7893 端口的透明代理
iptables -t mangle -A PREROUTING -p tcp -j TPROXY --on-port 7893 --tproxy-mark 1
iptables -t mangle -A PREROUTING -p udp -j TPROXY --on-port 7893 --tproxy-mark 1

数据包在内核中的路径是:网卡收包 → PREROUTING(mangle 表在这里打标记)→ 路由判断(因策略路由判定为发往本机)→ INPUT → 代理程序的透明套接字。

四、最常见的问题:国内网站时好时坏

症状:开启旁路由后,代理网站正常,但部分直连的国内网站打不开或加载一半。原因是非对称路由:

  1. 设备发出的包:设备 → 旁路由 → 主路由 → 外网;
  2. 回来的包:外网 → 主路由,主路由发现设备就在本地局域网,直接把包交给设备,跳过了旁路由;
  3. 旁路由的防火墙只看到了一半的连接,会把后续的包当作「无效状态」丢弃,连接就断了。

解决方法:让旁路由对转发出去的流量做源地址伪装,这样回包必须先回到旁路由。

# 在「网络 → 防火墙 → 自定义规则」中添加(iptables 版本固件)
iptables -t nat -I POSTROUTING -o br-lan -j MASQUERADE

使用 fw4(nftables)的新版 OpenWrt,可以在 lan 区域设置中勾选「IP 动态伪装」达到同样效果。代价是主路由上看到的所有流量都来自旁路由的 IP,无法再按设备统计流量。

五、其他排查要点

  • 部分网站握手失败:检查防火墙区域中的「SYN-flood 防御」和「丢弃无效数据包」,旁路由场景下可以先关闭排查;
  • IPv6 绕过旁路由:设备通过 IPv6 直接从主路由上网,不经过旁路由,表现为代理时有时无。可以在主路由关闭 IPv6 下发,或在代理插件中开启 IPv6 透明代理;
  • DNS 不经过旁路由:确认设备拿到的 DNS 是旁路由地址,否则代理插件无法接管解析,见 DNS 防泄露配置;
  • 旁路由自身无法上网:检查 LAN 接口是否填写了网关和 DNS。

OpenWrt 系统的基础设置见 OpenWrt 软路由系统全攻略,自己编译固件见 OpenWrt 编译教程。

常见问题

旁路由和主路由谁来开 DHCP?

通常只保留主路由的 DHCP。想让全家设备都走旁路由,就在主路由 DHCP 设置里把下发的网关和 DNS 改成旁路由地址;只想让部分设备走,就在这些设备上手动设置网关。

旁路由挂了全家都断网怎么办?

这是旁路由方案的固有风险。可以只让需要代理的设备走旁路由,或者准备一个一键把主路由 DHCP 网关改回自身的方案。

💡 机场情报局精选推荐:高品质海外节点与 IEPL 专线是流畅访问的基础,欢迎查阅我们的实时评测:【2026 稳定高速机场推荐榜单】。