我们用电脑、平板、手机等访问互联网时,本地设备和服务器之间的通信有可能因为某些不可控因素被切断。这种情况下,我们可以采用“曲线”的方式,让一个第三方的服务器来做接力,从而连接目标服务器。 代理服务器可以绕过许多基于IP地址的限制。例如某视频网站只允许日本的IP访问,那么可以借助一台在日本的代理服务器,来让视频网站误以为访问者是一台身在日本的电脑。
我将使用亚马逊的云服务(AWS)来建立代理服务器。首先需要有AWS的EC2实例。登录AWS网站,按照指导创建即可。可参考亚马逊云架设WordPress博客。选择节点时,最好用距离中国较近的节点,如东京。实例建立后,保存好登录验证用的.pem文件,并记录下IP地址。下面以199.199.199.199的IP地址为例。
建立代理服务器
我选择的代理服务器软件是Squid。登录EC2实例,在命令行下安装Squid:
sudo apt-get install squid3
编辑/etc/squid3/squid.conf文件。这个配置文件说明了Squid的运行方式。squid.conf的设置很灵活,下面是一个最基本的设置:
# 控制列表,定义all
acl all src all
# 允许all访问
http_access allow all
# squid监听的目标端口
http_port 2046
重启Squid服务器,以便加载新的配置:
sudo service squid3 restart
现在,你已经有了私人的代理服务器,可以更改本地电脑的网络设置,以便使用代理服务器。在Mac OSX上,在System Preferences->Network->Advanced->Proxies中填上代理服务器的IP地址和端口,就可以开始使用代理服务器了:
199.199.199.199为代理服务器的IP。2046是我们在conf文件中设置的代理端口。在Windows和其他Linux系统中,也可以在系统中设置网络,从而在全局使用代理服务器。也可以在浏览器的设置中启动,只是局部的在浏览器内使用代理服务器。
使用SSH隧道连接代理服务器
上面的通信中,Squid代理服务器只起到了接力的作用。但客户端与Squid服务器的通信依然是明文,所以通信安全无法保障。为了进一步加强通信的私密性,可以使用SSH隧道(SSH Tunnel),在本地电脑和代理服务器之间建立秘密通道。
建立隧道
在Unix电脑上,可以在命令行直接使用ssh:
ssh -i Tokyo-VPN.pem -N -L2046:localhost:2046 ubuntu@199.199.199.199
上面的命令中,Tokyo-VPN.pem是创建EC2实例时的PEM文件。通过这个命令,本地的2046端口和代理服务器的2046端口将建立SSH隧道。两者之间的信息将加密传输,而不用担心外部监听和干扰。
还要更改本地代理设置,启用SSH隧道:
需要更改的地方很简单,把之前的代理服务器地址199.199.199.199改为127.0.0.1。
访问测试: