首先介绍一下Tor,Tor其实是The Onion Routing的缩写,即洋葱路由,目前已经发展到第三代了。
它的最初的设计目的是防止要访问的目的网站追踪连接的来源,从而保护用户的隐私,提高安全性。通俗一点说,就是为了隐匿你的身份。也就是说,你随便在什么网站发布了任何信息,理论上都是查不到你的,即使你的包在任何中间传输节点上被截获也没关系。
另外,在国内还有一个非常现实的作用,就是可以翻墙。
为什么叫洋葱代理呢?这个名字我觉得起的还是非常形象的。
在Tor网络中,任何连接从它的起点,到最终的目的地,中间都会经过3个节点。这些节点之间都是点对点加密的。从起点到第一个中继节点(Relay)间,经过三次加密。到达第一个节点后解密一次,获得下一跳中继节点的地址再传输,这样从第一个中继节点到第二个中继节点间就有两次加密,并且第一个中继节点只知道第二个中继节点的地址,而不知道第三个中继节点的地址。当信息到达第二个中继节点后,再解一次密,再传给第三个中继节点。而到第三个中继节点后,再解一次密,再发送给目的地址。这就好比剥洋葱,每到一个节点剥一层(为什么不是剥包菜?)。
这样做的好处是,任何一个传递节点都不能够完全知道数据的起点和终点。对于目的网站来说,它只能得到最后一个传递节点的IP地址。通过Tor,就可以完全影藏发送数据的人(据说美剧《纸牌屋》里面的黑客用的就是这个)。
这里就有一个问题,细心的读者一定发现了,那就是第三个节点已经可以得到最终完全没有加密的原始数据了。这样其实非常不安全,不怀好意的人就可以在最终传递节点上安装抓包工具,抓到应用层的信息。所以,如果你要交流的是非常敏感的信息,请使用安全的端到端协议。例如,如果你要使用用户名和密码登陆一个网站,请确保使用HTTPS连接,否则会存在风险。
这里还有一个问题,Tor的客户端是如何知道Tor网络中的中继节点有哪些的呢?这里有一个概念,叫目录服务器(Directory Server)。目前,官方的目录服务器一共有9台,它们之间会定期同步数据。如果想成为中继节点,Tor客户端必须要向其中一台目录服务器注册自己。而且Tor的客户端是不用直接连接到官方的目录服务器来获得所有的中继节点信息的,而是通过所谓的目录镜像(Directory Mirror)。这些目录镜像会定期的从官方的目录服务器上拷贝一份最新的数据。这样做的好处是分担了目录服务器的负担,事实上,大部分中继节点都被配置成了目录镜像。
有了前面介绍的中继节点和目录服务器的概念,这里大致介绍一下Tor的连接过程。
1)首先,Tor的客户端会先从目录服务器或者目录镜像上获得当前Tor网络中所有中继节点的信息;
2)然后,该客户端会随机的在所有中继节点列表中选择3个,并建立连接;
3)如果Tor客户端想访问另外一个地址,则会再随机选取3个中继节点,建立另外一条链接,而不会用前面建立的那条虚电路。
如果所有的中继节点都是通过从目录服务器或者目录镜像得到的,那想封杀Tor就很简单了,直接读取目录服务器,把所有中继节点IP地址都拿到,直接加到黑名单中就行了。
事实上,很多地方的政府也是这么做的。那有没有办法绕过这种限制呢?Tor为此还专门引入了所谓的网桥(Bridge)节点。
什么是网桥节点呢?其实它也是中继节点(所以网桥节点有时也较网桥中继节点,Bridge Relay),只不过和普通中继节点不同的是,它不会把自己注册到官方的目录服务器中,这样就不能方便的查到了,也就没法阻挡了。为什么称作网桥节点,因为它是用来在监管网络和自由网络之间的一个桥接。但这也是面双刃剑,想挡的人看不到了,想用的人也没法方便的拿到。
上面讲了那么多原理和概念,下面我们讲讲如何配置一个Tor客户端,有了上面这些概念做铺垫之后,讲起来会更加的容易。
1)首先下载并安装Tor的客户端
网址是:https://www.torproject.org/download/download.html.en,进去之后可以看到很多版本可以选择,可以随便选择下载“Vidalia Bridge Bundle”或者是“Vidalia Relay Bundle”。
下载完成后,直接点击安装就好了,这里不再赘述。
2)用Vidalia配置Tor客户端
安装好后,打开Vidalia,
然后选择“Settings”,进入设置界面,选择“Sharing”,选择“Run as a client only”,然后点“OK”。
理论上过一段时间之后,Tor客户端就会连接上Tor网络,但目前Tor只提供Socks代理,如果想要用HTTP/HTTPS代理,还需要再加一个Socks代理转HTTP/HTTPS代理的软件,这里介绍使用Polipo。
3)安装并配置Polipo
Polipo是一个非常轻量级的Web代理服务器,其主页在这:http://www.pps.univ-paris-diderot.fr/~jch/software/polipo/,可以从上面下载到Windows版本。
下载下来是一个zip包,直接解压出来就可以用了。
解压出来后除了polipo的可执行文件之外,还有配置文件的示例,可以直接在上面更改,也可以拷贝一份出来后再更改。
其中有几项是必须要更改的。找到“socksParentProxy”,去掉前面的“#”,改成”localhost:9050″,9050是Tor客户端默认开的Socks代理端口。
再找到“diskCacheRoot”,去掉前面的“#”,内容留空,表示不用磁盘缓存功能。
好了,就修改这两项就可以使用了,非常简单吧。打开Windows的字符控制台cmd,切换的polipo的解压路径,敲入命令
可以看到,监听端口是8123,这就是HTTP/HTTPS代理的端口,直接在浏览器里面设置代理服务器为localhost或者是127.0.0.1,端口是8123就可以用了。
到此,基本配置就结束了。但是,有时候Tor客户端会连接不上Tor网络,通常这是由下面原因造成的:
1)必须要使用代理服务器才能上外网
这时可以给Tor客户端添加代理服务器。在”Settings”窗口内,选择“Network”,在下面的选择项内选“I use a proxy to access the Internet”。
然后填上代理服务器地址,端口,验证所用的用户名和密码,最后选择代理的种类,点“OK”就好了。
2)很不幸,你所在的网络已受监控,Tor网络中的目录服务器和中继节点都被封杀了(GFW)
这时就要使用前面说的网桥节点了。要想设置网桥,首先得获得网桥节点的信息。
怎么获得呢?有两个办法,一是找你的朋友,他所在的网络没被监控是自由的,让他帮忙设置他自己的Tor客户端为网桥模式,然后把他自己的网桥信息告诉你;二是通过发送邮件到bridges@bridges.torproject.org,邮件内容包含“get bridges”,最好使用gmail发送。过一阵子后会收到回复邮件,里面会有网桥节点信息的列表。
下面就是把这些网桥添加到Tor客户端里,还是在“Settings”下的“Network”里。
直接一个一个拷贝黏贴,然后添加就好了。
好了,一般通过上面两个方法基本上都可以连接上Tor网络了,当然你的设备首先得能上网。
这里还有一个问题值得提一下,这就是所谓的“陷阱节点”。什么是陷阱节点呢,就是某些政府部门故意假设的一下中继节点,故意不让你连出去,或者更可怕的是在上面抓取所有出去的包。如果很不幸,你选的出口节点(也就是第三个中继节点)正好是其中某一个“陷阱节点”,那你所有发送的数据都在监控之中,这是很可怕的。有解决的办法吗?Tor想到了这点,其配置项中允许将来自某一个国家的节点排除在选择之外。
如果想把来自香港的所有中继节点排除出去,可以在配置文件中加一项:
ExcludeNodes {hk}
这样,Tor客户端会主动规避来自香港的中继节点,但如果Tor在排除之后的中继节点中建立不起来虚拟线路的时候,还是会尝试使用那些排除在外的中继节点。所以,如果要再狠一点,哪怕不能连接也完全不考虑这些排除的节点,则可以再在配置文件中加这一项:
StrictNodes 1
除此之外,还可以精确指定出口节点所在的国家:
ExitNodes {us}
这样就可以保证最后一跳的出口节点都选在美国。
好了,到此全部解释清楚了,享受乐趣吧!