SSH动态代理是国内较为常见的翻墙方法。正如SSH隧道简介所说,它存在不少有优点。
然而在实际使用中,它存在如下缺点:
- 与PPTP等VPN协议相比,它的连接不稳定。前者应该具备协议级断线重传机制。
- 基于廉价VPS,导致它的连接不稳定。而且廉价VPS容易掉线,有时需要用户自己找在线客户修复,进一步延长了掉线时间。
- 由于上述缺点,不适合小型公司多人使用。
在大概2年前,我摸索出SSH动态代理集群的办法。并将之部署于我所服务的公司,成功负载了20-30人日常翻墙学习与工作的需求。
原理
SSH动态代理,即为SOCK5代理,所以我们需要的是SOCK5集群。
若搜索socks 5 load balance不难发现一些有用信息:
What is the best way to load balance multiple sock5 proxys on seperate VM’s in the same datacenter?
我将分别介绍3种方法搭建SOCK5集群:
- 利用第三方模块nginx_tcp_proxy_module。
- Nginx 1.9开始支持TCP Load Balancing。
- HAProxy
关于SSH动态代理的配置方法,请参看AutoSSH简介
nginx_tcp_proxy_module的配置方法
Ubuntu的Nginx并没有将nginx_tcp_proxy_module编译进去。为了简化安装,我基于Ubuntu的Nginx包,做了Nginx的PPA:
- 升级Nginx版本
- 加入nginx_tcp_proxy_module
添加我的PPA
1 2 |
|
若未安装nginx,则
1
|
|
若已安装nginx,则
1
|
|
在/etc/nginx/nginx.conf中,增加如下内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
为了查看集群的状态,在/etc/nginx/sites-enabled/default的中,增加如下内容:
1 2 3 4 5 6 7 |
|
重启Nginx:
1
|
|
如此,访问http://<cluster IP>/status将能查看集群的详细状态。
Nginx 1.9的配置方法
Ubuntu 15.10之前的官方Nginx版本都小于1.9,须通过ppa:nginx/development升级nginx。
添加ppa:nginx/development
1 2 |
|
若未安装nginx,则
1
|
|
若已安装nginx,则
1
|
|
在/etc/nginx/nginx.conf中,增加如下内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
重启Nginx:
1
|
|
HAProxy的配置方法
安装haproxy
1
|
|
在/etc/haproxy/haproxy.cfg中,增加如下内容:
1 2 3 4 5 6 7 8 9 10 11 |
|
为了查看集群的状态,在/etc/haproxy/haproxy.cfg中,增加如下内容:
1 2 3 4 5 |
|
默认安装,haproxy处于不活动状态,须要激活它。
在/etc/default/haproxy中,修改如下行:
1
|
|
最后,启动haproxy:
1
|
|
如此,访问http://<cluster IP>:9090/haproxy?stats将能查看集群的详细状态。
总结
- nginx_tcp_proxy_module有简单的集群状态页面。
- nginx 1.9没有集群状态查页面,仅能通过错误日志/var/log/ngnix/error.log来查看掉线的集群节点。
- haproxy不仅有完善的集群状态页面,而且不需要任何PPA,应该是最佳选择。
- 上述3种方法都缺乏认证机制,只能部署于家庭或企业内网。当然也可以部署于个人电脑,事实上,我就是这样使用的。