详解Linux环境下各种代理设置

做技术的人都知道,有时候为了查询一些信息,必须访问一些国外资源,由于这些资源的服务器位于国外,速度较慢,有时候甚至是根本无法访问(你们懂的),这时候拥有一个VPN或者是代理就非常重要了,这也就是国内大部分人使用代理的主要目的,当然代理还有其它很多好处,比如隐藏自己的IP地址和来源。

首先,咱们常见代理有socks代理和http(s)代理之分,比如socks代理默认端口就是在1080。这2者有啥区别呢?http代理属于应用层代理,类似的还有ftp代理,socks代理与应用层代理不同,socks代理只是简单地传递数据包,而不必关心是何种应用协议(比如FTP、HTTP请求)。所以,socks代理比其他应用层代理要快得多,目前用的最多的就是socks5代理。

大部分的代理应用都会同时支持这2种形式,有人说既然socks代理快,那为什么还要用http代理,原因很简单,部分应用只支持应用层代理。。。

1.系统代理

虽然本文是讲述Linux环境下的,但是顺便也说一下Windows,在Windows上需要在ie浏览器的网络设置页面设置,但很多代理软件在开启之后会自动修改设置,一般来说不需要大家自己手动去修改代理设置。

Linux下的代理设置也在网络设置里面,但是不同的桌面环境下的UI界面可能不是太一样,比如我上图就是Ubuntu 16.04下的设置页面。

但是无论是Windows还是Linux,设置了系统代理也不一定就有用,为什么这么说呢?

因为很多应用不走系统代理设置,虽然你设置了系统的全局代理,但是很多应用都有自己的网络代理设置页面,也就是说你需要单独去设置。

在Linux桌面下,最典型的2个案例,一个是Chrome,Chrome默认是走的系统代理设置,但是FirFox浏览器则是有自己的网络代理设置页面。

实际上,大部分软件都不走系统代理设置,一般都有一个自己的单独设置方式,下面咱就说说Ubuntu桌面下常用软件的网络代理设置。

2.命令行终端

在Linux下,命令行默认是不走系统代理设置的,如果想走代理必须单独设置,最简单的方法是通过export导入环境变量,比如设置http代理可以通过下面这种方式设置:

1
2
export http_proxy=127.0.0.1:1081
export https_proxy=127.0.0.1:1081

如果是socks代理可以这样:

1
export socks_proxy=127.0.0.1:1080

如果嫌麻烦,可以使用all_proxy同时设置所有代理:

1
export ALL_PROXY=socks5://127.0.0.1:1080

需要提醒一点的是,使用export设置只在当前终端有效,如果你想保持这个设置,可以把命令写到/etc/profile或者~/.profile等环境设置脚本里面来实现永久效果。

设置完这些代理之后,一般常用命令,比如curl,wget是会走这个环境变量的,但是还有很多命令是不走的,特别是一些复杂的应用,它们也有自己的代理设置选项,举个例子,更新系统使用的apt命令,它就需要更改配置文件:

1
2
3
4
5
6
7
8
sudo vim /etc/apt/apt.conf

在里面加入下列配置

Acquire {
HTTP::proxy "http://127.0.0.1:1081";
HTTPS::proxy "https://127.0.0.1:1081";
}

还有命令,比如Git,也需要单独设置:

1
git config --global http.proxy 127.0.0.1:1081

类似这样的命令工具还有很多,它们默认情况下不会使用系统代理,但是也不走终端的环境变量,都有配置项或者配置文件去设置,所以必须自己手动设置,比较麻烦。

3.GUI应用

相对于命令行来说,大部分桌面GUI应用都会有自己的网络设置选项,使用起来也简单很多,这里就不多说了,举个例子,下面是qBittorrent软件的网络设置界面

4.终极手段

如果一个应用既不走系统代理,同时也不支持网络设置,那是足够奇葩了,对于这样的软件有什么好的方式呢?

这里我提供2个思路,第一个就是使用虚拟机,比如virtualbox,我们可以给虚拟机设置一个代理,这样的话虚拟机里面的软件也得走代理。另外就是不在电脑上面设置代理,我们可以在路由器上面设置代理,这样所有的经过这台路由器上网设备都会走代理。

现在很多路由器都是基于开源的openwrt系统,非常强大,本质上就是一个简版Linux,在上面可以干很多事情,比如说设置代理、拦截广告、网速加速。

5.全局模式或PAC模式

很多人可能对这个PAC模式不了解,这里简单说一下,所谓PAC模式就是可以智能分流,通过你访问的网址判断是否走代理,为什么要这么做呢?

通常我们使用代理是因为有部分网站速度比较慢或者访问不了,全局模式下所有的请求都会走代理中转。举个例子:你要去一个超市买东西,但超市你去不了,所以你找个人帮你去超市买,这中间就多走了一道中转程序,肯定比较慢,但是有个超市你明明可以去,你也让人帮你去买,那就耽误事了。

所以全局模式不一定适合你,很多代理收费是按流量计算的,其实你访问一些国内网站速度已经很快了,不需要走代理的,就是浪费流量,浪费钱啊,另外假如这个代理网速慢的话,还会影响你访问速度。

怎么解决这个问题呢?聪明的你会想到那我就手动开关代理,如果访问一个网站速度慢我就开启代理,当我访问国内网站的时候我就关闭代理,这种策略的思想其实就是PAC模式,咱也不用那么麻烦了。

PAC模式原理是其实有一个域名名单列表,上面维护了一些(和谐)域名,当你访问这些域名的时候,它就会走代理,对于不在这些列表范围外的域名则会直接访问。现在很多代理软件都会提供这2种模式,你可以随意切换,一般推荐使用PAC模式,如果使用PAC模式无法访问某些网站,可以尝试切换到全局模式,因为某些域名可能不在这个列表范围内。

对于Chrome浏览器,可以安装一些插件来实现这种效果,比如SwitchyOmega:

最后说一下,如果你只有socks代理,也可以通过一些软件转为http代理,具体详情可以查看我之前写的一篇文章:科学上网之socks代理转http(s)