众所周知,在大陆不能自由的访问互联网,为此人们想出了各种办法,真是八仙过海各显神通,然而,很多办法是既绕圈子,又没有普遍应用的意义,使用ssh tunnel实际上效率是很低的,使用GAE是朝不保夕的,使用VPN是时快时慢的,因为ssh不是为了这个目的而开发,GAE也不是,VPN就更不是为了高速访问而设置的了,今天我们要介绍的是具有普遍的意义的代理服务器squid和stunnel,力求让我们的穿越达到一个保持高速访问,但又经过了加密的境界。
其实这二者组合并不新鲜,也并不罕见,下面说说这个组合的 应用条件:
1,一台运行在自由世界的服务器,或者虚拟机,比如美帝或者香港。
2,这台服务器上安装了squid,或者可以安装squid。
3,当然,你必须要可以从中国大陆连接它。
首先我们来配置安装好的squid,很多旧的案例使用stunnel加密squid端口,然后在客户机上使用stunnel解密,这是多走了一个弯路,squid自身已经支持加密的代理方法,在服务器上,我们根本就不需要运行stunnel,例如我们要将这个加密的代理运行在服务器IP地址为216.218.186.2的443端口,具体配置参数如下:
https_port 216.218.186.2:443 cert=/etc/squid/hnair.com.crt key=/etc/squid/hnair.com.key
其中,hnair.com.crt和hnair.com.key是使用openssl生成用于加密的数字证书和密钥,关于自行生成数字证书的方法,可参考如下:
openssl req -new > hnair.com.csr
openssl rsa -in privkey.pem -out hnair.com.key
openssl x509 -in hnair.com.csr -out hnair.com.crt -req -signkey hnair.com.key -days 3650
然后启动squid即可。
接下来,我们需要对客户端进行配置,不管你是Windows还是Linux,都可以到这里下载:ftp://ftp.stunnel.org/stunnel/
将相应的stunnel压缩包解压缩或者安装,添加一个配置文件(stunnel.conf)至程序的目录:
client = yes
[ssl2http]
accept = 127.0.0.1:8080
connect = 216.218.186.2:443
注意,有些Linux发行版中,例如Ubuntu,在进行apt-get安装stunnel的时候,stunnel v3和v4都会安装上去,此时应该使用stunnel4来运行,直接运行 /usr/bin/stunnel4 即可,在Windows中不存在这个问题。
然后,我们将浏览器的代理服务器设置为本机的8080端口,也就是127.0.0.1:8080,即可使用一个加密的通道,自由的访问互联网了,实际上,这个方法被广泛应用在XX功的网站上,只不过他们用的是Apache做反向代理,因为上面还有他们的网站,虽然总是胡说八道来着,由于我们不需要在上面运行网站,所以squid代理服务器是最佳选择。
我很好奇为什么那么多人在卖ssh代理,却没有人卖加密的squid,在squid上添加用户身份验证,即可达到类似的效果,究其原因,其实还是有两个:
第一,ssh代理可以实现socks请求转发,有些应用可能需要。
第二,ssh代理本身效率不高,可以防止用户滥用,流量超荷,而加密的squid如果没有流量限制,那显然是一场悲剧。