好在 Windows 上实现全局代理或者分应用代理还有一个常用的方案——Proxifier,我可以通过 Proxifier 把绝大部分应用的流量转发到 Clash 上面去,Windows 给 UWP 应用做的应用隔离则可以使用 Fiddler 的 WinConfig 工具解除掉。
但关键是 WSL。之前使用 SSTap 直接接管 Windows 除了 Windows 系统进程以外的网络层,当然也包括 WSL。Proxifier 并不能实现对 WSL 启用代理了,所以用 Proxifier 就得解决 WSL 也走代理的方法。
在 Google 上找遍了「Linux 全局代理」,相对最完美的方法是使用 Proxychains,但每个指令前面都要带个 proxychains 真的太不方便了;使用 iptables 的透明代理方案在 WSL 上面也并不适用(WSL 和 Windows 两者是相互依赖的、我不想在 Ubuntu 上设置 iptables 结果把宿主 Windows 炸掉)。 既然没有,那就干脆不要了!直接在终端配置 proxy,反正目前在 WSL 上使用的应用和环境并不多。
给终端设置代理超简单的,直接一句命令搞定:
export ALL_PROXY="socks5://127.0.0.1:1080" 这样, curl/wget 是都走代理了,但是 git /npm /yarn 这些不知为何不跟随终端的环境变量设置。一种解决方案是分别设置:
git config --global http.proxy socks5://127.0.0.1:1080
git config --global https.proxy socks5://127.0.0.1:1080
npm config set proxy "http://127.0.0.1090"
npm config set https-proxy "http://127.0.0.1090"
yarn config set proxy "http://127.0.0.1090"
yarn config set https-proxy "http://127.0.0.1090"
但是,发现了一个奇怪的解决方法,就是除了设置 ALL_RPOXY 以外,再添加一个 all_proxy : export all_proxy="socks5://127.0.0.1:1080"
这样不仅 git /npm /yarn 这些读取环境变量不支持大小写的辣鸡,其它绝大部分终端应用程序不走代理的问题就都解决了~ 不过包管理器 APT 就更麻烦了。
如果需要设置 APT 走代理,需要修改 /etc/apt/apt.conf:
echo -e "Acquire::http::Proxy \"http://127.0.0.1:1090\";" | sudo tee -a /etc/apt/apt.conf > /dev/null
echo -e "Acquire::https::Proxy \"http://127.0.0.1:1090\";" | sudo tee -a /etc/apt/apt.conf > /dev/null
敲了好一会键盘以后,想起了一个问题——如果要解除代理应该怎么办。。。 于是在 .zshrc 里面把解除代理和启用代理写成了两个 function:proxy() 和 noproxy(),每次只要执行 proxy 就可以启用代理、执行 noproxy 解除代理,近似实现「一键操作」。而且,还可以在 function 中加上 curl ip.gs 来测试当前 IP。
Talk is cheap, here are the codes:
proxy () {
export ALL_PROXY="socks5://127.0.0.1:1080"
export all_proxy="socks5://127.0.0.1:1080"
echo -e "Acquire::http::Proxy \"http://127.0.0.1:1090\";" | sudo tee -a /etc/apt/apt.conf > /dev/null
echo -e "Acquire::https::Proxy \"http://127.0.0.1:1090\";" | sudo tee -a /etc/apt/apt.conf > /dev/null curl https://ip.gs
}
noproxy () {
unset ALL_PROXY
unset all_proxy
sudo sed -i -e '/Acquire::http::Proxy/d' /etc/apt/apt.conf
sudo sed -i -e '/Acquire::https::Proxy/d' /etc/apt/apt.conf
curl https://ip.gs
}
稍加修改也可以写进 .bashrc 之中. 最终的版本用 read 实现了读取输入来获取代理地址、而不是直接使用预置 127.0.0.1:1080 的方案.
但关键是 WSL。之前使用 SSTap 直接接管 Windows 除了 Windows 系统进程以外的网络层,当然也包括 WSL。Proxifier 并不能实现对 WSL 启用代理了,所以用 Proxifier 就得解决 WSL 也走代理的方法。
在 Google 上找遍了「Linux 全局代理」,相对最完美的方法是使用 Proxychains,但每个指令前面都要带个 proxychains 真的太不方便了;使用 iptables 的透明代理方案在 WSL 上面也并不适用(WSL 和 Windows 两者是相互依赖的、我不想在 Ubuntu 上设置 iptables 结果把宿主 Windows 炸掉)。 既然没有,那就干脆不要了!直接在终端配置 proxy,反正目前在 WSL 上使用的应用和环境并不多。
给终端设置代理超简单的,直接一句命令搞定:
export ALL_PROXY="socks5://127.0.0.1:1080" 这样, curl/wget 是都走代理了,但是 git /npm /yarn 这些不知为何不跟随终端的环境变量设置。一种解决方案是分别设置:
git config --global http.proxy socks5://127.0.0.1:1080
git config --global https.proxy socks5://127.0.0.1:1080
npm config set proxy "http://127.0.0.1090"
npm config set https-proxy "http://127.0.0.1090"
yarn config set proxy "http://127.0.0.1090"
yarn config set https-proxy "http://127.0.0.1090"
但是,发现了一个奇怪的解决方法,就是除了设置 ALL_RPOXY 以外,再添加一个 all_proxy : export all_proxy="socks5://127.0.0.1:1080"
这样不仅 git /npm /yarn 这些读取环境变量不支持大小写的辣鸡,其它绝大部分终端应用程序不走代理的问题就都解决了~ 不过包管理器 APT 就更麻烦了。
如果需要设置 APT 走代理,需要修改 /etc/apt/apt.conf:
echo -e "Acquire::http::Proxy \"http://127.0.0.1:1090\";" | sudo tee -a /etc/apt/apt.conf > /dev/null
echo -e "Acquire::https::Proxy \"http://127.0.0.1:1090\";" | sudo tee -a /etc/apt/apt.conf > /dev/null
敲了好一会键盘以后,想起了一个问题——如果要解除代理应该怎么办。。。 于是在 .zshrc 里面把解除代理和启用代理写成了两个 function:proxy() 和 noproxy(),每次只要执行 proxy 就可以启用代理、执行 noproxy 解除代理,近似实现「一键操作」。而且,还可以在 function 中加上 curl ip.gs 来测试当前 IP。
Talk is cheap, here are the codes:
proxy () {
export ALL_PROXY="socks5://127.0.0.1:1080"
export all_proxy="socks5://127.0.0.1:1080"
echo -e "Acquire::http::Proxy \"http://127.0.0.1:1090\";" | sudo tee -a /etc/apt/apt.conf > /dev/null
echo -e "Acquire::https::Proxy \"http://127.0.0.1:1090\";" | sudo tee -a /etc/apt/apt.conf > /dev/null curl https://ip.gs
}
noproxy () {
unset ALL_PROXY
unset all_proxy
sudo sed -i -e '/Acquire::http::Proxy/d' /etc/apt/apt.conf
sudo sed -i -e '/Acquire::https::Proxy/d' /etc/apt/apt.conf
curl https://ip.gs
}
稍加修改也可以写进 .bashrc 之中. 最终的版本用 read 实现了读取输入来获取代理地址、而不是直接使用预置 127.0.0.1:1080 的方案.
--------------------------------------------
linux - proxy统一解决大法
1. 启动你的本机 socks5 服务器
2. vim ~/.bashrc
export HTTP_PROXY="socks5h://127.0.0.1:1093"
export HTTPS_PROXY="socks5h://127.0.0.1:1093"
export FTP_PROXY="socks5h://127.0.0.1:1093"
export ALL_PROXY="socks5h://127.0.0.1:1093"
export http_proxy="socks5h://127.0.0.1:1093"
export https_proxy="socks5h://127.0.0.1:1093"
export ftp_proxy="socks5h://127.0.0.1:1093"
export all_proxy="socks5h://127.0.0.1:1093"
3. 保存,重新 打开terminal
4. 验证.
$ curl google.com
1. 启动你的本机 socks5 服务器
2. vim ~/.bashrc
export HTTP_PROXY="socks5h://127.0.0.1:1093"
export HTTPS_PROXY="socks5h://127.0.0.1:1093"
export FTP_PROXY="socks5h://127.0.0.1:1093"
export ALL_PROXY="socks5h://127.0.0.1:1093"
export http_proxy="socks5h://127.0.0.1:1093"
export https_proxy="socks5h://127.0.0.1:1093"
export ftp_proxy="socks5h://127.0.0.1:1093"
export all_proxy="socks5h://127.0.0.1:1093"
3. 保存,重新 打开terminal
4. 验证.
$ curl google.com