Linux使用Proxychains实现终端代理

Linux使用Proxychains实现终端代理

在Linux上搭建代理工具服务端实现代理,网上有大量的教程文章,相信很多人都有试过。但是将代理工具作为linux的客户端代理可能很多人都没太弄明白。恰好最近和朋友在交流时遇到了这个问题。

情况大致:有一台阿里/腾讯云国内的vps,或者自己内网的一台linux主机。想用代理工具作为linux客户端实现者代理加速下载资源的情况。
前提:本文适合已经搭建了代理工具服务端或有现成节点的小伙伴。

假设大家平时都是经常使用v2rayN作为windows上的代理客户端工具。

其他的客户端工具应该也有类似导出功能。

现在在vps上安装v2ray程序。现在安装v2ray和以前的一键脚本有所不同。补充一下在linux上v2ray的client和server是一体,只是根据不同配置执行而已。

github地址: https://github.com/v2fly/fhs-install-v2ray

直接执行下面的命令进行安装。

bash <(curl -L https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh)

这样就表示安装成功了,脚本是把v2ray添加到了环境变量了的。默认的v2ray配置文件是在 /usr/local/etc/v2ray/config.json 目录下。

所以我们把上面我们在V2rayN上面导出的客户端配置文件进行替换即可。

然后启动v2ray即可,因为是导出的客户端配置文件通常不会出现什么问题。

systemctl start v2ray
systemctl status v2ray

查看端口监听状态。

netstat -antup | grep 1080

说明linux上的v2ray客户端已经启动成功了。因为v2ray默认是代理的socks的流量。所以linux上其他的程序要想实现代理都要把流量转发到1080端口才行。当然有些程序是支持socks代理的比如curl。

但是这种方式也有局限,就是我每次代理都需要指定socks代理。这里有另外一种让终端走代理(不推荐)。

export http_proxy=”socks5://127.0.0.1:1080″
export https_proxy=”socks5://127.0.0.1:1080″

通过这种方式设置之后像curl这种支持socks代理的就会直接转发,但是也存在局限,以curl和wget对比。

可以看到这种方式curl是代理成功了的,但是wget却报错了不支持socks5。这很显然并没有达到我们的目的。而我们想要实现的不就是让linux上的大部分程序都走代理吗,不然也太鸡肋了。

所以让V2ray配合Proxychains就是非常棒的实现方式。就需要先安装Proxychains。

但很多国内的主机本身从github上下载的速度就巨慢,所以在使用Proxychains之前可以可以给git配置代理。

yum install -y git
git config –global http.proxy ‘socks5://127.0.0.1:1080’
git config –global https.proxy ‘socks5://127.0.0.1:1080’

先让git用上代理。

git clone https://github.com/rofl0r/proxychains-ng.git
cd proxychains-ng/
make && make install && make install-config

yum -y install proxychains-ng

现在已经能支持yum安装了

此时proxychains安装成功了,修改对应的配置文件。

vim /usr/local/etc/proxychains.conf

在文件的末尾添加上 socks5 127.0.0.1 1080 保存即可。

在我们想要代理的程序前面加上proxychains4即可实现代理,不管程序本身是否支持代理都可以代理转发。

另外我还写了一个简单的Python脚本验证了可用性。

经过一番测试发现proxychains对大部分程序都是可以正常代理的,但golang写的程序竟然不行,小伙伴可以自己试试。

proxychains的原理:

简单的说就是这个程序 Hook 了 sockets 相关的操作,让普通程序的 sockets 数据走 SOCKS/HTTP 代理。其核心就是利用了 LD_PRELOAD 这个环境变量(Mac 上是 DYLD_INSERT_LIBRARIES)。在 Unix 系统中,如果设置了 LD_PRELOAD 环境变量,那么在程序运行时,动态链接器会先加载该环境变量所指定的动态库。也就是说,这个动态库的加载优先于任何其它的库,包括 libc。ProxyChains 创建了一个叫 libproxychains4.so的动态库。里面重写了 connect、close 以及 sendto 等与 socket 相关的函数,通过这些函数发出的数据将会走代理,详细代码可以参考 libproxychains.c。

其实对于LD_PRELOAD预加载劫持的trick我在以前也简单研究过。

赞赏

微信赞赏支付宝赞赏

Zgao

愿有一日,安全圈的师傅们都能用上Zgao写的工具。

6条评论

Zgao 发布于2:26 下午 - 1月 10, 2021

会更新的。

匿名 发布于10:31 上午 - 1月 10, 2021

大佬求更新1.9版~么么哒

匿名 发布于1:42 下午 - 1月 9, 2021

PH插件V1.8失效了

    匿名 发布于3:10 下午 - 1月 9, 2021

    这也是我想说的

    匿名 发布于8:27 下午 - 1月 9, 2021

    可以手动的方式获取对应视频的 URL:
    在打开P站对应视频的网页后,点击差价,选择“复制”,然后将复制的URL粘贴到浏览器的地址栏里,回车访问该地址,然后浏览器里会显示出一些代码,其中就包括了视频的 URL,将videoUrl一项后面的信息复制到vim里面,将“\”删除掉,并且把https:后面修改为“//”,这样就得到了视频的真实URL,该URL可以在浏览器里直接访问到视频。
    视频的质量可以在后面的quality看到,请根据自己的实际情况选择合适分辨率的视频。

匿名 发布于7:46 下午 - 1月 8, 2021

clash不是也挺好用的吗?

回复 匿名 取消回复