部分网友问过Linux终端怎么使用Shadowsocks、ShadowsocksR、v2ray和trojan配置好的代理,迟迟没写教程是觉得都用Linux了,这不是很简单的东西吗?鉴于部分网友还是没搞懂原理,本节介绍Linux终端设置代理的方法。
代理和VPN
代理和VPN其实不是一个东西,一般来说有如下区别:
- 代理是应用层面的,VPN是系统层面/全局的;
- 连接代理数据不一定要加密,连接VPN是一定要加密的。
国内都用来科学上网,从这方面看可以认为代理和VPN是同一个玩意
代理和VPN的区别其实在电脑和手机端已经体现出来了:电脑端是代理软件,安装SS/SSR/V2ray/trojan电脑客户端,只有浏览器能上外网,其他软件(例如Telegram),需要特殊设置或者其他软件辅助才能上外网;手机客户端是VPN软件,连接后会显示VPN图标,因此手机上的浏览器、Youtube、Instgram、Twitter无需单独设置,都可以直接上外网。
某些机场提供的客户端是VPN软件,连接后电脑上的软件也可以直接上外网
理解了代理和VPN的区别,你就能知道为啥科学上网不推荐用Wireguard,因为那是VPN!Wireguard翻墙效果不如V2ray、Trojan,封杀起来也更容易。
Linux终端设置代理
本节介绍Linux终端设置代理的两种方式,推荐使用proxychains
方案。
环境变量方案
Windows/Mac系统浏览器能上外网的秘密是客户端默认设置了http、https、socks5代理(或者PAC自动代理),对应到Linux终端/命令行则是两个重要的环境变量:http_proxy、https_proxy(GNOME环境会设置all_proxy环境变量)。
SS/SSR/V2ray等客户端,默认会监听一个socks5端口,例如1080,因此让Linux终端命令走代理的方法便是设置这两个环境变量:
export http_proxy="socks5://127.0.0.1:1080"
export https_proxy="socks5://127.0.0.1:1080"
设置好这两个环境变量后,许多软件,例如curl
、wget
,默认会读取变量的值,发现设置了就走代理,因此可以访问外网。
但并不是所有软件都遵循约定,例如git
就不认这两个环境变量。git
有自己的一套,需要单独设置:
git config --global http.proxy 'socks5://127.0.0.1:1080'
git config --global https.proxy 'socks5://127.0.0.1:1080'
如果不想软件走代理,unset这两个环境变量就可以了:
unset http_proxy
unset https_proxy
环境变量方式比较简单,但缺点也很明显:
- 环境变量设置是全局的(当前会话),设置后
wget
等命令都会走代理,不想经过代理只能先unset再运行,比较麻烦; - 不少软件不认这两个环境变量,设置了也不起作用。
proxychains方案
本节以Ubuntu系统介绍使用proxychains
克服环境变量方案的两个缺点,实现按需、所有软件都能走代理。
首先安装proxychains
:sudo apt install -y proxychains
。
然后编辑 /etc/proxychains.conf
文件,在最后的[ProxyList]一节中增加代理设置,例如:
socks5 127.0.0.1 1080
接下来,所有希望走代理的命令,前面增加proxychains
即可,例如:
# git克隆 proxychains git clone https://github.com/hijkpw/scripts # composer更新 proxychains composer update -vv
需要连外网的命令比较少,并且可以让所有软件都走代理,因此proxychains
是推荐方式。
参考
1. proxychains