"西厢计划"是今天听到的最振奋人心的消息, 穿越GFW这么多年, 基本上各种类型的方法都用过, 每每穿墙都有一种莫名的快感, 想着GFW同学被无数人一次又一次地虐待. 作为新世纪的有志青年, 翻墙已经成了一种必须掌握的技能. 俗话说得好, "不会翻墙的网民不是好公民." 看到这里你应该已经知道"西厢计划"到底是个什么东西了, 但它不同于以往的所有翻墙技术, 算是翻墙界的最新研究成果吧. "西厢计划"的优势在于可以用最直接的方式访问网站, 比如平时用的代理、VPN都是先到另一个地方绕一圈, 而按照作者的说法, "西厢计划"直接注入GFW系统, 这样当你访问敏感词网站时, GFW就变得像个傻子一样, 根本不会进行重置操作, 从而以最快的速度访问网站.
目前还只能在Linux系统中进行使用, 且要求内核版本大于等于2.6.17, 下面是我在Ubuntu中安装配置的全过程.
安装
到这里下载安装文件, 解压进入目录. 先安装一些依赖软件:$ sudo apt-get install autoconf automake libtool aptitude xtables-addons-common iptables-dev接下来开始编译加安装:
$ ./autogen.sh $ CFLAGS="" ./configure --prefix=/usr --libexecdir=/lib $ make $ sudo make install
配置
在安装文件的"examples"目录中有一些已经设定好的ipset
规则, 这些规则用来过滤那些特定的网络访问, 先导入所有规则:
$ sudo ipset -R < CHINA $ sudo ipset -R < GOOGLE $ sudo ipset -R < YOUTUBE $ sudo ipset -R < NOCLIP再使用
iptables
设定具体的过滤规则:
$ sudo iptables -A INPUT -p tcp --sport 80 --tcp-flags FIN,SYN,RST,ACK SYN,ACK -m state --state ESTABLISHED -m set --match-set NOCLIP src -j ZHANG -m comment --comment "client-side connection obfuscation" $ sudo iptables -A INPUT -p tcp --dport 80 --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j CUI -m set --match-set CHINA src -m comment --comment "server-side connection obfuscation" $ sudo iptables -A INPUT -p tcp --sport 80 -m state --state ESTABLISHED -m gfw -j LOG --log-level info --log-prefix "gfw: " -m comment --comment "log gfw tcp resets" $ sudo iptables -A INPUT -p udp --sport 53 -m state --state ESTABLISHED -m gfw -j DROP -m comment --comment "drop gfw dns hijacks"最后修改主DNS, 在"/etc/dhcp3/dhclient.conf"文件中找到"
prepend domain-name-servers
", 将后面的IP替换为没有被感染的DNS地址, 比如"8.8.8.8", 重启网卡:
$ sudo ifconfig eth0 down $ sudo ifconfig eth0 up
大功告成! 打开浏览器试试吧, YouTube、Blogger、Picasa、Google Groups、Google Docs的Spreadsheet这些都已是畅通无阻, 不过目前Twitter、Facebook还无法访问, 但相信"西厢计划"以后将会越来越强大.
2010.3.13更新:
以上配置在重启之后都会消失, 这就麻烦了, 总不能每次开机都先输这么一长串命令吧. 在参考了Ubuntu官方Wiki之后, 有了一个很好的解决办法.
首先确定你已经设定好了上面的所有规则, 接着将当前规则导出并放到"/etc"目录中:$ sudo ipset -S > ipset.rules $ sudo iptables-save > iptables.rules $ sudo mv ipset.rules iptables.rules /etc其实我们需要做的就是让系统在每次开机的时候自动读取这些规则, 这可以有很多种方法, 比如写成脚本, 放到rc目录中, 但我觉得下面的方法更加灵活一点. 这里又要分成两种方法, 如果你使用了NetworkManager, 请看第一种, 否则看第二种. 之所以要这样分开讨论, 是因为第二种方法会导致NetworkManager不能正常工作.
在这里下载NetworkManager的配置脚本, 加上可执行权限, 最后放到"/etc/NetworkManager/dispatcher.d"目录中.
-
在"/etc/network/interfaces"文件中添加如下几行:
auto eth0 iface eth0 inet dhcp pre-up ipset -R < /etc/ipset.rules pre-up iptables-restore < /etc/iptables.rules post-down ipset -S > /etc/ipset.rules post-down iptables-save > /etc/iptables.rules
P.S. 我终于又可以直接在Blogger里写博客了, 泪牛满面啊~~~
翻墙来顶贴啊!
ReplyDelete真是好东西!可惜我不是Linux……
小高子兄研究一下怎么移植吧!
添加facebook的IP段再找到facebook的剩余可用IP 写进host就可以访问facebook了。
ReplyDeletetwitter同理。
如果IP全都被封就没有办法了。
会被载入史册的啊
ReplyDelete@HCocoa 这个依赖Linux内核特性的...
ReplyDelete@2楼 感谢, 不过我比较懒, 就不去挨着找了.
ReplyDelete重启之后就失效了啊~~
ReplyDelete用SSH-D的来看望我们不用翻墙的哥,希望WINDOWS版本早日到来,。
ReplyDelete不行啊.按照你说的一步步做下来.但是还是无法正常使用.不知我哪一步操作有问题.测试平台ubuntu9.10 netbook remix
ReplyDelete成功!但是还不够稳定,速度也有点慢,继续关注并支持,希望越来越好!
ReplyDelete我按照步骤都做完了,ipset -L, iptable -L都显示已经添加了。
ReplyDelete但是在dhclien.conf中,“prepend ...”这行是被注释掉的。拿掉注释,改ip地址。但是没有效果。求助。请
haha 找乐个在雨林木风(基于ubuntu9.10)按照以上步骤尝试成功。多了一个推广雨林木风的卖点阿。
ReplyDelete等待高手的ebuild
ReplyDelete坚决支持,这么好的东西,一定要用,
ReplyDelete目前ubuntu9.10,准备升级10.04
应该做成DEB发布
ReplyDelete这个不叫翻墙,叫破墙
ReplyDeleteCFLAGS=... 时出现错误
ReplyDelete./configure: line 10586: syntax error near unexpected token `libxtables,'
./configure: line 10586: ` PKG_CHECK_MODULES(libxtables, xtables >= 1.4.3)'
怎么回事?
这个可以放到osx 10.6.2上面用么
ReplyDelete我是8.10的,没有xtables这个包啊!
ReplyDelete可惜……
wk......终于可以看些 财经方面的blogspot了......
ReplyDeleteWindows怎么用?
ReplyDelete@Bolo 现在还没法用.
ReplyDelete顶啊,国人也能直连youtube,偶也是泪牛满面
ReplyDelete虚拟机vb中没法安装,那位高手指点下。谢谢
ReplyDelete出现 ./configure: line 10586: syntax error near unexpected token `libxtables,' 的同学, 大概是因为那些aclocal的宏没有正确展开, 需要手动把 /usr/share/aclocal/ 里的文件copy到编译目录的m4目录里
ReplyDelete@Anony: aclocal里总共8个文件,我全部copy至了m4,但依然出现./configure: line 10586: syntax error near unexpected token `libxtables,'
ReplyDelete配置的时候显示:bash: CHINA: 没有该文件或目录
ReplyDelete那些文件是在examples下面。
@楼上 再检查一下命令是否正确, 你必须在examples目录中执行ipset命令.
ReplyDelete按照楼主所说的全部配置都有弄啊,为什么还是不能上,我用的是ubuntu 9.10
ReplyDelete@八宝 我也是啊... 这么诡异?
ReplyDelete@ero 我在debian下也遇到这个问题,可能是少装了几个包。xtables-addons得装testing里的包,直接在官网下载来装的。后来把几个相关包也打上configure就没错了。http://packages.debian.org/source/squeeze/xtables-addons
ReplyDelete也许能有点帮助。
@iceman.yu: 这个真的有点头疼,我用的是Kubuntu,到这里去下载了xtables-addons pkg:
ReplyDeletehttps://launchpad.net/ubuntu/+source/xtables-addons/1.21-1
装好之后,西厢的configure阶段就可以通过了,但make的时候说:
if [ -n "/lib/modules/2.6.31-20-generic/build" ]; then make -C /lib/modules/2.6.31-20-generic/build M=/home/Downloads/wb-001/extensions modules; fi;
make[3]: Entering directory `/usr/src/linux-headers-2.6.31-20-generic'
CC [M] /home/Downloads/wb-001/extensions/compat_xtables.o
CC [M] /home/Downloads/wb-001/extensions/xt_CUI.o
CC [M] /home/Downloads/wb-001/extensions/xt_ZHANG.o
CC [M] /home/Downloads/wb-001/extensions/xt_gfw.o
CC [M] /home/Downloads/wb-001/extensions/ipset/ipt_set.o
make[5]: *** No rule to make target `/home/Downloads/wb-001/extensions/ipset/ipt_SET.c', needed by `/home/Downloads/wb-001/extensions/ipset/ipt_SET.o'. Stop.
...
...
Ubuntu 9.04 (Jaunty) 安装西厢计划时,找不到xtables 以及 xtables-addon-common 安装包的解决方案
ReplyDeletehttp://prithak.blogspot.com/2009/10/nefilter-extensions-using-xtables.html
重点在于安装一个 >= 1.4.3 的iptables
wget -c http://ftp.netfilter.org/pub/iptables/iptables-1.4.5.tar.bz2
然后下载xtables-addons
wget -c http://nchc.dl.sourceforge.net/project/xtables-addons/Xtables-addons/1.19/xtables-addons-1.19.tar.bz2
安装好相应依赖:iptables-dev linux-source linux-headers
随后编译安装即可
输入sudo iptables -A INPUT -p tcp --sport 80 --tcp-flags FIN,SYN,RST,ACK SYN,ACK -m state --state ESTABLISHED -m set --match-set NOCLIP src -j ZHANG -m comment --comment "client-side connection obfuscation"出现
ReplyDeleteiptables v1.4.7: Couldn't load target `ZHANG':/usr/local/libexec/xtables/libipt_ZHANG.so: cannot open shared object file: No such file or directory
看了一下libipt_ZHANG.so在usr/libexec/xtables/目录,如何更改-j的target目录
@ero 翻了翻,试着按你的版本加上http://ubuntu.srt.cn/这个源。用apt-get build-dep xtables-addon-common让系统帮你把编译需要的包都装上再试试吧。
ReplyDelete同alex,我是在学校用的教育网,使用锐捷上网。dhclien.conf中,“prepend ...”这行是被注释掉的。遮盖怎么办呐,求教!
ReplyDelete@周龑 奇怪, 我根本就没有"libipt_ZHANG.so"这个文件. configure时的"--libexecdir"参数也许有用.
ReplyDelete@楼上的楼上 你们学校是必须用动态IP是吧? 改DNS不会影响的.
ReplyDelete怎么说呢,我几乎把每一个人的问题都遇到了 >_<
ReplyDelete安装的问题按照 @CNBorn 的方案可以解决 (我的版本是Karmic 9.10)
但接下来的导入和配置我遇到了和 @周龑 一样的错误输出。
但和 @周龑 有点不同的是,
这几个文件同时也不存在于 /usr/libexec/xtables/ 当中。
@ero 我也是9.10, 怎么会有这么多问题...?
ReplyDelete@小高子: 嗯, 运气很是不好。 能给出点建设性的帮助么?
ReplyDelete@ero 应该是没有安装成功, 我安装好之后那些so都放在"/lib/xtables"下, 有三个文件: libxt_gfw.so, libxt_ZHANG.so, libxt_CUI.so
ReplyDelete你安装时configure的参数是什么?
@小高子:其实我输入的所有命令和该博文中提到的是一样的。
ReplyDelete另外,我在root下find了‘*ZHANG*so’,只有一个结果: /usr/libexec/xtables/libxt_ZHANG.so
@小高子:其实我输入的所有命令和该博文中提到的是一样的。
ReplyDelete另外,我在root下find了‘*ZHANG*so’,只有一个结果: /usr/libexec/xtables/libxt_ZHANG.so
:(
@ero 我想到几种方法, 不过没有试验过:
ReplyDelete1. configure时不用"--libexecdir", 用"--with-xtlibdir=/usr/local/libexec/xtables", 这样也许so会放到指定目录里.
2. 你应该是手动编译安装的xtables-addons吧? 你可以试试把安装目录改一下. 像我是从源安装的xtables-addons-common包 (9.10的源没有xtables-addons, 不过貌似也不需要), 所有so都默认放在了/lib/xtables里.
3. 手动修改西厢计划安装文件的Makefile, 在其中找到"libexecdir=XXX", 把后面的XXX改成你想要的目录.
4. 实在还是不行, 就cp或者ln到指定目录, 让程序运行的时候能找到就行了...
暂时想到这些, 如果还是不行, 你可以试试联系作者.
我在虚拟机里调试的,但不正常。主要是最后一步DNS不知道怎么设?
ReplyDelete按我想我的虚拟机和宿主机是用NAT连的,虚拟机的DNS不是应该用宿主机的吗?我宿主机的DNS是8.8.8.8,那应该就不用设了。试一下,不成功。
而我去设虚拟机的DNS时,那个文件里的prepend domain-name-servers是被注释掉的,系统压根不用啊,我改了干吗,肯定无用的。
大致如下:
send host-name "";
#send dhcp-client-identifier 1:0:a0:24:ab:fb:9c;
#send dhcp-lease-time 3600;
#supersede domain-name "fugue.com home.vix.com";
#prepend domain-name-servers 127.0.0.1;
@T 把注释符号去掉就行了, 一般来说这行都是被注释了的, 去掉注释不会影响虚拟机的正常运行.
ReplyDelete@小高子:我把xtables-addons 用aptitude重装为1.17版,于是所有问题都解决了。
ReplyDelete不过重启网卡(我的是eth1)后,无法进行DNS解析了,所有网页均返回Unknown Host
【我用的是Vbox虚拟机,prepend domain-name-server同样是被注释掉的,应该不用改吧?】
我的 dhclient.conf 文件:
option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;
send host-name "";
#send dhcp-client-identifier 1:0:a0:24:ab:fb:9c;
#send dhcp-lease-time 3600;
#supersede domain-name "fugue.com home.vix.com";
#prepend domain-name-servers 127.0.0.1;
request subnet-mask, broadcast-address, time-offset, routers,
domain-name, domain-name-servers, domain-search, host-name,
netbios-name-servers, netbios-scope, interface-mtu,
rfc3442-classless-static-routes, ntp-servers;
#require subnet-mask, domain-name-servers;
#timeout 60;
#retry 60;
#reboot 10;
#select-timeout 5;
#initial-interval 2;
#script "/etc/dhcp3/dhclient-script";
#media "-link0 -link1 -link2", "link0 link1";
#reject 192.33.137.209;
#alias {
# interface "eth0";
# fixed-address 192.5.5.213;
# option subnet-mask 255.255.255.255;
#}
#lease {
# interface "eth0";
# fixed-address 192.33.137.200;
# medium "link0 link1";
# option host-name "andare.swiftmedia.com";
# option subnet-mask 255.255.255.0;
# option broadcast-address 192.33.137.255;
# option routers 192.33.137.250;
# option domain-name-servers 127.0.0.1;
# renew 2 2000/1/12 00:00:01;
# rebind 2 2000/1/12 00:00:01;
# expire 2 2000/1/12 00:00:01;
#}
@ero 去掉注释把DNS改下.
ReplyDelete@小高子:还是不行。
ReplyDelete@ero 你试试"ping 8.8.8.8", 如果可以的话, 应该还是DNS问题.
ReplyDelete@小高子:
ReplyDeleteping 8.8.8.8
connect: Network is unreachable
@ero ...这已经不是DNS问题了, 看来是你的网络有问题. 你再试下ping你的主机.
ReplyDelete@在Vbox环境下应该不需要重启网卡吧? 因为不用更改DNS,用ifconfig可以查看当前DNS server确为8.8.8.8
ReplyDelete如果直接尝试浏览youtube,则毫无反应,syslog也没有任何输出。难道iptables没有被启用?
@ero 先在虚拟机里ping主机, 能ping通之后, 再ping外网IP, 比如8.8.8.8, 最后ping域名, 比如g.cn, 以上测试都通过之后应该就解决了. 关于iptables你可以用"sudo iptables -L"查看设置是否成功.
ReplyDelete@小高子:
ReplyDelete安装没有问题,网络也没有问题(不重启网卡),iptables也启用了。估计和NAT有关。
google code上的项目主页上也有人发现该软件在NAT下无法正常工作,原因是某些NAT的实现不遵循RFC。:(
估计要改iptables的配置,这个我就不会了。
@ero 哦, 那就麻烦了, "sudo iptables -t nat -L"倒是可以看NAT设置, 不过你的情况我也不是很了解, :(
ReplyDelete@小高子:最奇怪的是连被gfw重置的log也看不到。我在怀疑该软件的运行状态。
ReplyDelete不知是不是找到问题了,
ReplyDelete用iptables -t nat -L的结果是:
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
说明没有启用西厢模块。
直接调用iptables -L的结果则为:
Chain INPUT (policy ACCEPT)
target prot opt source destination
ZHANG tcp -- anywhere anywhere tcp spt:www flags:FIN,SYN,RST,ACK/SYN,ACK state ESTABLISHED match-set NOCLIP src /* client-side connection obfuscation */
CUI tcp -- anywhere anywhere tcp dpt:www flags:FIN,SYN,RST,ACK/SYN state NEW match-set CHINA src /* server-side connection obfuscation */
LOG tcp -- anywhere anywhere tcp spt:www state ESTABLISHED gfw /* log gfw tcp resets */ LOG level info prefix `gfw: '
DROP udp -- anywhere anywhere udp spt:domain state ESTABLISHED gfw /* drop gfw dns hijacks */
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
@ero 首先是保证你能通过虚拟机访问Internet, 如果这条都不能满足的话, 连GFW的面都见不到.
ReplyDelete至于"iptables -t nat -L"显示的信息, 这个跟西厢没有联系的, 西厢不涉及NAT的配置. NAT只是跟你的虚拟机上网有关.
9.10无法安装,我把出问题的地方发到这里,麻烦 @小高子 去看看http://picasaweb.google.com/miarts/XIXIANGJIHUA# 谢谢了!
ReplyDelete@小高子:还是多谢关心,除了最开始的一点麻烦以外,我的回答是基于我的虚拟机能够访问internet的事实说的。具体来说,虚拟机目前的状态跟没装西厢一个样。
ReplyDelete@miarts 我已经把解决方法写到你的相册里了: http://picasaweb.google.com/miarts/XIXIANGJIHUA#5450770786640658962
ReplyDelete@ero 你试试分别在打开西厢和关闭的情况下ping外网
ReplyDelete@结果没有区别。
ReplyDelete@ero 那是什么结果? 都不能ping通外网?
ReplyDelete@都能.
ReplyDelete可以上网,但不能访问Youtube等GFW网站。最要命的是,syslog并没有记录GFW重置的消息,之前这句还是被正确执行了的:
sudo iptables -A INPUT -p tcp --sport 80 -m state --state ESTABLISHED -m gfw -j LOG --log-level info --log-prefix "gfw: " -m comment --comment "log gfw tcp resets"
同是SSH-D翻墙来顶帖.....期待win版尽快出现..
ReplyDeletebtw: mac 下可以玩么?可以的话回家可试试。
还要一条aptitude build-dep xtables-addons-common生成依赖文件,安装包里的INSTALL比较详细.
ReplyDelete本人的显卡比较杯具不支持Linux,所以只能装在VM里试,如果用路由拨号的话,会把那条伪装请求过滤掉,使浏览器假死.如果直接ADSL拨号的话,就没有问题了.YTB可上,连FACE都神奇地能上了,只有推依然杯具...
另外,VM里用的是默认输入法,打得好累啊...