Posted in Technology 9次吐槽

这些天看了不少乱七八糟的文章,也自己动手试制了一下,前后刷了三台不同型号的路由器,从最差的TPLINK到NETGEAR,还有网上买来的洋垃圾,感觉自制一台基于openwrt平台的,具备自动分流能力的路由器门槛已经很低,在参考了很多教程后,我也打算写一篇,供大家参考。

 

在中国生活的人,不可避免要用到科学上网,目前比较各种科学上网方式的优劣,不考虑安全性的前提下:

翻墙软件:门槛低、易部署;维护费力,多台设备需要频繁维护升级。

VPN:门槛低、易部署;影响中国服务的速度,甚至引起部分中国服务的报警和拒绝。需要频繁开关。

PAC:门槛低、易部署;云端统一分发,需要维护黑名单。不支持HTTP之外的协议。

翻墙路由器:技术难度大、需要硬件投入,部署调试困难。一旦设置后可自动运行,任何内网设备透明使用,适合家庭和中小型企业使用,支持所有TCP协议(包括XBOX\PS4等)

 

因此,在比较讲究生活品质的家庭或高逼格科技公司,翻墙路由器是最佳选择。但市面上翻墙路由器价格高、服务无保障,一旦商家跑路、查封,几百元上千元的翻墙路由器就沦为废铁。(这里我要讲一下亲身经历,600买了一个某创业公司老总弄的翻墙设备,openvpn方案,后被封,公司无后续动作,最终只能被我自己刷了)

 

下面我就说一下基于openwrt平台上的shadowsocks+chinadns自动分流方案。

 

一、设备选择和系统安装

设备应选用支持openwrt 的路由器,安装系统后剩余内存不能少于8M,推荐买32M储存器的。我用过较差的TPLINK,也用过较好的NETGEAR。这里我用一台NETGEAR WNDR 3800 双频千兆路由器做演示。

固件应选择2014年以后的固件,选用相应的版本。

关于刷入固件的问题,我这里不讲如何刷openwrt系统,这方面资料在网上很多。注意固件应选择和自己设备相同的,第一次刷机应用factory,第二次用sysupgrade即可。

如果你不会刷系统,又想买一台新设备,可以直接在网上买”openwrt”设备,并让老板给你安装好相应的软件。这方面有很多专门的商户经销。

openwrt

*虽然openwrt系统不是专门用来翻墙的……

 

 

 

二、系统组成

1,shadowsocks客户端

shadowsocks是一款由@clowwindy开发的先进的,无状态的TCP代理工具。在通常情况下,shadowsocks具备无状态、无特征的特性,可有效对抗深度包检测。此外,可自定义多个安全方式,并适用于全平台,包括路由器软件。

在这个case里,shadowsocks负责将流量转发到代理服务器实现翻墙。

2,chinadns

由于DNS污染,光有shadowsocks不能正确完成所有的动作。chinadns采用双DNS解析匹配技术,过滤污染DNS结果,并负责区分中国和国际流量,将国际流量转交给shadowsocks代理,其余流量从系统默认网关发出。

使用chinadns可以抗dns污染并实现流量的分流。

3,shadowsocks服务器

shadowsocks服务器安装在自由世界,负责代理来自中国的访问。架设一台自己的shadowsocks服务器不难,但需要一定的技术门槛。

如果你没有能力安装自己的服务器,可以购买各类商业服务。这里我不做广告,总之价格一般人都可以接受。

购买服务器后,需要取得供应商提供的一组参数作为登陆凭据,如:

Your Server IP:123.123.123.123  服务器地址
Your Server Port:8964           服务器端口
Your Password:your_password     登陆密码
Your Local IP:127.0.0.1         本地ip
Your Local Port:1080            本地端口
Your Encryption Method:aes-256-cfb 安全方法

另外有的服务商还会有个超时时间,以秒为单位,一般可以设置为10秒。请记录这组凭据,一会配置需要用到。

 

注意,如果服务商给你的地址是一个网址,如usa.proxy.com之类的,请自己转换为ip地址使用。转换方法是进入ip138.com,查询这个地址对应的ip地址,得到123.123.123.123这样的地址来使用。

 

三、配置openwrt路由器系统

假设你不会配置openwrt路由器,从淘宝买回来刷好的机,第一次使用需要配置。新刷的系统很多功能都不具备,需要人工打开才能上网。

把路由器的WAN口(外网)插在你目前路由器的内网口上,并用网线连接计算机和openwrt路由器的内网口。

浏览器中输入192.168.1.1 登陆,用户和密码默认都是root。

1-1

 

登录后请修改密码,才能打开SSH和SCP管理界面。

1-2

 

修改密码后,还要打开无线网络、配置上网方式。如果你打算用它来拨号上网,还需要设置上网方式为PPPOE。

