透明代理技术总结–Linux
1. iptables REDIRECT/TPROXY
在linux网络堆栈上实现透明代理,功能上最强大,最完美。具体可以有以下三种方式:
- global, 即全局透明代理
- network namespace,在网络命名空间中透明代理,主机网络相当于中间路由器,具体实现参考
~/Scripts/ns-proxy.sh
- net_cls, only in cgroup v1,对特定cgroup进行透明代理, 参考 example
- iptables cgroup2 path match
监听REDIRECT/TPROXY端口的技术实现:
未来会出现基于bpf技术,以最小的footprint,实现透明代理
linux内核的bpf技术正在快速发展
2. proxychains-ng
原理是利用LD_PRELOAD
,挂钩(hook)网络相关的libc函数,因此只对动态链接的程序有用,例如不支持go程序(静态编译),不支持脚本等。只支持tcp。
配置和使用相当的简单。
3. cgproxy
基于cgroup2和TPROXY的透明代理,支持cgroup级别、进程级别的控制。
支持tcp和udp。
可以代理任何程序,可全局代理、网关代理。
4. graftcp
可以通过ptrace跟踪或修改任何给定程序的网络连接,因此它可用于任何程序。
只支持tcp,暂不支持ipv6,issue
some tests
see Dokodemo-door and v2ray tproxy config,
note v2ray redirect
only work in ipv4
experiments result following:
- v2ray tproxy + no root
- tcp REDIRECT ✓
- tcp TPROXY ✗
- udp TPROXY ✗
- v2ray redirect + no root
- tcp REDIRECT ✓
- tcp TPROXY ✗
- udp TPROXY ✗
- v2ray tproxy + root ✓
- v2ray redirect + root ✓
结论:
- REDIRECT总是可用, 而TPROXY需要root才能使用
- 在not root下只能代理透明代理tcp
一些代理软件
- gost
- clash
- v2ray
- trojan