使用 cproxy 对程序进行透明代理

使用 cproxy 对程序进行透明代理

在 Windows 下,说到 透明代理 ,你可能会想到 Proxifier , SSTap, Mellow
但在 Linux 下,你可能会想到 proxychains 然后再想到 proxychains 不能代理 static-linked 的程序。

为什么 ProxyChains(NG) 不能代理静态连接的程序

ProxyChains NG 通过一个预加载的共享库来hook到网络相关的函数(比如: connect,getaddrinfo)上,接着他就可以转发这些流量。
缺点似乎显而易见,如果只是通过 LD_PRELOAD 来进行透明代理,那么这招对于静态连接的程序是无用的(比如说 Go 程序..)
其次,ProxyChains 只支持 TCP,这可能导致无法转发 DNS 流量 -> DNS 流量泄漏。

cproxy 是什么

cproxy 也是透明代理,作用和 proxychains 类似。
原理上与 proxychains 不同,它使用 cgroup 进行对程序的代理 ,不过配置起来还有点麻烦
本文将会教您在您的Linux PC上使用 cproxy,截至本文发布之前,cproxy似乎只支持 Linux。

下载 cproxy

官方推荐的方法是: 直接用 cargo

1
cargo install cproxy

如果没有 cargo 可以在 Release 上下载压缩包。
解压压缩包,可能会发现有两个可执行文件,不过似乎只留一个就好了。

安装 cproxy

先来试一试 cproxy!

1
cproxy --port <本地代理端口> -- curl ip.sb

( `д′) 失败了
如果你和我一样,在port上写了 socks5 的代理端口,那么你就被坑了。
笔者填入 geph 的 HTTP 代理端口时是可以成功的,但是使用 v2ray 的s5/http端口都无法使用。
这是因为 cproxy 需要修改 v2ray 的配置进行兼容,如果你不想去改配置

在确保可以使用 cproxy 后,我们来配置 alias
将以下内容写到 ~/.bashrc,记得自己修改一些部分。

alias "px"="/path/to/cproxy --port <your-local-proxy-port> --"

例如我的配置:

alias "px"="/bin/cproxy --port 60080 --use-tproxy -- " # 60080 是ipt2socks的默认监听端口。

保存后,使用 source ~/.bashrc 载入,试试 px curl ip.sb,看看是否成功。

缺陷

每次使用都要 sudo ,还是挺烦人的吧…
对于这种情况,也可以考虑使用有后台常驻的 cgproxy,但本文不做介绍,有兴趣可以自己了解。

作者

iceBear67

发布于

2021-03-13

更新于

2022-12-20

许可协议

评论