Total Pageviews

Friday 22 April 2016

用Squid + Tor 构建小型技术型公司开放网络


    最近不知道为何越来越多朋友或同事问起关于翻墙的事,我不厌其烦的教他们如何用一些常用的软件解决问题,其实仔细想想,对于小型技术公司而言,需要翻墙上的网站还是很多的,比如blogspot,含有若干极有价值的技术博客,搞技术的都知道,中文网站搜索结果千篇一律,全是互相转载,真正有价值文章几乎没有。于是就诞生了一个借助tor为小型公司统一搭建一个开放技术网络的设想,这样也许可以保证队伍在技术方面的先进性。为什么我说小型公司呢,一方面我本人就是待在小型公司,二是大公司特别是外企通常自己有VPN因此就不存在翻墙的问题了。(在这里声明一下,最终的翻墙之道是VPN或Tunnel技术,但是需要$,免费的东西,大家对速度要求就不要太高了。)
    Squid 软件大家都很熟悉了,是用的最为广泛的开源的代理软件,很多大型的web网站也会用squid做反向代理加速网站。用于公司内部上网代理的时候一方面可以通过缓存加速网站访问,另一方面也可以过滤一些上班不能访问的网站,例如国内的SNS网站。这里我就不赘述了,我先在这里假设你已经搭建好了一个能够允许内部通过squid代理上网的环境。
    Tor软件最近也升级到2.1.22了,并提供了linux下的RPM安装包,使用起来非常方便。参看官方的安装资料很轻易的就可以安装好tor。Tor本身只支持SOCKS代理,安装好tor后还需要安装一个Polipo软件做HTTP Proxy.这些在tor的官网上都有。安装好后,确保能通过本地的8118端口上网。Tor本身因为被国家级防火墙屏蔽,这里需要在/etc/tor/torrc中加入如下几行才能正常连接:

#访问 https://bridges.torproject.org 获取bridge IPBridge 8.98.151.48:80        
Bridge 81.59.250.53:43
Bridge 108.125.18.153:91
UpdateBridgesFromAuthority 1
UseBridges 1
    Tor+Squid同时使用简直就是绝配,squid负责代理内网请求和缓存,tor负责绕墙获取被屏蔽的技术资料。tor本身来说是比较慢的,但是因为有了squid做缓存,效果就变得非常好了。构建这样的网络必须具备如下特点,即只通过tor访问被屏蔽的网站,不被屏蔽的网站则直接连接,这样就兼备了未被屏蔽网站的正常上网速度和开放性。感谢squid软件的强大,我们能通过一些巧妙的设定轻易完成这样的设置。连接的要点就在于squid.conf加入如下几句。
cache_peer tor parent 8118 0 no-query     # 申明tor代理服务器,主机名tor,端口8118connection_timeout 2 seconds  #    2秒内连接不上就认为网站被屏蔽,应该走tor通路
prefer_direct on  # 倾向于直接连接
编辑好squid.conf后,需要在hosts加入

127.0.0.1  xxxxx,…………… tor
保证ping tor 能ping到127.0.0.1。 然后reload squid.conf!恩,结束了,就这么简单,这样你就实现了一个既能高速上国内网,同时也能通过tor访问被屏蔽技术类网站的代理服务器。
   这样设置好的服务器上通常的网站是没有问题的,但是登陆twitter有点问题,问题在于如果网站URL Redirection,即HTTP 301,squid不是能够很
好的选择tor通路,有可能会选择direct link现象。如果发现有这样的网站,加入如下两句就可以解决问题了。 
     acl twitter dstdomain .twitter.com    #申明规则
     never_direct allow twitter     #永远不让twitter直接连接
   如果发现有更巧妙的办法,我会及时公布实现方法。

   
   后记》
   通过always_direct 可以屏蔽被国家级防火墙屏蔽的网站,以免沾染上西方不良思想,例如将下面两行加入squid.conf


acl avno1 dstdomain .avno1.com #申明规则
always_direct allow avno1 #永远让avno1网站直接连接,因为被国家级防火墙保护,所以只有在解封时才能正常访问。
from http://bullshitlie.blogspot.com/2010/01/squid-tor.html