Shadowsocks + Redsocks 实现 OpenWRT 路由器自动翻墙 (停止更新)

写在前面: 由于使用本方案的人很少,因此不再更新!建议使用其他两种方案!

本站发布的三种shadowsocks在openwrt上的自动翻墙方案:

1、Shadowsocks + Chnroute 实现 OpenWRT / LEDE 路由器自动翻墙
2、Shadowsocks + Redsocks 实现 OpenWRT 路由器自动翻墙 (停止更新)
3、Shadowsocks + GfwList 实现 OpenWRT / LEDE  路由器自动翻墙

本方案在openwrt上运行ss-local(相当于 shadowsocks 客户端以及本地socks5服务端),然后利用 redsocks (相当于socks5客户端)可完成openwrt的自动翻墙。该方案同样使用aa65535提供的包,并且redsocks具有luci界面,方便开关和配置。

本方案适合那些不喜欢国外IP全走代理,而是被墙才走代理的人使用;redsocks2无需chnroute也无需gfwlist,采用自动判断机制,省心省力;但缺点也很明显,自动判断机制会先尝试连接站点,需要等待一个时间连接失败才会转到代理上,等待时间会让有些人难受;而且可能无法应对gfw的中间人攻击,对于非http/https的应用的自动判定可能支持也不太好。

此方案同样推荐搭配ChinaDNS使用,做防DNS污染以及解析优化。

一、安装

首次安装的话,先安装必要的包,确保路由器联网,先更新软件包列表(下载有问题的请手动到openwrt.org下载所有需要的包并上传到路由器上使用opkg install XXX.ipk命令安装):

shadowsocks有openssl和polarssl两个版本选择,ROM空间吃紧的就选择后者吧。

如果要用polarssl版本的shadowsocks(polarssl体积更小):

如果要用普通版本(openssl)的shadowsocks,那么(openssl兼容性更好):

然后需要根据自己CPU型号选择包,请选择不带spec的包:

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

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

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

redsocks2: http://sourceforge.net/projects/openwrt-dist/files/redsocks2/

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

最后当然是安装了

特别提醒:2015.1.8,由于ChinaDNS-C更名为ChinaDNS,所以包名有变化,此前安装过ChinaDNS-C的,需要手动卸载并重新安装新版。

二、配置

1、配置/etc/shadowsocks.json,格式如下:

然后启动shadowsocks,并设置开机运行:

2、配置Redsocks2

此步骤可以在luci中完成,指向服务应该就可以看到redsocks2的配置了,保留默认即可,勾选启用,点击“保存并应用”生效。

redsocks2

3、配置DNS转发

先转到Luci中的DNS/DHCP设置中,配置转发DNS为127.0.0.1#5353:

dnsmasq dns forward

其中,5353是ChinaDNS的端口,如果你在之前设置界面里改了,这里记得别填错。

然后切到HOSTS和解析文件选项卡,勾中“忽略解析文件”

4

接着配置ChinaDNS,对配置的选项做出说明:

ChinaDNS参数说明

接下来的步骤会有区别,通过ChinaDNS进行防DNS污染及解析结果优化,方案有三:

1、对于shadowsocks是用自己服务器搭建的,推荐方案一,在自己服务器上搭建DNS服务;

2、如果没有这个条件,但服务器支持UDP转发(较新版本Shadowsocks均支持),那么案二

3、如果服务器Shadowsocks版本老,不支持UDP转发,那么可用方案三要求版本>=1.2.0

前两种方案,目前来说是绝对没有DNS污染现象的,此时ChinaDNS的作用完全就是为国外站点做解析优化,因为DNS查询由代理服务器转发,DNS查询的发起者相当于代理服务器,获得的解析结果都是就近于代理服务器的;而方案三则会直面DNS污染,此时ChinaDNS的防污染功能发挥作用,同时方案三无法做到国外网站解析结果优化,因为获得的IP是就近于你的位置的。

然而对于前两种方案,也可能存在一些问题(很少见):详见“Shadowoscks for OpenWRT 拾遗

方案一
方案二
方案三

