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,100 条评论

  1. 头像游客 回复

    ChinaDNS不定时会死掉,有没有添加个守护进程的方法啊,每几分钟检查一下,没有在运行就启动。

  2. 头像游客 回复

    现在用的方案2,基本每隔一两小时就不行了,表现是只能上google搜索,而且google drive是打不开的,U2B也打不开,重启ChinaDNS服务,重启SS服务,都不行,只能reboot路由器,然后恢复正常。

    1. cokebarcokebar 文章作者 回复

      换openssl或者polarssl 冲刷BB14.07正式版路由factory image 要不就换路由吧 你的路由本身不稳定

    2. 头像myliyifei 回复

      udp转发的问题 你关闭ss tunnel比较一下 执行 netstat -anup看看有没有很多sockets

      1. 头像游客 回复

        确实是很多sockets,这该怎么解决呢?

        1. 头像Li Yi-Fei

          目前无解,只能用方案1,3 或者是shadowvpn,你是什么版本的OP,我是AA遇到了这个问题

      2. cokebarcokebar 文章作者 回复

        嗯估计是这个问题。我对这个不是很懂不是搞软件的最早我也是方案二那种也是不很稳定。有能力的就换方案一吧。

  3. 头像wangsmile 回复

    请教,两个服务能启动了。能上网,但翻墙就打不开网页。

    最后一步我用的方案一,不知道DNS和端口填什么?填shadowsocks的IP和端口吗?我买的国外的VPS,安装的shadowsocks服务。

    然后按你说的排查:
    ss-redir -c /etc/shadowsocks/config.json
    出现:
    2014-11-24 16:37:10 INFO: initialize ciphers… rc4-md5
    2014-11-24 16:37:10 ERROR: bind: Address already in use
    2014-11-24 16:37:10 ERROR: Could not bind
    2014-11-24 16:37:10 ERROR: bind() error..
    我是用图形配置的,好像不是文件?

    1. cokebarcokebar 文章作者 回复

      自己搭DNS服务器啊 怎么可能填shadowsocks端口 不懂别乱填 我博客你也不看 最新那三篇全是说DNS的。。 这篇文章里也引用了 你也不点过去。不会的话就老老实实方案三

  4. 头像wangsmile 回复

    我查了下:/etc/shadowsocks/config.json
    怎么会是这样的?
    {
    “server”: “127.0.0.1”,
    “server_port”: 443,
    “local_port”: 1080,
    “password”: “password”,
    “method”: “rc4-md5”
    }
    我按你的教程图形LUCI配置的啊。。。。。没用手工修改过这个文件。。。。。

    1. cokebarcokebar 文章作者 回复

      用图形配置就和配置文件无关了

  5. 头像wangsmile 回复

    还有LUCI图形界面的dnsmasq必须开机启动吗?我的没有启动。。。

    1. cokebarcokebar 文章作者 回复

      不可能 dnsmasq同时负责DHCP和DNS 不启动的话你连IP都分配不到

  6. 头像wangsmile 回复

    对了,我用的不是配置文件,用的图形界面里面填写的ss服务器信息的。

  7. 头像wangsmile 回复

    我的opkg update好像出错。
    opkg install ipset libopenssl
    是不是ipset没有安装好的原因?但我看openwrt的已安装软件包,libpolarssl和libopenssl都已经安装,是不是不用这第一步了?

    1. cokebarcokebar 文章作者 回复

      ipset没装好会默认用iptables不影响使用只不过性能差些。 update出错就重试 毕竟国外站点连接不太稳(看你发的应该是半道失去连接了 话说都是最通俗的英文看不懂么?Google翻译一下也行) polarssl和openssl装一个就行 都装挺占ROM的

  8. 头像海涛 回复

    有自动定时下载ignore.list的脚本,还有openwrt自动重启的脚本。
    国内有些网站被解析到国外了,发现重启路由就行了。

    1. 头像wangsmile 回复

      请问是怎么样的?

      1. 头像海涛 回复

        iqiyi.com;tv.sohu.com;youku.com都是用ss代理打开的,不能看呀,修改hosts文件行不?

        1. cokebarcokebar 文章作者

          先看看解析结果IP在哪(如果正常理应是国内IP) 然后查看ignore.list是否正常

        2. 头像海涛

          把114.114.114.114dns换成运营商自己的就好了。

        3. cokebarcokebar 文章作者

          那是你ISP封杀114 比较坑了

        4. 头像海涛

          好像isp在捣乱国际线路,ss代理越来越慢了。
          并且通过wifi已无法登录google+,之前可以的,很奇怪。

  9. 头像Foxlife 回复

    非常感谢分享了一个这么好的方案,使用下来效果非常理想,只是有一个问题,不知道这个方案可以设置局域网中某一个ip(类似192.168.1.XXX)完全不走ss,如果这样可行的话,我就可以将局域网中的下载机设置成不使用ss,这样下载机负责p2p下载就完全不会消耗掉vps的流量了,如果能实现就实在是太好了!

    1. cokebarcokebar 文章作者 回复

      Shadowsocks配置页面下面,有个访问控制

      1. 头像Foxlife 回复

        居然没有看到这个选项,太感谢了~!现在完美了!

  10. 头像wangsmile 回复

    感谢您的回答。我发现方案三可以了。我买的是搬瓦工的VPS,只安装了SS。方案三是不是性能不好?如果我要实现方案一,请教下您写的文章是哪一篇,我也去学习下DNS服务器的安装。再次感谢!

    1. 头像Foxlife 回复

      搬瓦工完全可以使用方案2的,支持upd转发的。

      1. cokebarcokebar 文章作者 回复

        UDP转发和哪家VPS没关系。你用的ss服务端程序支持,并且启动参数加了-u的话就是开启了。如果是shadowsocks-libev默认那个启动脚本的话默认就是开的

        1. 头像wangsmile

          是方案一效果最好吗?

        2. cokebarcokebar 文章作者

          是的 因为这种方式相对方案二 chinadns和shadowsocks会完全独立 shadowsocks挂掉也不影响chinadns的工作

发表评论

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

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