2012年12月28日星期五

负载均衡翻墙详细篇

本文承接前篇文章《翻墙需求分析与工具组合》,将会教你如何使用多个翻墙软件来翻墙,并自动选择一个最快的软件来翻。先上架构图。



矩形左下角的数字是该软件用的端口号。可以看到,通过HAProxy和Privoxy,火狐可以使用goagent、自由门、ssh、tor来翻墙,并且会自动选择最快的一个来翻。

注意,这并不同于单纯使用autoproxy,添加多个代理服务器。autoproxy可以让你设置规则,对符合某一规则模式的网址使用一个代理服务器。而我的负载均衡方案可以对符合某一规则模式的网址使用一组代理服务器中最快的一个

当然了,本方案还是要使用autoproxy或同类软件,设置规则让需要翻墙的网址使用127.0.0.1:1111(http),之后选择哪一个翻墙代理的事情,HAProxy会帮我完成。

由于基本socks5的SSH被Privoxy转为HTTP,速度损失了,具体有多少我还不清楚,所以goagent的速度竟然是ssh的一倍多不到两倍,我的ssh还是付费服务呢,真是有点震惊。


HAProxy配置文件:haproxy.cfg

本配置文件是基于HAProxy 1.4.24版,需要其较新的配置选项,所以老版本的HAProxy可能无法运行。1.4.24 Windows版可以从《在Windows里安装运行HAProxy【cygwin法】》的文末获得。


global
log 127.0.0.1 local0
#log 127.0.0.1 local1 notice
#log loghost local0 info
maxconn 1500
chroot B:\haproxy #!!!需要修改为您自己的路径!!!
uid haproxy
gid haproxy

daemon
#nbproc 2
pidfile B:\haproxy\haproxy.pid #!!!需要修改为您自己的路径!!!
#debug
#quiet

defaults
#mode http
#option dontlognull
#option forwardfor
option redispatch
retries 2
balance static-rr
stats enable
stats uri /ha?stats #haproxy运行状态查看 自定义uri
timeout connect 3000
timeout client 50000
timeout server 50000

listen ha-tcp 127.0.0.1:9999
mode tcp #浏览器设置为socks5,ssh也是socks
#balance static-rr
option tcplog
server ssh 127.0.0.1:7070 weight 3 check inter 30000
#server tor 127.0.0.1:9050 weight 3 #check inter 10000
#server privxy-tor 127.0.0.1:10000 weight 3 #check inter 10000

listen ha-http 127.0.0.1:11111 #127.0.0.1:11111
mode http #浏览器设置为socks5,ssh也是socks
option httplog
#balance static-rr
server freegate 127.0.0.1:8580 weight 2 check inter 30000
server goagdent 127.0.0.1:8087 weight 3 check inter 30000
server privoxy-ha-tcp 127.0.0.1:8090 weight 3 #check inter 60000
#server wujie 127.0.0.1:9666 weight 2 check inter 30000


listen admin_stat
# 监听端口
bind *:8011
# http的7层模式
mode http
#log global
# 统计页面自动刷新时间
stats refresh 30s
# 统计页面URL
stats uri /admin?stats
# 统计页面密码框上提示文本
stats realm Haproxy\ Statistics
# 统计页面用户名和密码设置
stats auth admin:admin
# 隐藏统计页面上HAProxy的版本信息
#stats hide-version


Privoxy配置文件: Privoxy-ha.txt


user-manual ./doc/user-manual/
confdir .
logdir .
actionsfile match-all.action # Actions that are applied to all sites and maybe overruled later on.
actionsfile default.action # Main actions file
actionsfile user.action # User customizations
filterfile default.filter
filterfile user.filter # User customizations
logfile privoxy.log
listen-address 127.0.0.1:8090 #这句是重点
toggle 1
enable-remote-toggle 0
enable-remote-http-toggle 0
enable-edit-actions 0
enforce-blocks 0
buffer-limit 4096
forward-socks5 / 127.0.0.1:9999 . #这句是重点
forwarded-connect-retries 0
accept-intercepted-requests 0
allow-cgi-request-crunching 0
split-large-forms 0
keep-alive-timeout 5
socket-timeout 300

2012年12月12日星期三

翻墙需求分析与工具组合

需求

  1. 最起码要能翻嘛!
  2. 智能判断一个网站要不要翻
    1. 按规则
    2. 按实际情况:先直连,直连不同才翻——测试法
  3. 负载均衡: 多个翻墙软件,选最快的一个上
  4. 缓存网页
  5. 分享服务:让局域网的用户或更大范围的用户能通过我的服务上

工具

由于翻墙界的重要成员——自由门只能在windows下运行(在Linux下无法运行或非常不稳定或翻墙能力大大减弱),所以本文的软件基本都倾向于使用windows里可用的软件。

需求1:可以用自由门、无界、gae、tor、ssh、vpn等等。

自由门、无界、gae、tor、ssh组合能力较强,可以和其他软件配合;vpn较差。

需求2:这一般是在浏览器或浏览器插件端实现的。

需求2.1:静态规则比较简单, 可以用pac文件(用javascript写规则),几乎所有浏览器都原生支持。也可以用浏览器插件定义规则,例如火狐的autoproxy、FoxyProxy Standard。

功夫网千变万化,规则需要更新。更新文件的方法太多了,本文不讨论了。

需求2.2:wallproxy疑似有这个功能,但他只能用gae翻墙,没有组合能力。

需求3:当然就是负载均衡软件了。

HaProxy虽出自linux,但因为是开源的,所以可以编译成windows版本。jiedushi提供了一个1.3.20版的windows程序。《在Windows里安装运行HAProxy【cygwin法】》解释了在Windows下编译HAProxy的方法,文末也附带有编译好的1.4.24版Windows程序。

但是要注意,翻墙工具(代理服务器)所用的协议有三类:http、socks4、socks5。socks4的比较少了,用http的比较多,如自由门;socks5比如ssh和tor。


不同协议的翻墙软件很难换着用。HaProxy可以把使用相同协议的翻墙软件编为一组,共同来服务一个请求;但是不能把tor和自由门编为一组。

listen fq 127.0.0.1:9999
mode http
balance roundrobin 
server telex 127.0.0.1:8888  weight 3 check inter 10000
server toonel 127.0.0.1:8080  weight 3 check inter 10000

此片段令HaProxy把127.0.0.1:9999收到的请求交给telex和toonel中的一个,协议是http。

人们通常会用自由门之类的免费软件,也可能买了ssh,两者分属不同的组,还是有点不舒服。socket属于底层,http属于应用层,Privoxy可以把http请求转为Socks请求。(其他软件可能也可以,比如CCProxy。它安装文件4.4M可试用;Privoxy500kb,自由软件)

有多个翻墙软件,想要对它们负载均衡,请参见《负载均衡翻墙详细篇》。