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,自由软件)

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

2012年10月26日星期五

如何清算前朝?

有相当一部分人坚持在未来建立新中国的时候,要清算前朝官员。既然新中国做一个民主国家,要宪政,要依法治国,那么清算时便需要有法律依据。另一方面,如果在旧社会政权覆灭后,新中国建立前来清算,没有法律依据,不免人人自危,有重新进入极权暴政之可能。又,我倾向于认为法律不应具有前溯性,即在一项法律生效前的行为不应被该法制裁。

所以,我想出的一个方法是,新中国成立后,宪法规定法律不得向前追溯,但国会可决定是否接纳前朝某些法律条款,被接纳的法律条款继续有效。意思是,这条法律,既是前朝的法律又是当朝的法律,在前朝的违法事项在当朝也可追究。例如官员受贿行贿、食品安全中的渎职行为、选举舞弊、尸检中的作假、监狱中的非人道待遇等,都可以追究。

2012年9月14日星期五

重庆被拧车轮螺丝系造谣系造谣

造谣帖在此:http://luo.bo/30942/ http://www.whyno.info/?p=70342


该贴目的为辟谣,但其本身却是造谣,即“重庆被拧车轮螺丝”不一定是假的。(注意,我不是说他绝对是真的)

该造谣暨辟谣帖提供4点证据。

  1. 发贴人是修车行员工,见他资料
  2. 照片红圈生锈分离车轮毂定是报废车
  3. 一个螺丝未拔出毂盖却不见了 via@生中初女
  4. 重庆网警:经查,@重庆莫若 可能系二手车、汽修行业相关人员,且被举报图片所展示之车轮刹车盘片已严重锈蚀、裂痕明显,车况极差,可证明该车短期内无行驶迹象,故不存在“9月13日停沙坪坝”的可能,其言论构成“发布不实信息”。

我一一剖析为何这辟谣帖反而成了造谣帖。

第一点证据属背景信息,不讨论。

第二点,没有证据表明有生锈分离车轮毂特征的一定是报废车即使是该报废的车,博主仍然可以开此车。

第三点, 生中初女没有说明毂盖于螺丝的关系,造谣必须先拔螺丝后拔毂盖。

第四点, 轮胎只是汽车的一部分,即使轮胎真的严重锈蚀、裂痕明显,也不一定说明车况极差。人家可能发动机保养得很好。即使车况极差,也不能证明该车不能行驶。重庆可以调取交通录像,看看该车到底近几天有没有行驶过。即使该车真的没行驶过,也不表示该车不能停在沙坪坝。可能该车开到沙坪坝时坏的不行了,在那里停了一个月。由此,“不存在‘9月13日停沙坪坝’的可能”为不实信息。

最后,即使我的上述论证均不成立,此造谣暨辟谣帖仍然不实。它声称“重庆被拧车轮螺丝系造谣”。明眼人可以从图片上明显地看到,6个洞,只有1个洞有螺丝,另外5个洞是空的。所以,可以相信这5个洞上的螺丝确实被拧去了。除非该车制造商证实该车该轮子是有5个装饰用的洞。

另可参考楼主自行辟谣帖:http://weiba.weibo.com/10015/t/yBP6Rhl3u

Google App Engine搭建Twitter API Proxy教程

本文将介绍如何通过Google App Engine搭建基于Python 2.5的BirdNest环境,建好的BirdNest可以在TwitterFox或twhirl中使用。

环境准备:Google App Engine


先要注册Google App Engine,注册地址 http://appengine.google.com/,然后建立一个application,目前第一次使用需要验证用户手机,输入手机号码就收验证码即可,之后,就可以用yourid.appspot.com来访问你的app应用。

此外,还需要下载安装Google APP Engine的开发环境,注意Python的版本,需要是2.5系列的,不能使用2.6或更高的版本,否则运行会出错。

Google App Engine SDK 下载地址 http://code.google.com/intl/zh-CN/appengine/downloads.html

Python 2.5.4 下载地址 http://www.python.org/download/releases/2.5.4/

关于Google App Engine的详细使用说明请参见这个地址,这里我就不再累赘。

环境准备:BirdNest


下载birdnest要注意是下载分支branches/gae,别下载主干trunk,否则更新到GAE上也不能用,会报错。可以使用一个SVN工具下载。例如TortoiseSVN等。将其放到一个目录中,进入目录,编辑app.yaml文件,将第一行的application里的参数修改为自己的应用名。

发布应用到GAE


准备好了上面的一切后,就可以发布这个应用到自己的Appspot上了,执行 appcfg.py update 目录名,中间会要求输入Gmail的用户名和密码,之后就可以使用了。你创建的API地址应该是yourid.appspot.com/api/ 。

使用BirdNest


在twhirl里的使用方法是,打开账号管理Accounts manager,选择laconi.ca账户类型,输入:[你的twitter帐号名]@yourid.appspot.com,密码为Twitter密码,即可使用。

在twitterfox里的使用方法是,打开 C:\Documents and Settings\Administrator\Application Data\Mozilla\Firefox\Profiles\ 随机信息 .default\extensions\twitternotifier@naan.net\components目录,编辑nsTwitterFox.js文件,找不到的话直接在Documents and Settings中搜索nsTwitterFox.js文件,编辑该文件的38行,将其修改为 var TWITTER_API_URL = http://yourid.appspot.com/api/ 即可。

本文来自月光博客(http://www.williamlong.info/archives/1956.html),但被北京当局删除。