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. 头像莫星超 回复

    我有ss三个里选哪个能让路由器翻墙

  2. 头像莫星超 回复

    怎么在路由器上用ss 小白真心求助

    1. 头像酱油 回复

      如果不会,根据你的你路由型号,直接去刷集成了SS的固件。

      1. 头像莫星超 回复

        不会编程的哭瞎 有攻略吗 912003771qq求加大神教我

        1. 头像酱油

          QQ N年不用呵呵,不过这个真不需要什么编程。只需要些简单的openwrt操作知识或两三个小软件,Google你的(路由型号)加openwrt 你会在山上找到你需要的。或你直接说说你路由型号,也许博主就是同样的型号哦,他的固件就能直接给你 )

    2. 头像莫星超 回复

      华为HG255d 可以否

      1. 头像射日 回复

        地址:http://goo.gl/SEzc2x
        刷日期为20141228那一个,还因为20141228才支持原厂Uboot。
        昨天又更新了一个,但不太熟悉更新了什么,所以还是1228那个保险点。
        也可以直接搜索里面的文件名到相关网站看一下固件介绍。
        刷机有风险,刷前请掌握好刷机万一失败如何恢复的技术:)

  3. 头像shadow 回复

    请问怎么代理非dns类型的udp。还是有好多udp被墙了的,比如手机hangouts的拨打接听google voice

    1. cokebarcokebar 文章作者 回复

      拨打接听Google Voice 需要使用VPN

    2. cokebarcokebar 文章作者 回复

      新版shadowsocks的ss-redir模式支持了udp方式 你可以重新尝试一下 加上 -u参数即可

  4. 引用: 折腾╮(╯_╰)╭ | 红红火火红红火火哼哼哈嘿恍恍惚惚

  5. 引用: _(┐「ε:)_生命在于折腾╮(╯∀╰)╭ | 红红火火红红火火哼哼哈嘿恍恍惚惚

  6. 头像Yun 回复

    大师你好,我的DIR-505路由是挂在出口路由后面做无线AP使用,按照你第二种方案配置了,但为什么接入这个AP的手机跟笔电还是不能透明代理呢?手动指向路由IP的话可以全局代理,DIR-505的DHCP是关闭的,下面所有终端所获取的IP都是由出口路由分配。

    1. cokebarcokebar 文章作者 回复

      不是网关无法NAT

  7. 头像necrosakuya 回复

    跑完之后才发现原来有这个问题要注意的Orz.. 忘记了.

  8. 头像杂食 回复

    谢谢您写的文章,给我很大的启发,终于”几乎”搞好了.
    我的路由器是网件 4300,我现在的方案是 openWRT+dnsmasq+ipset+shadowsocks

    简单说,我建立了一个fuckgfw的列表,ex:
    #Twitter
    server=/.twitter.com/208.67.222.222#443
    ipset=/.twitter.com/fuckgfw
    ,
    然后router启动时候建立一个 ipset,name = fuckgfw.
    ipset -N fuckgfw iphash
    然后指定ipset里面的domain name 走 1080端口.
    iptables -t nat -A PREROUTING -p tcp -m set –match-set fuckgfw dst -j REDIRECT –to-port 1080

    1080端口是shadowsocks, 效果不错,现在facebook, twitter,youtube都可以打开.
    就是google.com打不开.

    但是如果我在笔记本上打开全局的shadowsocks 客户端,google也可以打开.

    看着好像是dns污染,但是我用nslookup得到的地址,直接用地址(74.125.20.138)访问也打开不了.

    Documents>nslookup google.com 209.244.0.3
    Server: 209.244.0.3
    Address: 209.244.0.3#53

    Non-authoritative answer:
    Name: google.com
    Address: 74.125.20.100
    Name: google.com
    Address: 74.125.20.102
    Name: google.com
    Address: 74.125.20.139
    Name: google.com
    Address: 74.125.20.138
    Name: google.com
    Address: 74.125.20.113
    Name: google.com
    Address: 74.125.20.101

    我在router上手工把地址加到 ipset里面,也还不行.

    这种情况大概什么原因? 如何解决呢? 非常感谢!

    必须再装chinadns吗?

    1. cokebarcokebar 文章作者 回复

      你这方法就是我的这篇GFWLIST方案啊:https://cokebar.info/archives/962
      一个站点引用的资源非常多,像是google,就有google.com, gstatic.com, googleusercontent.com,1e100.net等等,你需要将这些都添加进去,而且google还有一些特殊的比如说google.com.hk,google.co.jp这些你一条ipset=/google.com/fuckgfw是不够的
      参照我的GFWLIST方案,里面有从gfwlist转化过来的dnsmasq的ipset列表

  9. 头像杂食 回复

    收到,谢谢! 我实验完告诉你结果啊, 没想到这么快就回复了.

  10. 头像leo 回复

    你好博主,我在小米迷你路由刷入了潘多拉,SS+Redsocks2+chinaDns设置好后,PC可以科学上网,但是同局域网的手机和平板都不行,一直找不到解决办法,请博主指点一二,谢谢

发表评论

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

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