Tohr - HTTP 层上的洋葱路由器

Tohr (The Onion HTTP Router) 是我上个星期写的一个小的研究项目,它的名字起源于 Tor (The Onion Router)。简单地来说,它就是试图在 HTTP 层上实现类似于 Tor 实现的功能—— HTTP 层上的 HTTP(S) 隧道。

这个 idea 不是我想出来的,而是受到 GAppProxy 的启发(GAppProxy 是一个 great work)。但是 GAppProxy 只是利用 Google 的平台,而且受到 GAE 的很多限制。那么我的贡献呢,就是把这个 idea 通用化,设计一个协议使其支持多平台,解决了 GAppProxy 的一些 bug,完善了 HTTPS 的支持。(哦,忘记了,我还给它起了一个很 fancy 的名字 ^_^)目前 Tohr 的路由器可以是 Google App Engine 上的 Python 网站,也可以是普通的 Apache+PHP 站点。

Tohr 是怎么工作的?

Tohr 的工作原理

Tohr 的工作原理见上图。首先您得拥有一个墙外的主机(免费或者收费的)作为 Tohr 路由器,Tohr目前支持 Google App Engine 和 Apache+PHP 服务器,您将对应的 tohr-router 文件上传到服务器上;然后您在本地运行一个 tohr-daemon 守护程序,设置 tohr-daemon 连接 tohr-router 的 url,tohr-daemon 默认会开启 9090 来提供一个 HTTP(S) 代理服务,您只需要将浏览器的 HTTP 代理设置为 localhost:9090,您的访问请求就会通过 tohr-daemon 转发到 Tohr 路由器上,这样就能通过它来访问被防火墙禁止访问的网站了。

Tohr 是给什么人用的?

目前来讲 Tohr 仍然不很完善,而且还需要加入对其它类型的主机,比如 asp.net、jsp 的支持,还有对多跳和匿名的支持,还没有一个针对普通用户易用性的优化。要求普通用户都有一个墙外主机也是件比较为难的事情(虽然申请一个国外免费 PHP 空间并不困难,比如这里),因此 Tohr 目前还仅适合爱折腾的人使用,尤其是懂 Python 或 PHP 的爱折腾的人,所以在这里是找不到一个一步步的图文教程教普通用户怎么配置的。当然,如果哪位用户愿意做一个,请发送到邮件列表或者提交补丁,我很乐意将它放在项目文档里。