54 条评论

  1. 引用: Shadowsocks + ChinaDNS 实现 OpenWRT 路由器自动翻墙

  2. 引用: Shadowsocks + GfwList 实现 OpenWRT 路由器自动翻墙

  3. ljgnj 回复

    按照“Shadowsocks + Redsocks 实现 OpenWRT 路由器自动翻墙”教程,解决了多天上不了YouTube,感谢。
    存在的问题是:
    ChinaDNS必须在系统-启动项中重启才能运行。
    查看/etc/chinadns_iplist.txt和/etc/chinadns_chnroute.txt文件正常。
    缺少什么步骤吗?
    水平差求教了。

    1. cokebar 文章作者 回复

      到启动项里面看看启用开机自启了么? /etc/init.d/chinadns enable 试试

      1. ljgnj 回复

        重启后,系统-启动项chinadns显示是启动的,但服务-ChinaDNS显示“未运行”,必须在启动项点一下“重启”chinadns,ChinaDNS才能运行。

  4. 引用: Shadowsocks + ChnRoute 实现 OpenWRT 路由器自动翻墙 | Charles' Collection

  5. DarkArthas 回复

    请问我按您的教程设置之后,有些时候无法访问外网,有些时候所有网络都无法访问。然后我问了shadowsocks服务端的人,他们说他们的ss不支持UDP转发,而我的版本里面shadowsocks的图形界面里没有开关UDP转发选项,请问我该如何用命令关闭UDP转发呢?

    1. cokebar 文章作者 回复

      此方案shadowsocks不带图形界面,是从shadowsocks-libev源码直接编译而来并非定制版,不知你用的是哪个还带图形界面的? 这个放啊需要ss-tunnel并手动在启动脚本手动启动ss-tunnel 是用这个实现的UDP转发 如果你的服务器不支持UDP转发只要不开启ss-tunnel、不适用文中DNS转发方案的方案二就可以了

  6. 引用: Shadowsocks + Redsocks 实现 OpenWRT 路由器自动翻墙 | Charles' Collection

  7. david 回复

    你好,我有个问题,请问我服务器用shadowsocks-go版本做服务端发现路由器无法实现FQ,服务端切换到Python版本才能FQ,不知是什么原因,用的是RC4-MD5加密,但是我在手机客户端是可以连上go版本的,就是路由器客户端不行,只能访问国内网站

  8. 路过的新手 回复

    用的方法一。

    reboot重启路由器之后,只有/etc/init.d/redsocks2 restart 一次,才能打开被墙的网页,enable了也没有用啊,启动项里是有redsocks2的,好奇怪。

    1. cokebar 文章作者 回复

      调低redsocks的启动优先级试试

      1. 酱油 回复

        改99无用,目测0.6问题。

      2. 酱油 回复

        接前文。。。在start= 99 的基础上再加 sleep 命令才暂时解决了。发现0.6版需要在网络连接成功的情况下启动才能正常使用,也就是如果没有足够的延时等待网络连接成功而先于网络连接就启动redsocks2,那么redsocks2等于没启动。虽然暂时sleep解决,但还是有很大问题,如果哪次连接网络时间超长;如果网络中途断线,那么还得乖乖如楼上所说那样操作一下。老版本可能机制不同不需要等待网络连接,也许默认加入了sleep或直接能判断Wan是否连接成功。 另外说一下如何简单判断sleep需要的值,启动路由后进网络连接下看lan和wan的连接差值,差值减去4或5,比如差值是20 “sleep 15” 就ok,当然保险情况下就设为20,或直接 sleep 30(半分钟),sleep 60 (一分钟)。实际上start 不需要一定 99,但最好99为好。

        1. Emik

          感谢,我也出现了这个问题,依照这个思路也解决了。

        2. cokebar 文章作者

          可以考虑改用hotplug脚本

  9. linjimmy 回复

    [root@PandoraBox:/root]#opkg install redsocks2_0.60-2_ramips_24kec.ipk
    Collected errors:
    * wfopen: redsocks2_0.60-2_ramips_24kec.ipk: No such file or directory.
    * pkg_init_from_file: Failed to extract control file from redsocks2_0.60-2_ramips_24kec.ipk.

    这是什么情况?

  10. linjimmy 回复

    刚刚发错
    是以下内容

    [root@PandoraBox:/root]#cd /tmp
    [root@PandoraBox:/tmp]#opkg install redsocks2_0.60-2_ramips_24kec.ipk
    Installing redsocks2 (0.60-2) to root…
    Collected errors:
    * satisfy_dependencies_for: Cannot satisfy the following dependencies for redsocks2:
    * libevent2 *
    * opkg_install_cmd: Cannot install package redsocks2.

发表评论

电子邮件地址不会被公开。 必填项已用*标注

请输入验证码 * 请输入正确的验证码