具体的设置和一台普通的路由器没有区别,只是比较复杂,请参考这篇文章进行。如果你会这一点请略过。

 

注意,一旦设置为翻墙分流后,所有国际流量都会通过代理。如果你的流量有限或者需要直接连接,我建议把openwrt路由挂在普通路由器的下一级,这样方便必要时切换回正常网络,而不影响配置和使用。

 

四、翻墙软件的安装

当你把openwrt配置好后,它应该已经是一台普通的路由器了,具有所有的正常功能。正常上网测试无问题后,就可以开始安装相应的软件了。我这里不建议用opkg install 方式安装,容易出现各种问题。我下面说说主动安装。

1,确定设备固件型号

进入控制台,在设备状态可以看到设备的芯片类型。

1-3

 

比如我的设备CPU型号是:Atheros AR7161 rev 2  对应的安装包是ar71xx系列的。

 

接下来根据你设备的CPU选择对应的安装包,请按照以下链接下载两套软件,共4个包,分别是shadowsocks,chinadns和他们的控制台。

软件:

shadowsocks-spec: http://sourceforge.net/projects/openwrt-dist/files/shadowsocks-libev/
chinadns-openwrt: http://sourceforge.net/projects/openwrt-dist/files/chinadns/

控制界面:

luci-app-shadowsocks: http://sourceforge.net/projects/openwrt-dist/files/luci-app/shadowsocks-spec/

luci-app-chinadns: http://sourceforge.net/projects/openwrt-dist/files/luci-app/chinadns/

 

下载后保存,一共是4个ipk文件。

×如果商家已经给你装好了shadowsocks可以不用再装。但是如果商家给你装的软件里有chinadns-c,请删除。因为DNS污染已经升级,chinadns-c不能再发挥作用,必须替换为chinadns。这两者不是同一个软件。

 

删除软件包的方法是在控制界面里选择软件包,点击chinadns-c 删除。

 

2,安装

先下载软件winscp, putty

通过winscp,以SCP协议连接路由器,使用root账号和管理密码,上传安装包到路由器的/tmp上。

*本来我不想写的,但是很多人可能还不会,我再写一下:

scp

 

打开WINSCP,协议选择Scp,目标地址192.168.1.1,用户名root,密码是刚才设置的管理密码。

 

upload

 

在路由器中(右侧)找到/tmp目录,把所需的文件拖过去。

 

通过putty,以SSH协议连接路由器

putty

 

一样是连接192.168.1.1。

输入用户名root,密码同上,注意密码是不会显示出来的。

root

 

登陆成功后输入命令进行安装。

opkg

 

cd /tmp

opkg install 文件全名.ipk (先装软件,再装控制台,不然装不了)

比如:

cd /tmp

opkg install shadowsocks-libev-spec_x.x.x-x_ar71xx.ipk
opkg install ChinaDNS_x.x.x-x_ar71xx.ipk
opkg install luci-app-chinadns_x.x.x-x_all.ipk
opkg install luci-app-shadowsocks-spec_x.x.x-x_all.ipk

安装完成后会自动设置为开机启动,如果没有,可以通过检查启动项人为添加启动。

*注意 文件包的名称必须完全准确。

 

五、配置代理软件

当看到路由器控制台中出现shadowsocks和chinadns的设置页面时,安装就成功了。接下来要做一系列配置。

1,chinadns

chinadns负责过滤污染结果,并负责分发中国和国际的流量。

打开chinadns的设置页面:

1-4

 

默认为未启用,选择启用。

本地端口:本地端口是路由器系统获取DNS的端口。(没启用的话,路由器将使用默认的DNS)

不能和其他程序冲突,可以任意设置,设置后请牢记。

国内路由表表明了中国的地址范围。这个可能会有变化,后续需要一定程度的维护,具体方法:http://cokebar.info/archives/850

这个通常不需要动。

上游服务器:

理解chinadns就要充分理解上游服务器的概念。作者天才啊!chinadns采用两组dns服务器,第一个是中国,第二个是国际。每次查询时同时查询。当所得结果为中国地址时,丢弃来自于国际服务器的答案,以便充分利用中国的CDN系统。当查询结果为国际地址时,丢弃中国服务器的答案,以便排除来自于中国的干扰。

这里我建议使用阿里DNS 223.5.5.5 或223.6.6.6 作为中国DNS服务器,理由是防止淘宝CDN错把你当作国际友人,结果被扔到全球站去。

国际DNS的情况就比较复杂了,要防污染,又要速度快,有多种不同的方案

通常代理DNS需要更进一步的设置,或者需要shadowsocks具备UDP转发的功能。如果没有能力用pdnsd或者udp转发,也可以使用延迟时间,延迟0.3秒过滤污染包。

