前言
proxychains 是一款 UNIX/LINUX 程序,可通过安全隧道重定向应用程序的TCP连接到指定的代理服务器上。Proxychains支持的协议有 SOCKS4、SOCKS5、HTTP 和 HTTPS。与一般的同类工具相比,ProxyChains 的特点是只会将当前应用的 TCP 连接转发至代理,而非直接全局实现代理。其实我们更多的时候只是需要部分应用走代理,所以ProxyChains更符合我们一般的使用场景。
部署与基本配置
所有 Linux 发行版均可安装。要安装,请在 Linux 终端键入或复制以下命令:
sudo apt-get install proxychains
在使用proxychains命令之前,需要先编辑配置文件,指定代理地址和端口:
vim /etc/proxychains.conf
直接在末尾添加代理服务器即可,例如添加http代理,地址是192.168.1.1,端口是12345:
http 192.168.1.1 12345
如下图:
这里有个使用技巧,就是配合虚拟组网使用。如果在云服务器上安装了虚拟组网软件(例如tailscale),那么云服务器可以直接使用虚拟组网地址访问家里同样安装了虚拟组网的设备(而如果家里这台设备恰好有科学的能力,又恰好家里这台有科学能力的设备又刚好提供了proxy功能的话?),所以在配置文件里直接指定家里设备的虚拟组网地址和对应端口就行,当然公网地址做映射也行,但是没有直接使用虚拟组网地址安全,未来的日子里,安全第一啊。
ProxyChains 的使用非常简单:直接在应用之前添加上proxychains :
proxychains docker pull xxxx
这种方式来解决云服务器拉不动docker镜像问题的效果是立竿见影的。
大家可以使用curl cip.cc
和proxychains curl cip.cc
两个命令执行比较差异:
这是正常访问,可以看到直接返回的地址是我云服务器的地址:
而使用了proxychains以后,最终返回的是我家里的宽带地址:
这是因为请求已经通过tailscale地址被转发到了我家里的代理,然后代理从家里出去自然是宽带的地址了。
至于其他应用场景,大家自行发挥想象即可。
proxychains进阶技巧:代理链
proxychains支持3种代理链:严格链(strict_chain) 、动态链(dynamic_chain)、和 随机链(random_chain ):
注:以上3种代理链方式只能3选一,使用其中一个只需要去掉#注释并将其余2个用#注释掉即可。
1、严格链
按照配置文件中添加的代理服务器的先后顺序组成一条链,用户请求必须严格按照先后顺序经过所有代理服务器,这种方式要求所有的代理服务器都是可用的,这也是proxychains的默认工作方式。如果在文章前面的配置文件proxychains.conf
末尾添加了不止一个代理服务器,那么严格链方式就会生效,这个时候如果有一台代理服务器不可用,则proxychains就无法正常工作。
2、动态链
和严格链一样的是,动态链也是按照配置文件中添加的代理服务器的先后顺序组成一条链,不过区别在于,如果其中有代理服务器不可用,动态链会自动将其排除,所以只要保证至少一台代理服务器是可用的,动态链就可以正常工作。
如果要使用代理链,动态链是推荐的方式。
3、随机链
从名字即可看出,随机链就是以随机方式选择配置文件中添加的代理服务器,这种方式适合网络扫描。chain_len
参数只在随机链方式生效,可以定义随机链的长度,默认为2。
注:详细代理链的概念和构建请参见我另一篇文章:家庭数据中心系列 使用gost搭建自己的代理服务器及转发代理链。
后话
其实,这篇是以前写过的老文章,只不过写得比较粗,而重新写这篇文章,是因为我准备写关于gost和Proxifier的文章,而这3个软件其实是相辅相成的,可以称之为代理3剑客,所以干脆回过头来重构以前写的这篇文章,与另外两篇文章遥相呼应,也算水了一篇文章。
另外,proxychains是终端下的工具,相似的桌面版下的工具就是Proxifier,其使用参见文章:家庭数据中心系列 使用proxifier让不支持而又需要使用代理的应用走代理。