Shadowsocks + ChnRoute 实现 OpenWRT / LEDE 路由器自动科学上网

本站发布的三种使用 shadowsocks 在 OpenWrt / LEDE 上的自动科学上网方案:

1、Shadowsocks + ChnRoute 实现 OpenWRT / LEDE 路由器自动科学上网
2、Shadowsocks + Redsocks 实现 OpenWRT 路由器自动科学上网 (停止更新)
3、Shadowsocks + GfwList 实现 OpenWRT / LEDE 路由器自动科学上网

这篇文章介绍的方法基于aa65535的luci-app-shadowsocks/openwrt-shadowsocks,介绍了如何在OpenWRT / LEDE下配置自动科学上网,新版本支持在Luci下图形化配置,大大简化了配置过程。配置完成后,路由器本身获得自动科学上网能力,所有连入该路由的设备都可无障碍访问被墙的站点。是运行于路由器的透明代理。

方案简介
本文changelog

注:本文不再提供OpenWrt 15.05及以下版本的说明;仅支持LEDE 17.01, OpenWrt 18.06及后续版本

一、安装

适用于 openwrt-shadowsocks 3.0.1及以上版本,搭配 luci-app-shadowsocks 1.6.0及后续版本。

所需软件列表

方法一: 添加作者的软件源,直接利用opkg命令安装 (此方式快捷方便,推荐!)

软件源位置:http://openwrt-dist.sourceforge.net/packages/

前提是所用网络环境直连sourceforge.net和downloads.openwrt.org没有问题。

接下来可以直接使用作者的一键脚本,执行:

此方法手动的步骤

方法二: 手动下载软件包,上传至路由器后安装

如果直连遇到困难(无法连接或者过程中下载总是中断),请继续下面的步骤来安装。实测国内许多ISP,执行 opkg update 和 opkg install 下载安装的时候都可能会遇到卡住、中断的情况,请多试几次。如果尝试多次仍然失败,请参考下面的依赖列表,手动至官方下载站点手工下载。

详细步骤点击展开
二、shadowsocks 配置

登录Luci,指向“服务”,此时应该能够看到shadowsocks(中文界面下显示“影梭”)了。接下来进行shadowsocks的配置。

I. 添加服务器
II. 设置代理方案
III. 开启代理服务
IV. 额外的优化
三、DNS配置

到此虽然shadowsocks配置完成,不过还没有进行DNS部分的配置,只有完成了DNS的配置才能解决DNS污染并优化DNS解析,接下来的部分来对DNS的配置进行说明。

PS:DNS的调试可以使用dig

I. DNS转发链图示
II. DNS转发链的基本配置
III. DNS转发链的优化配置
四、按域名指定是否走代理(可选)

这一部分的配置用于替代 “三.III.2. 添加gfwlist和China-List配置文件”中的步骤。请在完成“三.III.2. 添加gfwlist和China-List配置文件”前面的配置后进行这一部分的配置。

下面的步骤会使用我编写的脚本来自动生成配置文件,脚本放在github维护,可能随时更新,可到gfwlist2dnsmasq, openwrt-scripts查看最近更新的动态。

先使用dnsmasq-full替换掉原有的dnsmasq,由于先卸载dnsmasq后很可能会导致后面下载dnsmasq-full包的时候无法域名解析,从而导致下载失败,因此这里使用一个取巧的办法,先尝试安装dnsmasq-full:

然后会收到错误信息(原因是文件冲突),dnsmasq-full也不会成功安装;但是不用管,因为此时dnsmasq-full的依赖包应该已经装好了。接下来到openwrt官网下载dnsmasq-full的包,举例:https://downloads.openwrt.org/releases/packages-18.06/arm_cortex-a9_vfpv3/base/dnsmasq-full_2.80-1_arm_cortex-a9_vfpv3.ipk

然后将ipk包上传到路由器/tmp目录,并执行如下命令:

I. China-List强制直连 自定义域名强制直连
II. GFWList强制走代理 自定义域名强制走代理
四、其他

一些强烈推荐的额外设置项(涉及到更新、维护)可以参考:《Shadowsocks for OpenWRT / LEDE 拾遗》

需要自己搭建服务器的,可以参考:shadowsocks – libev 服务端的部署

推荐的VPS商家见:https://cokebar.info/about

本博客有关 shadowsocks 文章合集目录

五、写在最后

本人作为一名普通使用者,水平有限,且文章也缺乏校审,肯定有错误存在,也有很多能改进的地方,如有意见或建议,请留言指出,万分感谢! 如果使用时遇到问题也欢迎留言,本人如果有空都会回复,不过请一定要将出错信息贴出来,有些错误信息需要到系统日志中查看。

