搜索此博客

2014年11月16日星期日

Shadowsocks+ChinaDNS实现OpenWRT路由器自动翻墙

本教程基于aa65535的shadowsocks-spec for openwrt,介绍了如何在OpenWRT下配置自动翻墙,新版本支持在Luci下图形化配置,大大简化了配置过程。配置完成后,路由器本身获得自动翻 墙能力,所有连入该路由的设备都可无障碍访问被墙的站点。
方案根据IP判断是否代理,国内IP不代理,国外IP走代理。代理通过shadowsocks所带ss-redir做TCP转发实现,分国内外IP 通过国内IP段列表文件chnroute来区别,并通过iptables规则分别处理(这些功能已经全部集成到shadowsocks-spec里了无需 额外配置)。由于是基于IP的判定,故需要解决DNS污染的问题,故搭配使用ChinaDNS来解决。
本教程主要涉及到以下开源项目:
https://github.com/aa65535/openwrt-shadowsocks
https://github.com/aa65535/openwrt-chinadns
https://github.com/aa65535/openwrt-dist-luci
https://github.com/madeye/shadowsocks-libev

一、安装
先安装必要的包,确保路由器联网,先更新软件包列表:
下载更新完成后,如果要用polarssl版本的shadowsocks:
如果要用普通版本(openssl)的shadowsocks,那么:
期间可能会遇到类似以下的错误提示:
没关系,这时因为安装ipset包后需要重启,我们此时先重启一次路由器。
然后下载下面四个包,前两个ipk包需要根据自己CPU型号选择,shadowsocks有openssl(文件名是shadowsocks- libev-spec-X.XX.ipk)和polarssl(文件名是shadowsocks-libev-spec-polarssl- X.XX.ipk)两个版本选择,ROM空间吃紧的就选择后者吧:
shadowsocks-spec: http://sourceforge.net/projects/openwrt-dist/files/shadowsocks-libev/
chinadns-c-openwrt: http://sourceforge.net/projects/openwrt-dist/files/chinadns-c/
luci-app-shadowsocks: http://sourceforge.net/projects/openwrt-dist/files/luci-app/shadowsocks-spec/
luci-app-chinadns-c: http://sourceforge.net/projects/openwrt-dist/files/luci-app/chinadns-c/
接着将下载的包通过winscp之类的sftp工具上传至路由器的/tmp目录。
接着安装shadowsocks和chinadns:
二、配置
我们登陆Luci,指向“服务”,此时应该能够看到shadowsocks和chinadns了。
点击shadowsocks,取消勾选“使用配置文件”,这样,新的选项就出来了,我们把服务器信息填进去,然后先把下面UDP转发功能关闭,然后保存并应用。设置里面不要留空!本地灰色的字体只是提示可填的值,此版本依然还要手动填入!

当然,你也可以继续使用config.json进行配置,格式如下:

最后记得在Luci里面填写配置文件位置(再次提醒,灰色的不代表能够留空,依然要填入!):
config
shadowsocks设置完毕,然后看一下ChinaDNS
1
做出说明:
1、虚假IP列表:是GFW常见的DNS污染用IP列表,解析出列表中的IP结果时候,ChinaDNS会自动抛弃,保留默认即可
2、Chnroute文件:此文件标识哪些IP属于国内。用于ChinaDNS判断解析结果。ChinaDNS要求解析结果与DNS要匹配,国内网站采用国内DNS解析的结果,国外网站采用国外DNS解析结果,等等规则
3、本地端口:ChinaDNS所监听的端口。根据实际情况更改,注意不能和其他服务的端口重复(特别是dnsmasq和shadowsocks)
4、上游服务器:可填入一系列的上游DNS服务器,根据实际情况来,可以保留默认,注意逗号后面不能有空格。
然后,在Luci中切换至“网络”-“DHCP/DNS”设置,如下图,在DNS服务器中填入127.0.0.1#5353
3
其中,5353是ChinaDNS的端口,如果你在之前设置界面里改了,这里记得别填错。
然后切到HOSTS和解析文件选项卡,勾中“忽略解析文件”
4
接下来的步骤会有区别,通过ChinaDNS进行防DNS污染及解析结果优化,方案有三,对于shadowsocks是用自己服务器搭建的,推荐方案一,在自己服务器上搭建DNS服务;如果没有这个条件,但服务器支持UDP转发,那么推荐方案二;这两种方案,DNS查询的发起者相当于代理服务器,获得的解析结果都是就近于代理服务器的。
如果服务器不支持UDP转发,且无法搭建DNS服务,那么可用方案三(此方案无法做到国外网站解析结果优化 因为获得的IP是就近于你的位置的)。
方案一(点此切至方案二 点此切至方案三):
在shadowsocks服务器上搭建DNS服务来解析国外网站,可用dnsmasq,监听非53端口(具体步骤本文不再详述)。
比如说服务器IP是:3.4.5.6,dns服务端口是5050,那么,把ChinaDNS的上游服务器更改为:
114.114.114.114,3.4.5.6:5050
最后,切到shadowsocks的设置页面里面,把UDP转发关掉并保存:
2
保存并应用,确认shadowsocks和chinadns都显示已启动后,Enjoy~,have a try~
方案二(点此回到方案一 点此切至方案三):
使用shadowsocks代理DNS请求。首先开启shadowsocks的DNS转发,并更改一下端口(为了不和ChinaDNS冲突),比如 改成5151,你也可以选择改chinadns端口而不更改这个,转发地址留默认的GoogleDNS即可,你也可以自行更改。格式是“IP:端口”
5
然后配置ChinaDNS的上游DNS服务器为: 114.114.114.114,127.0.0.1:5151
保存并应用,确认shadowsocks和chinadns都显示已启动后,Enjoy~
方案三(点此回到方案一 点此回到方案二
切换到shadowsocks页面,关闭UDP转发:
2
切换至ChinaDNS界面,填入上游服务器地址,可以保留默认的114.114.114.114,8.8.4.4
保存并应用,确认shadowsocks和chinadns都显示已启动后,Enjoy~Enjoy~


PS1:chnroute需要定期更新,可以使用下面的命令(需要libcurl和curl两个包):
当然你也可以重新下载新版的shadowsocks重新安装。
PS2:本篇文章刚发出来,未免会有疏漏,本人会逐渐完善,出现问题请留言,欢迎订阅回复提醒邮件。(http://cokebar.info/archives/664)

没有评论:

发表评论