Wednesday, April 4, 2012

Android翻墙总结

原文:http://hongy19.blogspot.com/2012/03/android.html

这两天为了让手头的山寨Android tablet Ten3翻墙,折腾了半天。虽然最后还是没能成功,但对伟大的GFW和如何翻墙,有了更多的认识。

翻墙之前的首先要了解GFW是如何干扰网络连接的,具体可见 GFW封锁网络的几种常用方法。干扰大体可以分为DNS干扰,IP封锁,TCP连接干扰,SSL干扰。翻墙的方法虽然千差万别,但基本思路都是一样:建立本地和国外服务器的加密通道,将本地的DNS查询连接,HTTP/HTTPS中转至国外服务器。对于DNS服务,除了加密中转通道,还需要设置正确的DNS服务器(like Google or opendns)来解决DNS劫持问题。

从上面可以看到,利用国外服务器建立加密中转通道是翻墙的关键。TCP/IP连接是分层架构,因此较高层上的加密中转只能适应部分程序。openvpn/l2tp/pptp都是较低层面的加密连接,可以让所有的本地连接加密中转。SSH的socket proxy可以加密中转http/https的接连。需要注意的是http proxy并不能处理ftp和https的中转。https的中转需要socket proxy来处理。

除了国外服务器,加密中转的另外一个问题就是如何将本地连接转发至加密通道上。openvpn/l2tp/pptp在内核空间增加了一个network adapter,所以只需要通过路由表就可以进行转发。对于http/socket proxy通道,如果application支持proxy,则可以自动转发;反之则需要利用iptables将http/https连接通过transparent SOCKS proxy转成socket proxy。

当加密中转连接到到服务器端时,还需要在服务器端做一些设置以便进行中转。openvpn/l2tp/pptp是通过iptables在内核实现转发。ssh即可以利用-D选择转发socket,或者利用端口映射将socket转发至socket proxy或者http proxy。

l2tp和pptp是大多数android设备都默认支持的VPN。但很多router或者firewall不支持pptp,常常会遇见一些莫名其妙的问题。openvpn需要android内核支持tun.ko模块。同时android还需要有binary openvpn application。整个安装过程较为复杂。

sshtunnel/gaeproxy是socket/http level的加密中转,因此需要利用到android中的iptable及相应的kernel module。

Ten3由于没有iptable相应模块。所以无法使用ssh。 pptp和/l2tp的binary application貌似有问题,无法连接pptpd服务端。但万幸的是tun.ko模块原生自带,只要在市场下载openvpn installer和openvpn setting就可以使用了。为避免dns污染,还需要装一个改变dns的软件。

翻墙问答:如何结合IPv6配合Tor 翻墙?

原文:http://www.rfa.org/cantonese/firewall_features/firewall_IPv6-03302012115245.html?encoding=simplified

DC:又到翻墙问答的时间。有不少网友都已经有用IPv6来翻墙,只不过最近Tor推出了新功能,支援IPv6的网桥,既然IPv6都已经可以翻墙,为何又需要Tor?

李:现时所谓的IPv6翻墙,其实是因中国当局的网络封锁基建未支援IPv6�所以有特殊的翻墙效果。但只限那些支援IPv6的网站,像谷歌、Facebook等才有效,对很多仍然只支援IPv4的网站,就算有IPv6的连接都不能够翻墙,因为IPv4的网络连接并未跳过中国的网络防火墙。

而Tor就补足了纯IPv6连接的不足,用户先连接未被中国当局封锁的IPv6网桥,然后透过这个IPv6网桥进入Tor网络,再在Tor网络浏览你想要的资料。Tor利用IPv6技术,突破中国当局对网桥的封锁。

DC:那用户怎样透过IPv6来登入Tor的网桥?

李:前提当然是要有IPv6连结,如果你在中国部分大专院校任职,那你大学的网络已经正使用IPv6,那你安装新版的Tor,就可以利用IPv6连接Tor网桥。

如果你并非中国支援IPv6大专院校的教职员,那你就需要利用隧道技术,先连接一个IPv6的网点,然后再连接Tor。翻墙问答之前介绍过利用gogo6软件来做到IPv6翻墙,各位可以上网,参考我们介绍gogo6来连接IPv6那集,就可以知道怎样最简单与支援IPv6的网点连接起来。由于gogo6软件需要另外安装,下载gogo6软件时,有需要作出翻墙,才能够下载成功。

以往下载gogonet软件时,需要成为gogo6的会员,但现在已经无这个要求,如果你有twitter或facebook帐户,可以透过你现有的twitter或facebook帐户登入下载,相信这个方法比较简单。

而在下载gogonet软件,并且成功执行后,就可以安装新版的Tor�准备IPv6配合Tor翻墙,在0.2.3.12-alpha以后的版本,才可以支援IPv6翻墙。当你输入IPv6的网桥地址之后,启动Tor就可以成功利用Tor翻墙,不再受到限制。

DC:那现在用IPv6配合Tor稳不稳定?

李:由于Tor IPv6计划仍然未在相当稳定的阶段,所以尽管可以透过这方法连接网桥,绕过中国当局的封锁。但翻墙的稳定程度,可能仍然与其他翻墙软件有一段距离。所以现阶段,支援IPv6的Tor,可以作为中国当局一旦加强封锁之后的后备翻墙技术,但离依赖用这种技术来翻墙仍然有一段距离。但相信未来Tor继续作出改进,应该可以稳定利用IPv6来配合Tor翻墙。