2,082 条评论

  1. 头像ssw 回复

    ; <> DiG 9.8.3-P1 <> plus.google.com
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29019
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 7, AUTHORITY: 0, ADDITIONAL: 0

    ;; QUESTION SECTION:
    ;plus.google.com. IN A

    ;; ANSWER SECTION:
    plus.google.com. 1199 IN CNAME plus-china.l.google.com.
    plus-china.l.google.com. 179 IN A 173.194.72.113
    plus-china.l.google.com. 179 IN A 173.194.72.139
    plus-china.l.google.com. 179 IN A 173.194.72.101
    plus-china.l.google.com. 179 IN A 173.194.72.100
    plus-china.l.google.com. 179 IN A 173.194.72.102
    plus-china.l.google.com. 179 IN A 173.194.72.138

    ;; Query time: 298 msec
    ;; SERVER: 192.168.1.1#53(192.168.1.1)
    ;; WHEN: Tue Nov 18 18:36:28 2014
    ;; MSG SIZE rcvd: 156

    以上是我返回的数据。

    1. cokebarcokebar 文章作者 回复

      这个应该没问题

  2. 头像F 回复

    PolarSSL 版本的 shadowsocks-libev-spec 啟動不了,剛剛安裝的 v1.5.3-5cc562f。評論都一一看了,上面也有人遇到,不知道怎麼解決的。後又安裝了 OpenSSL 版本,沒有遇到什麼問題,使用方案二已科學上網。感謝作者!

    1. cokebarcokebar 文章作者 回复

      之前早些的版本我也出现过polarssl版本 ss无法连接(但能启动)的问题 可能是libpolarssl的问题 我也不很懂啦

  3. 头像游客 回复

    装上了,但是只能打开google主页,其他U2B,google drive TT FB都打不开,显示正在建立安全连接就没下文了,测试whatismyip也显示是SS服务器ip了。

    1. cokebarcokebar 文章作者 回复

      DNS污染 PC 路由器 服务器全部清除DNS缓存 或者重启

  4. 头像张建军 回复

    三种方案都试了,国内网能上,但所有的国外网站均不能登陆,“错误代码:DNS_PROBE_FINISHED_BAD_CONFIG”,如何解决?谢谢

    1. cokebarcokebar 文章作者 回复

      检查ChinaDNS、dnsmasq以及PC机的DNS设置,使用dig检查国外dns状况

      1. 头像张建军 回复

        PC端的DNS设置是自动获取,如何检查ChinaDNS、dnsmasq,本人不会操作,请说明步骤,谢谢!

        1. cokebarcokebar 文章作者

          请自行Google搜索DNS相关知识补充,了解nslookup dig等常用工具的使用方法,本博客有一篇博文介绍了如何在windows下添加dig工具。本人精力有限,这两个软件的使用涉及到大量的基本网络知识,如果自己不懂还请及时补充相关知识,请不要做伸手党,Google是个非常好的自学工具。

  5. 头像海涛 回复

    我选择的方案3,使用网友分享的ss,现在打开ip.cn显示国外的ip,是不是失败了?

    1. 头像海涛 回复

      好像变成全局代理了

      1. 头像海涛 回复

        登录qqmail都会显示ss代理ip,还有115之类的都是国外ip138.com都是ss代理ip,看样子是做了全局代理。
        是不是需要将dnsmasq换成dnsmasq-full?

        1. cokebarcokebar 文章作者

          确保配置和上面完全一致,如果你更新了ignore.list,确保ignore.list更新过程没有被打断,下载完毕后ignore.list应该是75000多字节,china_chnroute.txt也是一样;最后重启一下路由器

        2. 头像海涛

          我看了ignore.list是0b,该如何更新ignore.list呢?应该是装ss软件的时候自动生成的。

        3. 头像海涛

          我看aa65535原来的方案五,有下面这一段配置:

          编辑 /etc/dnsmasq.conf
          添加 no-resolv 和 server=127.0.0.1#5354 并删除其他 server=
          使用 /etc/init.d/shadowsocks start 命令启动 shadowsocks
          使用 /etc/init.d/chinadns start 命令启动 ChinaDNS-C
          使用 /etc/init.d/dnsmasq restart 命令重启 dnsmasq
          文件 chinadns_chnroute.txt 与 ignore.list 相同, 可使用符号链接节省空间
          rm -f /etc/chinadns_chnroute.txt
          ln -s /etc/shadowsocks/ignore.list /etc/chinadns_chnroute.txt

          是不是也需要输入:rm -f /etc/chinadns_chnroute.txt
          ln -s /etc/shadowsocks/ignore.list /etc/chinadns_chnroute.txt

        4. cokebarcokebar 文章作者

          是否做符号连接是可选项 做不做都行 文末有说明

    2. cokebarcokebar 文章作者 回复

      ignore.list是软件包自带的不是安装后生成的 可以删除文件 重新安装 或者用我文末的方法更新列表,需要先装curl

      1. 头像海涛 回复

        删除ignore.list命令是:rm -f /etc/shadowsocks/ignore.list吧?

        1. cokebarcokebar 文章作者

          用winscp管理文件方便很多

  6. 头像海涛 回复

    最后一段是这样说的:
    因此你也可以通过符号链接将两个文件链接起来,我们可以删除chinadns_chnroute.txt,然后执行:

    1
    ln -s /etc/shadowsocks/ignore.list /etc/chinadns_chnroute.txt

    我查了一下,/etc/chinadns_chnroute.txt文件有7500B,应该符合要求,让ignore.list等于chinadns_chnroute.txt就可以了吧,先删除ignore.list,然后输入命令
    ln -s /etc/shadowsocks/ignore.list /etc/chinadns_chnroute.txt
    就可以了吧?

    另外,系统只有libcurl包,如何安装curl包?谢谢!

    1. cokebarcokebar 文章作者 回复

      opkg update
      opkg install curl

      1. 头像海涛 回复

        谢谢,已经安装成功,并可以自己区分国内外ip

      2. 头像海涛 回复

        再麻烦,按照你的教程把另一台刷过openwrt的路由器配置了一遍,选择的方案三。
        现在国内外ip已自动区分,只是youtube等网站无法打开,和配置有关吗?

        1. cokebarcokebar 文章作者

          查查youtube解析结果。记得先清空DNS缓存,路由器也是

        2. 头像海涛

          谢谢,路由器清理dns缓存不知道命令是什么,电脑上清理dns缓存后,twitter可以打开了,可是youtube还是打不开,ping一下,只返回一个ip地址,其余都是time out

        3. cokebarcokebar 文章作者

          重启路由器就行了啊,顺便看看chinadns的chinadns_chnroute.txt和chinadns_iplist.txt对不对

        4. 头像海涛

          谢谢,重启后搞定!

        5. 头像海涛

          反馈一个问题:或许是方案三的ip区分不太好,我这里youtube和onedrive访问很不稳定,有时候可以打开,有时候打不开。是不是和dns缓存有关?
          重启路由后,过几分钟可以打开,果段时间又打不开了。

  7. 头像Halry 回复

    希望作者写一篇用gfwlist来辨别是否需要代理的方案的文章,现在用chinadns就好象全局代理一样了。。。用迅雷下载总是跑ss

    1. cokebarcokebar 文章作者 回复

      chinadns和走ss没关系。走不走是ss里的ignore.list判断的 你看看是不是ignore.list有问题。另外P2P下载不可避免的会有国外peer连入 没办法。 gfwlist方法也有 有人也弄过 去 http://kyonli.com/ 看看

      1. 头像Halry 回复

        我看到aa65535的github里面有dnsmasq-chinadns,有什么不同吗,好像这个就是排除法的方案,但是没有教程,好难弄呀

        1. cokebarcokebar 文章作者

          那个只是整合了chinadns功能的dnsmasq

  8. 头像ygr 回复

    这个方法,国外的网站全部是走代理,用ss流量吗?

  9. 头像ifreeswan 回复

    谢谢楼主,用这个方案2天了,感觉不错
    现在有2个问题:
    1、shadowsocks已经设置了开机启动,但无效,在luci里面点启动才行。
    2、ios连接这个路由器,app store 显示“Cannot Connetc to App Store”

    1. cokebarcokebar 文章作者 回复

      设置开机启动需要/etc/init.d/shadowsocks enable /etc/init.d/chinadns enable
      貌似luci里面点击启用不会更改开机启动开关貌似需要安装后手动执行。。是我疏忽了
      app store的问题没测试过 换DNS试试吧,强烈不推荐OpenDNS

      1. 头像ifreeswan 回复

        /etc/init.d/shadowsocks enable/disable 在luci界面里能显示出来,
        但是,重启后,依旧是shadowsocks is not running
        还会是哪里的问题?
        改了下shadowsocks的json文件,域名改成ip地址,解决问题。

        1. 头像ifreeswan

          把shadowsocks的启动顺序调后,用哪个值合适一些?

        2. cokebarcokebar 文章作者

          已经很后了 默认95 还是尽量别域名 ss-rules里面虽然已经添加了 用114预解析域名的功能 不过毕竟有不稳定性

        3. 头像aa65535

          这个跟 114DNS 稳定性没关系,因为刚启动时还没连上网,所以 ss-rules 里 nslookup 解析域名会失败,导致启动不了,如果 IP 不是经常变动的话,建议还是直接填写 IP 。

      2. 头像aa65535 回复

        在安装 luci-app 时会自动 enable 相应的服务的。

        1. cokebarcokebar 文章作者

          我不是说114DNS不稳定 我的意思就是 ss-rules解析时候网是否连上不稳定

  10. 头像ifreeswan 回复

    K50dropbear K99umount S12log S50dropbear S95done
    K85odhcpd S00sysfixtime S19firewall S50telnet S95shadowsocks
    K89log S10boot S20network S50uhttpd S96led
    K90network S10system S35odhcpd S60dnsmasq S98sysntpd
    K98boot S11sysctl S50cron S90chinadns
    恩,还是用ip吧

发表评论

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

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