TProxy 透明富强
TProxy 透明富强(透明网关模式)是针对 Linux 软路由或 NAS 网关环境的高级流量劫持配置,能够无感接管局域网内所有设备的网络通信。IPv4 流量恒被接管;IPv6 流量由**「接管 IPv6 流量」开关**单独控制(默认关闭,见下文)。
本页描述的是已启用状态下的行为。若开关打不开/开启后无效,请先看 常见问题解答 中关于 nftables 与端口的排查项。
防火墙与路由表工作机制
启用透明富强后,Fluxor 后端会自动检测并在系统底层调用 nftables 与 ip route 工具。其在系统后台下发的操作链如下:
- 注册 nftables 防火墙表:内核中创建名为
ip fluxor_tproxy的表;开启「接管 IPv6 流量」时,额外创建ip6 fluxor_tproxy6。 - 劫持流量:在预路由(PREROUTING)链中,把局域网设备入站的 TCP/UDP 流量拦截,重定向至您配置的
tproxy_port监听端口(默认 7898)。 - 自动绕过私有网段:内置规则会跳过目标为私有 IP 的流量,以及目标为本机(
fib daddr type local)的流量,避免内网互访被劫持。IPv6 侧额外绕过::1/128、fc00::/7(ULA)、fe80::/10(链路本地)与ff00::/8(组播,含 DHCPv6 的ff02::1:2)。 - 标记与路由表分流:对需要富强的流量打上防火墙标记
fwmark 1,并自动下发策略路由,将带该标记的流量重路由到策略路由表100完成富强出站。IPv6 使用ip -6的独立策略路由(同一fwmark 1/table 100取值,两个家族的 FIB 互不影响)。
开关状态与系统状态的一致性
nftables 规则不跨重启存活,而开关状态是持久化的。因此:
- 面板正常退出时会主动清理自己下发的规则;
- 面板每次启动都会把开关无条件归零并清理可能残留的规则。
这两步是为了避免「面板显示已关闭、流量却仍被劫持」的静默错配——这种情况在面板被 kill -9 或异常崩溃后最容易出现,且因为没有任何提示,排查成本很高。
绕过列表管理
为了防止不必要的流量进入富强内核,或者让特定的局域网设备直接直连,您可以在「配置」页面的 TProxy 绕过列表中设置过滤规则。
列表格式:每行一条规则,支持 # 注释(可单独成行,也可写在规则末尾)。首次使用时面板会预填一份可直接用的模板,弹窗右上角的**「恢复默认」**按钮可随时把它灌回文本框(仍需点「保存」才落盘):
# 公共 DNS(IPv4):让解析请求直连,避免 DNS 被劫持
223.5.5.5 # 阿里公共 DNS
180.76.76.76 # 百度公共 DNS
119.29.29.29 # 腾讯 DNSPod 公共 DNS
1.12.12.12 # 腾讯 DNSPod 公共 DNS,DoH 入口
# 公共 DNS(IPv6):需先开启「接管 IPv6 流量」,否则不会下发
2400:3200::1 # 阿里公共 DNS
2400:da00::6666 # 百度公共 DNS
# STUN 与内网穿透:穿透通道必须能直连,否则开启后可能连不上中转节点
141.101.90.1 # 示例:请替换为你实际使用的 STUN 或穿透服务地址为什么不预填「微信 / 支付宝 / 抖音」等服务的 IP? 这类服务的接入 IP 由 CDN 动态分配,厂商没有公布固定网段;预填错的网段会把本该走富强(或本该被内核规则处理)的流量静默放行,比留空更危险。确需按服务绕过时,先查到当前 IP 再自行填入:
dig +short short.weixin.qq.com。多数国内目标本来就会被内核的 GEOIP / GEOSITE 规则判为直连,这里的绕过只用于「完全不进内核」的场景(性能敏感,或服务风控对代理 IP 敏感)。
1. 目的绕过 (Destination Bypass)
- 作用:控制哪些外部目标 IP、网段或端口不走富强。
- 支持的规则格式:
| 格式 | 示例 | 说明 |
|---|---|---|
| 单个 IP | 223.5.5.5 | 让该目标的流量直连(常用于让 DNS 请求不被劫持) |
| 单个 IPv6 | 2001:db8::1 | 同上,按 /128 处理 |
| CIDR 网段 | 192.168.1.0/24、2001:db8::/32 | 整个网段直连 |
| 纯端口 | 53 | 所有协议下该端口直连(IPv4/IPv6 都生效) |
| 协议:端口 | tcp:80、udp:443 | 仅指定协议下的该端口直连(IPv4/IPv6 都生效) |
IPv6 绕过条目只在开启「接管 IPv6 流量」后才下发(网段绕过按家族分流到
ip/ip6两张表;端口绕过与家族无关,两张表都会下发)。未开启时,列表里的 IPv6 条目不会生效,面板会在日志中逐条说明「该规则未下发」,避免出现「看起来配了、实际没生效」。IPv4-mapped 写法(如::ffff:192.168.1.1/128)不受支持,会被判为无效规则。
- 典型用途:
- 让公共 DNS 直连,避免解析被劫持或污染(预填模板里已包含阿里 / 百度 / 腾讯 DNSPod 的 IPv4 与 IPv6 地址);
- 让 stun 服务器直连(如
141.101.90.1),避免干扰 stun 穿透; - 让内网穿透服务器直连(EasyTier 节点 IP、frp 穿透服务器 IP 等),保证穿透通道本身不被劫持;
- 放行特定服务的端口,避免其因为走富强而无法连接;
- 用 IPv6 全局地址访问自己的设备(NAS、摄像头、打印机等):这类地址不在内置保留网段里,需要按设备前缀整段放行(如
240e:3b3:xxxx:xxxx::/64)。设备的 IPv6 全局地址 = 运营商前缀 + 设备后缀,前缀会随重新拨号变化,因此填/64前缀比填单个地址稳定(用ip -6 addr查看)。
2. 源绕过 (Source Bypass)
- 作用:控制哪些局域网内部设备不需要经过面板富强(仅对入站流量生效)。
- 支持格式:仅支持 IP / CIDR(不支持端口写法,写了会被忽略)。
- 典型用途:
- 输入
192.168.1.120,则该设备的流量在 PREROUTING 阶段被直接放行,完全不经过 TProxy 劫持; - 输入 Docker 桥接网段——默认已预填
172.17.0.0/16,这样填的含义是「Docker 容器的出站流量默认不代理」(容器仍按宿主机原有网络直连,包括它的 DNS 请求)。要让容器也走富强,删掉这一行即可;自定义过 docker 网络的话,用docker network inspect <网络名>查实际网段(br-xxxx之类通常形如172.18.0.0/16)替换; - 常用设备的 IPv6 网段:设备的 IPv6 全局地址前缀会随重新拨号变化,按
/64整段填比填单个地址稳定。
- 输入
内置绕过无需重复填写:IPv4 私有网段(
10.0.0.0/8、172.16.0.0/12、192.168.0.0/16等)以及 IPv6 的::1/128、fc00::/7(ULA)、fe80::/10(链路本地)、ff00::/8(组播)已由内置规则绕过,不必再写进列表。
规则写错了会怎样? 格式不合法的行会被跳过并在日志中记录原因,不会导致整个规则集下发失败。若某条绕过规则看起来"没生效",可以先去日志里确认它是否被判定为无效规则。
本机出站富强 (Proxy Local)
原理:TProxy 默认只对局域网内其他设备的入站流量起作用,面板主机自身的本地出站流量默认直连。
默认状态:关闭。三个 TProxy 相关开关(TProxy 开关 / 接管本机流量 / 接管 IPv6 流量)在全新部署下全部为关,
tproxy.json的对应值都是零值。开启后:后台会把本机出站(OUTPUT)链中的流量也纳入 nftables 劫持范围,通过路由环回技术引流回
tproxy_port端口。在哪里开:「配置」→「透明代理」卡片中,「接管本机流量」独立一行的开关。
开启前请务必确认本机有可靠的外网访问途径,例如:
- 已具备可用的 IPv6 出口;
- 已为 stun / EasyTier / frp / fnconnect 等穿透服务配置好目的绕过;
否则一旦劫持生效而本机又无法连出,将直接失联,需要从系统层面手动清理规则才能恢复。
由于本机流量一旦被错误劫持影响面较大,「接管本机流量」在启用 TProxy 期间不可修改,需要先关闭 TProxy 再调整该项。
接管 IPv6 流量 (Intercept IPv6)
- 默认状态:关闭。关闭时 TProxy 只接管 IPv4,IPv6 流量完全不受策略约束(既不算代理流量,也不受规则限制)。
- 在哪里开:点 TProxy 开关旁的齿轮按钮进入「TProxy 高级设置」弹窗,开关位于弹窗顶部(与下方的绕过列表同屏)。开关即时生效,与绕过列表的「保存」无关。启用 TProxy 期间齿轮按钮不可用——需先关闭 TProxy 再调整,避免重建正被规则持有的配置。
- 开启后:额外下发 IPv6 家族的整套规则——
ip6 fluxor_tproxy6表、ip -6 rule fwmark 1 → table 100策略路由、ip -6 route add local ::/0 dev lo table 100,以及 IPv6 侧的 DNS 重定向(redirect 到:1053,内核的 DNS 监听是双栈的)。 - 为什么默认关闭:多数订阅节点没有 IPv6 出口。IPv6 一旦被接管,原本可直连的 IPv6 目标(尤其是字面量 IPv6 地址)会改为经代理出站并可能直接连接失败。是否接管属于取舍,交由用户显式决定。
- 何时值得开启:局域网确实有原生 IPv6,且存在自带 DNS 解析的客户端(浏览器 DoH、Android 私有 DNS、路由器 RDNSS 下发的 ISP v6 DNS)。这类客户端拿到的 AAAA 是真实地址,其 IPv6 连接在只接管 IPv4 时会完全绕过内核——这正是本开关要堵住的口子。(走被劫持 DNS 的普通域名不受影响:fake-ip 模式下内核未配置
fake-ip-range6,AAAA 返回空答案,客户端会回落到 fake-ip IPv4。) - 开启前提:
- 本机需有可用的 IPv6 栈。若本机没有 IPv6(如
net.ipv6.conf.all.disable_ipv6=1),策略路由无法建成,面板会如实报错(启用失败并回滚开关),而不是显示"已启用"; - 内核 / nftables 需支持
ip6家族的 nat 链。若不支持,面板会跳过该家族的 DNS 重定向并记录日志,IPv6 透明代理主链路仍可用(此时建议让客户端使用 IPv4 DNS,或改用被劫持的 DNS)。
- 本机需有可用的 IPv6 栈。若本机没有 IPv6(如
- 与总开关的关系:订阅中心的「IPv6 支持」关闭时,本开关即使保持开启也不会下发 ip6 规则(面板会置灰并说明「订阅中心已关闭 IPv6 支持」)。偏好值不会被改写:重新开启订阅中心的 IPv6 支持后,下一次启用/重建 TProxy 会自动带上 IPv6。
- 持久化:
tproxy_ipv6与tproxy_proxy_local一样保存在tproxy.json(不是旧版的fluxor.json)。 - 清理:关闭 TProxy 或退出面板时,两个家族的规则都会被清理(不按开关裁剪),避免关掉开关后残留 IPv6 规则把流量导入黑洞。
与 TUN 模式的互斥强防呆
- 互斥原因:TUN 虚拟网卡是通过创建虚拟设备并修改系统默认网关来实现系统层流量捕获;而 TProxy 基于 nftables 规则与策略路由进行重定向。两者同时开启会导致系统路由表严重冲突,可能直接导致物理网卡断连甚至死锁。
- 防呆逻辑(前端先关对侧,后端兜底):
- 开启 TUN 会先关闭 TProxy(并通知后端真正下发关闭操作,而不只是改界面开关);后端在开启 TUN 时也会校验 TProxy 状态,未关则直接拒绝(HTTP 400)。
- 开启 TProxy 会先停用 TUN 虚拟网卡;后端在下发任何 TProxy 规则之前会实时查询内核的
tun.enable(GET /configs),TUN 仍在接管则拒绝并回滚开关——这条兜底同时覆盖「另一台设备/另一个标签页先开了 TUN」「经第三方客户端开启 TUN」以及「TUN 开着时修改 TProxy 端口触发规则重建」三种情况。
- 端口为 0 时:前台会拦截开启操作并弹出警告,因为端口为 0 意味着内核不会监听透明代理端口,规则装上也无处转发。
操作建议
- 先确保本机可正常上网,再开启透明代理。
- 开启 TProxy 前先确认端口非 0(默认 7898)。
- 若需要面板主机自身也走富强,先配好穿透服务的绕过规则,再开启「接管本机流量」。
- 只有当局域网确有 IPv6、且需要堵住"自带解析客户端走 IPv6 直连"的旁路时,才开启「接管 IPv6 流量」;开启前请先确认节点具备 IPv6 出口。
- 如果透明富强偶尔失效,可在「内核配置」页重启内核以重新下发 nftables 表,排除防火墙状态残留。
- 系统需支持 nftables,可用
nft --version确认。