DC:但这样连上IPv6配合Tor翻墙,会否仍有翻不到墙的情况。

李:因为DNS污染问题在IPv6仍然未得到解决,所以你仍然应该留意你的HOSTS文件设定,令系统能够指向正确的网址之上,而并非被中国当局设的DNS指到错误的网址上。而Tor使用者为了避免受中国当局设下的网络节点影响,仍然应该将个别国家设下的节点,像中国、香港、新加坡等地撇除,以免中国当局设下的间谍网点将你的通讯截取,令你惹上麻烦。因为IPv6技术本身,只是令Tor的网桥被封锁的问题被解决,但不能够彻底解决Tor技术的一些漏洞,让中国当局可以截取Tor用户的通讯,或阻碍Tor的正常运作。

DC:多谢你李建军,在下周同样时间,我们会继续有翻墙问答,解答大家对翻墙的问题,下周见。

使用HTTP代理服务器上网教程

原文:http://360proxy.sinaapp.com/?p=39


我们经常会听身边的朋友说使用代理上网,网速慢换个代理试试,IP被封了论坛上不去,换个ip等等这类的话,其实使用代理服务器上网很简单,今天我就来教教大家怎么用ie使用代理服务器上网。

第一步,获取最新代理服务器IP

先打开 http://360proxy.sinaapp.com/?page_id=6 获取最新的代理服务器IP和端口(尽量选择响应时间短的代理哦,响应时间越短越快,由于地区性的原因,可能跟实际的速度有点出入)

第二步、设置IE

打开你的IE浏览器,然后 选择 工具-》Interner选项-》连接 选项卡

如下图所示

然后选择  局域网  选项,勾选代理服务器 前面的复选框 如下图所示,地址填上你第一步获取到的IP,并填上对应的端口,这样就设置完毕了

第三步、测试并上网

下面我们用ie打开 http://www.ip138.com查看一下我们的ip看看是否变化了。如果打不开,说明我们第一步找的代理服务器暂时不能使用,重新获取一个ip,重复第一步和第二步就可以了。祝你成功。

解决Dropbox中国无法及时自动同步的问题

原文:http://www.williamlong.info/archives/3050.html


最近由于想要使用Dropbox的多人协作功能,就发现Dropbox不能自动同步其他机器上产生的文件变化,经过一番搜索,发现原来是GFW在作怪(GFW和GD的性质和用心我们心知肚明,就不在这里评价了)。月光博客发布了解决Dropbox无法实时更新的问题分析了产生这个问题的原因并提出一个有效的解决方案。但是在使用时我发现,我找不到一个优良稳定的代理服务器,也没工夫去学习privoxy软件的配置和使用,而且我要将解决方案提供给我的合伙人,一个复杂的方案是不能接受的。经过一番研究,提出如下比较简单的办法。

  分析

  我发现Dropbox向notify8发出的请求很简单,回应也很简单,一共有两种:{"ret":"new"}和{"ret":"punt"}

  分别表示云端有变化和无变化,然后客户端考虑去下载文件列表并同步。

  经过一番痛苦的失败,我发现这个请求的其实是一个comet请求,服务器端并不马上回应,而是会挂起,如果有变化,则马上回应,如果一直没有变化,大约一分钟超时回应punt,然后客户端再连接服务器。在我分析Dropbox的过程中一直不解:为什么Dropbox的其他请求都是https,而只有这一个请求是http的。现在找到了答案:因为它是comet请求,长连接,而且连接频率非常高,如果使用https代价太大,而且影响效率。如果这个请求返回new,客户端就会使用https连接服务器端。

  解决

  由此提出一个完美的解决方案,不仅可以解决本机的问题,而且可以解决朋友的问题,只要让朋友修改hosts为我的ip地址:

  • 修改hosts将notify8对应的ip地址改为本机
  • 在本机建立一个http服务,代理notify8得到dropbox的返回值,再原封不动地返回给本机dropbox客户端

  具体方法是使用tornado,进行一步http请求,这样只占用很少一部分系统资源。贴出代码。

  代码

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
from tornado.options import define, options
from tornado import httpclient


define("port", default=8888, help="run on the given port", type=int)


class Application(tornado.web.Application):
    def __init__(self):
        handlers = [
            (r"/subscribe", NotifyHandler),
            (r"/.*", HomeHandler),
        ]
        settings = dict(
            debug=True,
        )
        self.debug = True
        tornado.web.Application.__init__(self, handlers, **settings)


class HomeHandler(tornado.web.RequestHandler):
    def get(self):
        self.set_header("Content-Type", "text/plain")
        self.write("Hello from Tornado!")


class NotifyHandler(tornado.web.RequestHandler):
    @tornado.web.asynchronous
    def get(self):
        self.set_header("Content-Type", "text/plain")
        url = xxxxx #关键代码还是不贴出来了,人怕出名猪怕壮,要是大多数人会用了,估计这个方法死期不远矣!
        http_client = httpclient.AsyncHTTPClient()
        http_client.fetch(url, self.handle_response, request_timeout=100.0)

    def handle_response(self, response):
        if response.error:
            print "Can not connect."
            self.write("{\"ret\": \"new\"}")
        else:
            print "Connect Successfull."
            self.write(response.body)
        self.finish()


def main():
    tornado.options.parse_command_line()
    http_server = tornado.httpserver.HTTPServer(Application())
    http_server.listen(options.port)
    tornado.ioloop.IOLoop.instance().start()

if __name__ == "__main__":
    main()

  来源:投稿,原文链接