Pages

Wednesday, 20 February 2013

使用Privoxy让Dropbox智能翻墙/实时同步

本文主题:令dropbox客户端的http请求经socks代理访问dropbox服务器,而https请求不经代理直接访问。如图:
1
高手们只需看到这就行了。以下是详细操作说明。
目前在墙内,dropbox被关键字屏蔽(Wildcard: .dropbox.com),但是客户端还能正常使用,因为客户端和服务器之间使用的是https加密传输。但只有一处是没有使用https的,就是 stork47.dropbox.com(在我这是这个地址,其他地方可能不一样)。这个服务器负责将服务器端(或其他客户端)发生的文件更新通知到其他 客户端(我猜的,但应该差不多),然后其他客户端才会发起https请求去和服务器同步这些文件。实际中,是客户端每60秒向 stork47.dropbox.com查询一次,看是否有文件需要更新。因为该请求没有使用https连接,导致连接一直被RESET,所以某台客户端 的更新无法实时反映到其他客户端。
因为一般人可能没有这个需求,所以没多少人关注这个课题。像我以前也只是在家里和公司同步一些文件而已,没有实时更新的必要。有强烈需求的人,就设置让客 户端全程走代理,可以解决上述问题,缺点是文件的更新速度受代理服务器速度的影响,大多数情况下没有直接连接的速度快。还有一部分人当需要更新时,直接重 启客户端(甚至为此写了个脚本),因为客户端只在启动时才使用https连接检查更新,这样做的缺点显而易见。
最近用privoxy,发现它可以做到分流http和https,于是试验了一下,果然可以分流dropbox的客户端请求了。就是前面说的,让http 请求走代理,而https请求不走。这样即满足了实时更新的需求,又兼顾了更新速度,可谓智能代理了。而且我搜索“dropbox privoxy”,google.com.hk前几页都没有关于这个方法的介绍,所以我这个便算原创了。至于是不是第一个,应该还有高人在,只是我没搜出 来而已。因为privoxy还有不少替代方案我没有试过的,比如polipo之类。以下是操作步骤。
1,需要准备的东西:dropbox客户端、代理软件、privoxy。privoxy的官网是http://www.privoxy.org/,不知道下哪一个的话就点这里直接下载win32下的3.0.17稳定版http://sourceforge.net/projects/ijbswa/files/Win32/3.0.17%20(stable)/privoxy-3.0.17.zip/download。该方案应该与平台无关,但是我只在windows 7下试验过。
2,打开privoxy的配置文件config.txt,在最后面添加这几行:
#   for dropbox: http --> SOCKS Proxy(19841), https --> direct
 forward-socks5   .dropbox.com             127.0.0.1:19841 .
 forward          .dropbox.com:443         .


注意将19841修改为你自己的代理软件的端口。如果你的代理软件不是socks类型的,那么就不是加上面的几行,而是加这几行:

#   for dropbox: http --> HTTP Proxy(19842), https --> direct
 forward          .dropbox.com             127.0.0.1:19842
 forward          .dropbox.com:443         .

注意好多地方有半角的.号,不要弄丢了。

3,启动privoxy,将dropbox的代理设置为HTTP 127.0.0.1:8118,就OK了
-------------------------------------------------------------------

通过代理让Dropbox实时同步


Dropbox是现在最好的云存储服务(没有之一),所以一直它都是我云端应用的首选。其实一直用着都没有觉得什么异常,后来才知道说,由于GFW的存 在,Dropbox的文件列表是不能实时刷新的,举例来说,当你A主机文件发生变化时,是可以马上同步到云端,但是这个时候,另外一台B主机并不能实时获 取到云端文件变化信息,除非你重新启动dropbox客户端,一般我家里的电脑回家开机之后就会自动同步,所以我并没有太大的感觉。
这个问题产生的原因,主要是因为Dropbox的文件传输走的是https协议,所以可以顺利穿墙而过,而查询云端文件变化的走的是http协议,就被GFW了。
原理明白了,我们就来说解决方法,目标就是让Dropbox的http通过代理走,而https直连,这可以通过一个叫做Privoxy的软件来完成,下载链接请戳这里!安装完成之后,你需要打开config.txt 文件,在最后加上下面的内容(注意那个小点哟):
#   for dropbox: http –> SOCKS Proxy(7077), https –> direct
forward-socks5   .dropbox.com             127.0.0.1:7077 .
forward          .dropbox.com:443     
   .
配置完成之后,重启一下就不用管了,这里看到的7077是本机SSH代理的端口,请自行修改。当然这里要说一下,如果你讨厌那个P图标碍眼,可以将Privoxy作为系统服务启动,你所要做的,只是到它所在的目录运行命令行:Privoxy –install ,然后就可以在系统服务里面配置自动启动了!
接下来我们来弄SSH代理,我相信很多人用的是MyEntunnel, 但是都说不太稳定,所以这次我就换了另外一款,就是 Bitvise Tunnelier,你可以到这里下载到这个客户端。然后进行如下设置:
  1. 在login界面:配置服务器,端口,用户名,选择密码认证并输入密码
  2. 在Options界面:选择一直自动连接,然后取消在Login时所进行的操作,如 Open SFTP
  3. 在Service界面:配置本地端口,7077(和前面Privoxy里面对应)
  4. 保存成一个Profile,然后测试一下登录就OK了!
如果你希望它无痛无痒自启动,可以建立快捷方式,在命令行最后加上-loginOnStartup,然后再丢到系统的启动目录里面就可以了。
现在我们配置完成了SSH代理,以及Privoxy,最后我们来配置Dropbox,在Preferences设置中找到Proxies,然后选择 HTTP模式,代理地址填写127.0.0.1,端口8118 就可以了!8118是Privoxy的默认的端口号,如果你喜欢,自己到Privoxy里面改掉也可以!
大功告成,试试看通过网页上传一个小文件到Dropbox,文件一传完,本地的Dropbox马上就开始出现小箭头旋转,然后就下载到本地了。