TProxy

TProxy(Transparent Proxy,透明代理)是Linux内核中的一个模块,用于透明地代理TCPUDP流量。透明代理的主要特点是,客户端并不知道其流量正在通过代理服务器,这使得它在某些应用场景中非常有用,如负载均衡、安全监控和网络优化。以下是对TProxy的详细介绍:

TProxy 的特点

  • 透明性:客户端无需进行任何配置或意识到代理的存在,代理服务器可以截获并处理流量。
  • TCP/UDP支持:TProxy同时支持TCPUDP流量,可以代理各种类型的网络通信。
  • 灵活性:与iptables结合使用,可以灵活地定义流量重定向和处理规则。
  • 无中断:由于TProxy在网络层工作,流量的代理过程对客户端是无缝的,不会中断通信。

工作原理

TProxy工作在Linux内核的网络层,通过修改IP包的目的地址,将流量透明地重定向到代理服务器进行处理。具体步骤如下:

  • 捕获流量:使用iptables将流量捕获并重定向到TProxy模块。
  • 代理处理:TProxy接收到重定向的流量,对其进行处理后转发到目标服务器。
  • 返回响应:目标服务器的响应流量通过TProxy返回给客户端,客户端认为其直接与目标服务器通信。

配置步骤

以下是配置TProxy以透明代理TCP和UDP流量的示例步骤:

前提条件

  • 安装并配置好Linux操作系统。
  • 确保内核版本支持TProxy(Linux内核2.6.28及以上)。
  • 安装iptables和iproute2工具。

内核模块加载

modprobe xt_TPROXY

配置iptables

  • 创建mangle表规则: 捕获并重定向流量到本地的代理端口。

bash iptables -t mangle -N DIVERT iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT iptables -t mangle -A PREROUTING -p udp -m socket -j DIVERT iptables -t mangle -A DIVERT -j MARK --set-mark 1 iptables -t mangle -A DIVERT -j ACCEPT

  • 添加PREROUTING规则: 将流量重定向到TProxy。

bash iptables -t mangle -A PREROUTING -p tcp -j TPROXY --tproxy-mark 0x1/0x1 --on-port 12345 iptables -t mangle -A PREROUTING -p udp -j TPROXY --tproxy-mark 0x1/0x1 --on-port 12345

配置ip rule和ip route

  • 设置ip rule: 为标记流量设置路由规则。

bash ip rule add fwmark 1 lookup 100

  • 设置路由表: 配置路由表100,将流量重定向到本地。

bash ip route add local 0.0.0.0/0 dev lo table 100

示例:使用TProxy代理HTTP流量

假设你有一个运行在本地12345端口的HTTP代理服务器,可以使用以下配置来透明代理HTTP流量:

配置iptables

iptables -t mangle -A PREROUTING -p tcp --dport 80 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 12345
iptables -t mangle -A PREROUTING -p tcp --dport 443 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 12345

应用场景

  • 负载均衡:TProxy可以将流量透明地分发到多个服务器,实现负载均衡。
  • 安全监控:透明代理可以监控和过滤网络流量,检测和阻止恶意行为。
  • 网络优化:通过代理服务器缓存和优化流量,提升网络性能。
  • 访问控制:基于流量特征进行访问控制和权限管理。

优缺点

优点

  • 对客户端透明,无需修改客户端配置。
  • 支持TCP和UDP流量,适用范围广。
  • 与iptables结合,规则配置灵活。

缺点

  • 需要较高的网络配置和维护技巧。
  • 增加了代理服务器的负载,对硬件要求较高。

总结

TProxy是一种强大的透明代理工具,适用于需要透明代理和处理网络流量的各种场景。通过与iptables和iproute2结合使用,TProxy可以灵活地捕获和重定向TCP和UDP流量,实现负载均衡、安全监控和网络优化等功能。尽管配置复杂,但其强大的功能和灵活性使其成为网络管理员和开发者的重要工具。

TProxy 与 TUN 模式的区别

两者都能接管全部流量,但实现层次不同:

对比项 TProxy TUN 模式
实现位置 内核 netfilter + 策略路由 虚拟网卡
平台 主要 Linux 跨平台(含 Windows)
配置方式 iptables / nftables + ip rule 客户端开关,自动建网卡
目标场景 网关、旁路由 单台设备
上手难度

在 Windows 上使用 Clash for Windows 时,用的是 TUN 模式;TProxy 更多出现在 Linux 软路由场景,用来给整屋设备做透明代理。

Windows 上怎么实现类似效果

如果希望局域网内其他设备也走同一套策略,典型做法是:

  1. 在 Windows 客户端开启 TUN 模式并允许局域网连接
  2. 其他设备把网关指向这台 Windows 主机
  3. 客户端内配置好分流规则,由它统一调度

这样无需在每台设备上安装客户端,也不需要 TProxy 那套内核配置。

实践中常见的坑

  • UDP 规则容易漏 —— 只配了 TCP 的重定向,UDP 仍然直连,表现为网页正常但游戏不通
  • 回环流量处理不当 —— 本机发出的流量若也走透明代理,容易形成环路
  • DNS 未一并接管 —— 域名解析仍走本地,会绕过代理并可能受污染,需要配合 Fake-IP 或 DNS 重定向

是否值得用

  • 单台设备 —— 直接用客户端的 TUN 模式,成本最低
  • 整屋/整网 —— Linux 软路由上配 TProxy 更合适,但要有 iptables 与策略路由的基础
  • 只是想让某个软件走代理 —— 不必上透明代理,单独指定代理或用规则分流即可

配置相关问题可参考常见问题