我这里采用了非标准端口的方式,将国际DNS的端口号改为非53端口。

于是设置就是 223.5.5.5,国际DNS地址:5353

*支持非标准端口的国际DNS服务器不多,请自己找,低调。非53端口不会被防火墙过滤,目前。

双向过滤启用

延迟时间 0

 

设置完毕后保存并应用,看到chinadns的状态为启动后OK。

 

2,shadowsocks

打开shadowsocks的管理页面,勾选启用。

SS-LOCAL 不用打开

其他项目按照上面的参数依次填写。注意服务器地址最好写IP地址,而不是网址。

每一项目都必须和你服务商提供给你的一一对应。

超时时间可以设置为10秒。

最后不要启用UDP转发,设置完毕后保存和应用,看到shadowsocks状态为启用后OK。

 

3,设置路由器

此时,路由器上的两个软件均已工作,但还不能科学上网。打开路由器的DNS设置,选择DNS为本地地址#CHINADNS端口。

即127.0.0.1#XXXX

1-5

 

注意这里要用#,而不是冒号。

 

接下来选择”HOSTS和解析文件“

1-6

 

选择忽略解析文件、忽略HOSTS文件

 

保存并应用。

 

六、测试

以上配置完成后,路由器已经具有翻墙能力。下面进行测试:

1,关闭电脑上所有翻墙软件,将电脑的IP地址\DNS地址均设置为自动,连入openwrt路由器的网络。

2,访问www.whatismyip.com 确定是外国地址

3,访问www.ip138.com 确定是中国地址

4,访问其他被封网站,确定可以打开

以上条件均满足时,路由器设置成功。此时,所有中国之外的网站将全部通过代理。

接下来可以关闭电源,重启动后测试,看能否自动重启两个服务。

 

*查错和维护:

有经验的用户可以自行查错和维护。

查错:

不能上网、打不开中国网站,打不开任何网站:

1,首先确保路由器可以正常上网,在设置代理之前,先访问一些中国网站测试各项功能是否正常。

2,如果中国网站都不能上,可能存在网络问题,或是硬件问题。

不能访问任何国际网站,可以访问中国网站:

1,首先访问www.whatismyip.com,确定外国没被封的网站是否能访问,是否显示外国IP地址。

2,如果任何国际网站都不能访问,请检查shadowsocks服务是否正常运行。打开路由器控制台,选择shadowsocks,尝试重启动。

3,如果仍然不成功,使用电脑直接连接你的shadowsocks服务,检查代理服务是否正常,可以联系你的供应商。(注意此时不能使用openwrt 的线路)

4,如果能够用其他设备连接代理,请回到控制台检查shadowsocks各项服务参数是否完全正确。

访问被封的网站(如facebook) 提示“不是私密连接” 或前往错误的网站:

1,首先访问www.whatismyip.com,确定是否显示外国IP地址。

2,确保代理工作正常的情况下检查DNS。请检查电脑或手机上的DNS设置,确保是“自动“ 或192.168.1.1。特别是苹果电脑,DNS设置在“网络偏好设置”里,设置后更换网络,可能不会被擦除。请删除所有自定义DNS配置。

3,删除所有DNS缓存。(如果不知道怎么删,断开网络并重新连接)

4,如果仍不能正常工作,打开路由器控制台的 chinadns,检查chinadns是否工作正常,尝试重启动。

5,检查国际DNS地址(第二个)是否正常。通过ping命令可以检查该国际DNS地址是否被封锁。

6,检查路由器DNS设置,是否关闭了“Hosts文件”和“解析文件”,配置本地DNS是否正确连接了ChinaDNS的本地端口(127.0.0.1#Xxxx),是否使用了正确的符号(#)

7,尝试更换另一个国际DNS服务器(这个请自己找,我没有这个能力)

8,尝试使用其他方式代理DNS(TCP代理或UDP代理,参考文章最下面的资料)

访问中国网站被提示为国际友人,禁止看视频或看到英文站、国际站。

1,首先百度输入“ip”确定你在中国。然后打开路由器控制台,检查chinadns设置中第一个中国DNS服务器是否工作正常。

2,尝试更换一个中国DNS服务器(从你的电信公司获得,或使用中国公共DNS)

3,需要更新中国Ip地址列表。这个操作较为复杂,请参考:Shadowsocks for OpenWRT 拾遗

尽管我可以自由上网,但某些程序仍然不能使用该代理(如游戏机)

1,检查游戏机或游戏程序的设置是否全为自动。

2,查询该程序是否使用了UDP协议。shadowsocks只对TCP协议有效。

 

本文引用并感谢以下资源

@clowwindy   shadowsocks和chinadns的作者

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

CentOS下shadowsocks一键安装脚本

Shadowsocks for OpenWRT 拾遗

 

打赏
2015年02月3日