《Tohr - HTTP 层上的洋葱路由器》上有52条评论

  1. 实验成功一半,HTTP可用,但HTTPS不工作,在此处留IP为证。果然是需要小折腾一下的东西。在我的Apache上“RewriteRule ^tohr$ tohr-router.php”的似乎没有生效。有关CA证书什么的我不太懂,有空学习研究一下。

  2. @sswv
    HTTPS 的问题,你安装了 OpenSSL,然后把 ca.crt 安装到你浏览器的信任CA中就可以了。IE 可以直接双击 ca.crt 安装,Linux 下的 firefox 可以直接打开 ca.crt 安装,Windows 下的 Firefox 需要自己到选项->高级->加密里面导入 ca.crt 文件。
    但是强烈建议重新生成自己的 ca.key 和 ca.crt,而不是使用项目自带的 ca key pair,security reasons。Linux 下用那个 update-ca.sh 执行一下就可以了,Windows 下脚本还没有写,win 下安装 ca 要考虑的浏览器太多,烦。

  3. @appz
    其实加密是完全没有必要的,只要将数据压缩一下,就是乱码了,关键字过滤就没效果了。真的想要加密,也很简单,因为这个东西就自己用,自己随便写点儿什么简单的密码算法,大概不会有人有兴趣去破解一个普通老百姓使用的密码算法的。

  4. 有个疑问,那个tohr.conf里地址的填法,我填的 http://xxx.xxx.com/tohr 这个是否正确啊~ 我是php的空间,连上后显示

    Error response

    Error code 591.

    Message: Tohr-daemon: Http error, see command line log..

    Error code explanation: 591 = ???.

    请问是怎么回事啊

  5. @bearqq
    这取决于您的空间是否支持url rewrite和您是否正确上传.htaccess文件,所以我在配置文件中说您需要首先用浏览器测试一下url是否可以访问

  6. @Solrex Yang
    感谢您的回复,之前我在浏览器里已经试过了,显示it works,,.htaccess也上传了,不过貌似还是连接出错。反正是免费空间,也不怕提供地址:http://is.gd/2rT0D,再次感谢您的解答。

  7. https有点小问题,无法完全载入页面,图片无法显示。比如gmail.com。

  8. 用Google App Engine作代理服务器,https连接无法完全载入,图片无法显示。。。
    比如gmail.com

  9. @Solrex Yang
    感谢 当时用的是ubuntu9.04测试的~~gap没有试,条件不足,不过您推荐的那个网站好像也没成功,或许是我哪里做错了

  10. @Solrex

    那个貌似很早就有了,不过有很多bug,使用几十分钟浏览器就会白屏,要重新启动客户端才可以继续使用。

  11. @bearqq
    经我的测试,你的服务器只支持 HTTP 抓取,不支持 HTTPS 抓取。这个大概是你的服务器提供商的限制,我想可能那个服务器不是 Linux 服务器,或者没有安装 curl,因为 tohr 的抓取 HTTPS 页面功能是使用 curl 实现的,PHP 好像没有相应模块。

  12. @Solrex Yang
    感谢您的测试,昨天我在windows下面又用svn下载了一次源代码,用python连上了,或许那个问题是linux和windows的svn不同点产生的吧~

  13. forkei :
    @Solrex
    那个貌似很早就有了,不过有很多bug,使用几十分钟浏览器就会白屏,要重新启动客户端才可以继续使用。

    phpproxy的加密已经被gfw解密了 现在还有glype等 其实在proxy.org还是那里 有很多不同类型的代理

  14. 可以很快的翻墙,哈哈,非常不错。可是看不了YouTube,不知道能否解决这个问题 ?

  15. 我怎么出现这样的错误呢?

    D:\tohr\daemon\python>tohrd.py
    Traceback (most recent call last):
    File "C:\Python26\lib\logging\__init__.py", line 765, in emit
    self.stream.write(fs % msg.encode("UTF-8"))
    UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 296: ordina
    l not in range(128)

  16. 发现问题了,图片不能显示的原因是,每个接收的文件,在头部会加上本次会话的报文。导致文件发生变化,普通htm或文本页,反正可以显示的,但图片文件就被破坏了。

  17. Loki ICMP tunneling
    ACK tunneling
    HTTP tunneling
    呵呵 看来好好研究一下穿墙技术还是有必要的

  18. 您好,我在GAE上遇到了一些问题:首先我上传到GAE上没问题,访问那个地址也显示It works了。但是运行Daemon之后,显示下列信息:
    Tohr INFO: Loading configuaration from tohr.conf
    Tohr INFO: Using Tohr router(s): [u'https://----.appspot.com/tohr
    Tohr INFO: Using outgoing proxy:
    Tohr INFO: Start serving at http://127.0.0.1:9090
    但是这时候用这个代理,却显示404 not found错误。任何网站都打不开,不知是什么原因呢?

  19. 博主,我用000spaces测试了下。看一般网页正常,https失败了,而且也不能看youtube,请问是空间限制还是本身项目的原因?

  20. 补充一下,我安装了openssl也导入了ca文件,但是访问https://www.google.com失败。

  21. 貌似svn地址不能用,挂代理也不行!
    麻烦博主检查下!

  22. 我昨天把我的GAP1.0.0升级到了1.2.0,效果还是不错的,可以上TWITTER,但是FACEBOOK不能登录,YOUTUBE也可以看了,速度还是不错的。

  23. 我在Google App Engine上跑Tohr,客户端是windows。
    跟证书也导入了,可访问Gmail,Google Doc还是不行,提示下面的错误。

    Loading 'screen' into random state - done
    Generating RSA private key, 1024 bit long modulus
    ...............................................................++++++
    ........++++++
    e is 65537 (0x10001)
    Loading 'screen' into random state - done
    Using configuration from ca\ca.conf
    error loading the config file 'ca\ca.conf'
    9172:error:02001003:system library:fopen:No such process:.\crypto\bio\bss_file.c:169:fopen('ca\ca.conf','rb')
    9172:error:2006D080:BIO routines:BIO_new_file:no such file:.\crypto\bio\bss_file.c:172:
    9172:error:0E078072:configuration file routines:DEF_LOAD:no such file:.\crypto\conf\conf_def.c:197:
    Tohr ERROR: [Errno 336445442] _ssl.c:361: error:140DC002:SSL routines:SSL_CTX_use_certificate_chain_file:system lib

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注