美丽新世界:linux 下的惬意生活 之 tor地下网络代理篇

2015/01/27

Everyone has the right to freedom of opinion and expression; this right includes freedom to hold opinions without interference and to seek, receive and impart information and ideas through any media and regardless of frontiers.
---- <<Art. 19, Universal Declaration of Human Rights, 1948>>.

google 重新定义了搜索引擎,苹果重新定义了手机,天朝重新定义了局域网。为让大家保有天朝优越感,+- 屏蔽了大量“非法”网站,有境内/境外的、有纯技术的、有爱情动作的、有轮子功的,反正 +- 不喜欢的通通借由 GFW 这堵墙屏蔽掉。当然,也有主动屏蔽囧朝访问请求的,比如,sourceforge.net 非常反感囧朝的封闭,你朝子民别来我这儿。裆从小就教育我们,哪里有压迫哪里就有反抗,话说屏蔽之前,天朝的宅男还可以下载几部码片看看打发时间,嘚,看吧,让你屏蔽,没事做了,那就研究下怎样翻墙吧。

前面介绍的几种代理方式,都有个共同的特点:第三方先贡献出一台墙外服务器,然后允许你以该服务器作为出口,访问目标网页,出口服务器在获取完整目标网页后再传回给本地。goagent 的出口服务器是 google 的 GAE 引擎所在服务器、shadowsocks 和 openVPN 的出口服务器是各大机构免费开放的 VPN 服务器,由此可见,这些出口服务器是实现翻墙的关键。
有报道称,接入互联网的 PC 数已达 13 亿,分布在全球各地,如果,我说如果,有某种机制,一旦建立相互信任关系后,位于墙外的 PC1 能允许墙内 PC2 将自己作为出口服务器进行目标网页访问,那也是可以实现翻墙,若是可行,13 亿台 PC,你只需选择希望的国家或地区的那台 PC 建立信任,随意指定出口 IP 的代理方案完全可以落地。tor 诞生。
顶级黑客为保证自身安全,对网络匿名访问有非常高的要求,通常:他们先在自己的 PC 上安装虚拟机,然后虚拟机中通过 VPN 代理进入 tor 的地下网络,最后从 tor 的出口中继节点发起网络访问。这样一层套一层的方式,实现绝对匿名访问。tor 项目初衷是为用户创建一套高度匿名网络访问的服务,任何国家、任何计算机设备均可加入将自己设置为一个中继节点,所有中继节点形成了一张巨大的地下网络,你的任何网络访问请求,均可通过这张地下网络多次中转,实现不可回溯的匿名访问,由于这个地下网络中的节点数目非常庞大,用户可以自由选用任何地区的 IP 进行网络访问。接入地下网络前,tor 会让你先连接上索引服务器,由于地下网络中的中继节点数量非常多,所以必须通过索引服务器查找应该连接哪些节点;一旦连接上索引服务器,它将为你分配三个中继节点,入口中继、中转中继、出口中继,这三个中继组成一条地下网络访问路径,你的网络访问请求路径变成客户端-入口中继-中转中继-出口中继-目标网站,回到我们引入地下网络代理的背景,如何指定任意国家的 IP 进行代理访问?这看似不可能实现的任务,在 tor 中易如反掌,只需手工指定路径中的出口中继节点指定为你需要的区域即可。下面我们看下具体操作。
第一步,下载并安装 tor、vidalia。tor 是命令行工具,那些被 windows 毒害的用户患有命令行恐惧症,为解救他们,开发人员在 tor 外开发了一套图形界面的壳 vidalia,通过 vidalia 可在图形界面下操纵 tor。你可以在 http://www.torproject.org/dist (墙外)找到最新版的 tor 和 vidalia 源码,下载后分别源码安装;
第二步,指定出口中继节点。重点来了,我们引入 tor 地下网络的目的是想实现按自己意愿指定某个国家的 IP 作为访问代理,只要正确配置即可。tor 的配置文件,若是源码安装的,则为 /usr/local/etc/tor/torrc,若从预编译包中安装,则为 /etc/tor/torrc 或 /etc/torrc,vidalia 的配置文件为 /root/.vidalia/torrc。我们以 tor 为例,看看两种指定出口 IP 的方式。
  • 方式一,按国家代码进行指定,在 tor 配置文件中增加如下信息:
# 按国家指定出口中继节点 
ExitNodes {MY} 
# 严格按 ExitNodes 设定选用出口中继,即便没有可用中继导致创建地下网络路径失败也要严格选用 
StrictNodes 1
其中,我希望出口 IP 位于马来西亚,所以在 {} 设定为 MY,你可以换成任何你希望的国家或地区,比如想要台湾 IP,可以设定为 TW,完整国家代码参见http://zh.wikipedia.org/wiki/%E5%9C%8B%E5%AE%B6%E5%9C%B0%E5%8D%80%E4%BB%A3%E7%A2%BC 。
  • 方式二,按节点名进行指定,在 tor 配置文件中增加如下信息:
# 按节点名进行指定 
ExitNodes voxility,axigy1
# 严格按 ExitNodes 设定选用出口中继,即便没有可用中继导致创建地下网络路径失败也要严格选用 
StrictNodes 1
其中,我希望出口 IP 位于罗马尼亚,所有选用 voxility 这个位于罗马尼亚的出口中继节点名,你可以在http://www.torservers.net/exits.html 找到当前各国在线的节点名,按需选用,你也可以指定多个出口节点名,用 , 分割,形成候选列表,避免单个节点故障影响你的使用。
关于出口节点的选择,你一定要谨慎!不见得进入地下网络就一定安全。天朝虽无法绝对封锁 tor 的地下网络,但可以把自己隐藏到地下网络中,伪装成一个普通中继节点,这就是所谓的“蜜罐”。另外,除了天朝外还有些社会主义国家也有他们自己的 GFW,比如伊朗、叙利亚、朝鲜等等,如果,你把朝鲜选作出口节点,很好,费了九牛二虎之力翻到墙外,你会发现更多网站无法访问了,就好像你挖条地道越狱,好不容易挖通了,却发现是在隔壁监狱 @_@!因此,你需要告诉 tor 切勿选用这些国家的中继节点:
# 禁用以下国家的中继节点
ExcludeNodes {IR},{SY},{KP},{CN},{MO},{HK}
第三步,设置浏览器让其通过地下路径进行网络访问。前面介绍 goagent 时我们已经设置过浏览器,让浏览器走 goagent 代理模式,这里的设置与前面差不多,点击插件 autoproxy,进入 preferences -> proxy server -> edit proxy server -> add proxy server,添加代理名 tor、IP 为 127.0.0.1、端口为 9050、协议 socks4,保存后重启 firefox,这时你在 autoproxy 中可以看到两个可选代理,见下图:

(在 firefox 中增加 tor 代理模式)
第四步,进入地下网络。tor 威力太大,近年被 GFW 彻底封杀,你用普通方式是无法接入索引服务器,你可以用网桥或者 VPN 接入。
尝试通过网桥进入地下网络。何为网桥?地下网络中的普通中继节点是以公共形式存放在索引服务器上,网桥实际上是种私有中继节点,也就是说,你先用私有中继节点(即网桥)接入索引服务器,接着获取地下网络三个节点的网络路径,然后抛弃私有中继、采用地下网络路径进行访问。目前有两种获取网桥的方法。方法一,直接去官网获取 http://bridges.torproject.org/bridges ,简单得很,输入验证码即可获取网桥,好吧,我承认,这是我见过最复杂的验证码,你可以把网页放大到最大程度,或许你可以看清;方法二,用你的 google 邮箱给 bridges@torproject.org 写封邮件,主题和正文都为 get bridges,且正文必须是纯文本(你的邮件签名应该禁止掉),几分钟后将收到 tor 项目组自动反馈的邮件,内容正是你需要的网桥,类似:
88.83.241.14:9001 e040f24bfdd1e4aab4fed15db47d8c22dfac454d 
其中,三部分依次为网桥的 IP、网桥的端口、网桥的指纹。有了网桥,你需要将其添加进 tor 的配置文件中:
# 使用网桥
UseBridges 1
# 设置网桥
Bridge 88.83.241.14:9001 e040f24bfdd1e4aab4fed15db47d8c22dfac454d  
这时,你可以先尝试下能否接入索引服务器,命令行执行:
tor
如果长时间停留在 Bootstrapped 5%: Connecting to directory server,那么说明你刚获取的网桥已经被 GFW 封锁,如下图所示:

(网桥连接地下网络失败)
本次尝试失败!你别惊讶,想想也正常,你能轻松获取网桥,GFW 的运维人员也能轻易获取,他们可是一群天天只干这事儿的人,新出一个网桥,他们就封锁一个。你更别妥协,我们用网桥的目的是为了接入索引服务器,通过前面几节的介绍,你已经具备 VPN 系统全局代理的能力,网桥不行咱就不用网桥,你完全可以在全局代理的环境下不用网桥接入代理服务器。
尝试通过 VPN 进入地下网络。先把上一步添加的网桥信息全部注释掉,然后执行 openVPN 建立系统全局代理环境,最后执行 tor 进入地下网络。如下图所示:

(VPN 连接地下网络成功)
本次尝试成功!由入口、中转、出口三个节点组成地下网络访问路径就创建好了,为确保绝对安全,tor 周期性变更路径中的三个节点,也就是说,这个时段是 node1-node2-node3 组成的路径,下个时段则变成 node11-node22-node33,达到访问不可回溯的目的。
经过以上四步设置,以后,你要想进入地下网络,先运行 VPN 创建系统全局代理环境,接着运行 tor 进入地下网络,最后设置 autoproxy 走 tor 地下网络路径,搞定!你可以访问 http://check.torproject.org以确认是否通过地下网络访问。



摘自:https://github.com/yangyangwithgnu/the_new_world_linux

作者:yangyangwithgnu

Related Posts