使用SOCKS代理服务器转发bzr通信
创建SSH SOCKS 服务器
我们知道设置SSH SOCKS 代理服务器是很简单的,只要你有一个远端服务器的ssh帐号,使用下面的命令就可以轻易的创建一个套接字代理服务器。
ssh -fND 6666 ssh_user@ssh_server
它的用途是将应用程序的端口请求通过ssh加密通道动态的转发到远端ssh服务器。比如,我们可以设置firefox使用SOCKS5代理服务器并将端口按上面的命令设置为6666, 这样当我们用firefox浏览网页时(也就是对80端口的访问请求)就被转发到远端ssh服务器上作请求了。因为所有的访问请求经过ssh加密通道,所以用来对付墙还是很得心应手的。
bzr 不支持SOCKS代理服务器转发
因为经常要用bzr版本控制工具同步在launchpad上的项目,但是直截访问launchpad的速度实在太慢了。我发现我在国外租用的ssh服务器访问launchpad的速度非常快,而本地访问ssh服务器的速度也还不错,所以,自然就想到了能不能把bzr通信转发到ssh服务器。很不幸的发现bzr并不支持SOCKS代理服务转发。难不成我们只能忍受bzrlp的龟速,Google一通之后,发现了 tsocks
tsocks 如何工作
它的基本原理是:
- 在加载应用程序之前, tsocks 先加载其共享库
- 该函数库覆写了内核的 connect() 函数
- 这样当应用程序发送连接请求时,该请求就被转发给了代理服务器(然后通过加密通道转发到了ssh服务器)
所有这些是通过设置环境变量 LD—RELOAD``的值为 ``/usr/lib/libtsocks.so 来实现的,tsocks 本身只是一个简单的shell包装(wrapper)脚本,所有的转发任务都是由上述的函数库完成。
安装好tsocks后,编辑文件 /etc/tsocks.conf 将已有的所有内容都注释掉,添加下面两行内容:
server = 127.0.0.1 server_port = 6666 #设置为你的SSH SOCKS服务器开放的端口
就是这么简单,以后我们只要在运行bzr程序前,运行tsocks就可以使用创建好的SSH SOCKS服务器了:
tsocks bzr pull lp:xxxx
这下bzr的访问速度还真是大大的提高了, 其实我们可以用tsocks来实现所有不直接支持SOCKS代理服务的程序。
参考文章:http://www.plenz.com/tunnel-everything













