Ubuntu虚拟机/wsl2利用proxychains实现代理
proxychains is a UNIX program, that hooks network-related libc functions in dynamically linked programs via a preloaded DLL and redirects the connections through SOCKS4a/5 or HTTP proxies.
VMware虚拟机如何安装/配置proxychains
条件
- 物理机能够科学shang网(我使用的是clash)
- 设置代理软件,使其允许来自局域网的连接(clash -> General -> Allow Lan)
安装proxychains
# 如果没有指明版本则默认安装proxychains3
sudo apt install proxychains
修改配置文件
默认的配置文件为/etc/proxychains.conf
proxychains有三种代理模式,默认为strict_chian模式
- dynamic_chain - 依次经过ProxyList中定义的所有节点,死节点会被忽略,且至少有一个活节点才能工作
- strict_chain - 依次经过ProxyList中定义的所有节点,所有节点都必须是活节点
- random_chain - 从ProxyList随机选择一个节点或多个节点(数量由chain_len定义)
将代理协议、物理机ip、clash的端口写入ProxyList

使用proxychains
# 以curl为例
proxychains curl google.com
解决libproxychains.so.3无法预加载的问题
-
找到libproxychains.so.3的路径
find /usr/ -name libproxychains.so.3 -print -
将该路径写入/usr/bin/proxychains文件
export LD_PRELOAD=/usr/lib/libproxychains.so.3
wsl2配置proxychains
wsl2通过虚拟网卡与windows主机通信,而且每次重启windows之后虚拟网卡的ip会发生改变。每次重启之后都需要重新配置proxychains,比较麻烦。这篇博客提供了一种自动配置proxychains的方法。
动态获取windows的ip
ip route命令可以查看linux系统的路由表。因为wsl2的流量是经过windows的,所以默认路由所指的ip即为windows的ip。
提取windows的ip
ip route | grep default | awk '{print $3}'
安装proxychains4
普通用户没有写默认配置文件的权限(只有root可写),所以需要另辟蹊径。proxychains4可以指定任意文件作为配置文件,我们可以创建一个普通用户权限的文件作为配置文件,然后再利用脚本自动更新该配置文件。
安装proxychains4
sudo apt install proxychains4
生成用户配置文件
将默认配置文件复制到用户的根目录
sudo /etc/proxychains4.conf ~/.proxychains.conf
sudo chown username ~/.proxychains.conf
修改.proxychains.conf文件
按照前面介绍的方法,配置好.proxychains.conf
配置~/.bashrc文件
在~/.bashrc末尾添加如下代码
# 获取windows的ip
export win_ip=`ip route | grep default | awk '{print $3}'`
export clash_port='23785'
# 删除包含clash_port的行
sed -i '/'${clash_port}'/d' ~/.proxychains.conf
# 重新写入
sed -i '$a socks5 '${win_ip}' '${clash_port} ~/.proxychains.conf
# 设置proxychains的别名,并使用指定配置文件
alias pc='proxychains -q -f ~/.proxychains.conf'
之后重启终端即可,或者使用命令source ~/.bashrc使配置立即生效
测试
pc curl www.google.com

浙公网安备 33010602011771号