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

  1. 头像Bruce 回复

    求教各位:本人安装了shadowsocks-libev-3.1.3,透明代理和DNS forwarder都立刻运行,但是whatis my IP里仍然显示的是本地的IP?应该如何解决?是shadowsocks-libev-3.1.3的版本问题吗?那应该安装特定版本的shadowsocks-libev呢?请各位帮忙指导,多谢!

    1. 头像小小白 回复

      本人shadowsocks-libev-3.1.3最新版和最新的相关依赖包,运行没有问题。2台lede17.01.4稳定版。

  2. 头像小小白 回复

    羽大,打扰一下。真的想麻烦一下您,可不可以和aa65535大大说一下加入GoQuiet这方面的支持。(逃跑ing。。

    1. cokebarcokebar 文章作者 回复

      goqueit作为ss的插件,没啥兼容性问题啊,直接下载对应cpu架构的程序就行了,没aa65535啥事儿啊。如果goqueit没有对应你路由器的,问goqueit看他能出不,不行就自己用gccgo编译一个

  3. 头像Icarus_Radio 回复

    羽大,您好,我有一个问题。
    在“DNS转发链的基本配置”里,如果我勾中“忽略解析文件”,我的路由端就什么也解析不出来了
    我跳过了这一步和修改WAN口,直接执行下一步优化配置也成功了。
    我想请问一下为什么会这样。

    1. cokebarcokebar 文章作者 回复

      勾中“忽略解析文件”后,一定要在“网络”-“DHCP/DNS”设置,如下图,在”DNS转发”中填入:127.0.0.1#5353(对应ChinaDNS的IP、端口);并且ChinaDNS需要配置正确,能够正常工作才行,否则就可能出现解析问题。

  4. 头像Icarus_Radio 回复

    谢谢,已经成功了。不过我还有个问题,就是“忽略解析文件”和修改WAN口是必须这么做吗?我这么修改后一些内网的东西就无法访问了,修改LEDE里的hosts也没用,必须修改客户端的hosts文件

    1. cokebarcokebar 文章作者 回复

      路由器上改hosts对dnsmasq来说是生效的,请确认:
      1. 改了hosts后请重启dnsmasq
      2. luci里DHCP/DNS中,请不要勾选“忽略/etc/hosts”

    2. cokebarcokebar 文章作者 回复

      方法2:在dnsmasq的配置文件中,按以下格式增加配置:
      address=/yourdomain.com/192.168.1.5
      其中,yourdomain.com是你需要解析的域名,后面的IP是该域名解析的IP。一条一行。
      可以直接写入到/etc/dnsmasq.conf里,不过更推荐给这类规则单独写入到一个文件中,放到/etc/dnsmasq.d里

      1. 头像Icarus_Radio 回复

        非常感谢!

  5. 头像Sidney 回复

    羽大好,跟您请教一下。我在编译LEDE时已经把dnsmasq去掉了,直接换了dnsmasq-full.请问在(III. DNS转发链的优化配置)这一步可以直接使用吗?还是用此方式必须用dnsmasq

    1. cokebarcokebar 文章作者 回复

      full肯定没问题啊,full至完整版本,不带full的是精简版本

  6. 头像kingwong 回复

    咨询个问题。
    我DNS转发的端口按教程图片设的5311.chinaDNS是用的5353.其他教程中涉及端口的地方都是5353。但是一直显示chinaDNS未运行。需要怎么调整。
    我是用的koolshare的2.15的LEDE版本。

    1. cokebarcokebar 文章作者 回复

      没有error log无法排查 请提供

      1. 头像kingwong 回复

        我找一下再来请教您。

  7. 头像Eric 回复

    羽大好,关于dnsmasq优化的自动脚本现在有点小问题(2018-04-07);
    目前ss用的是a大编译的版本,其依赖于a大编译的libmbedtls(目前2.7.0-2);但是您的自动优化脚本里面用的是curl,只有官方源才有,其依赖于官方源的libmbedtls(目前2.7.2-1);官方curl+a大libmbedtls会报错,a大ss+官方libmbedtls也报错;
    当然这个问题根本上还是两个软件源不搭配啦,只是想问一下您的脚本里面可不可以换成wget呢?(不太确定wget是不是系统自带了 目前curl报错时wget还能正常使用,wget好像也没有别的依赖)

    使用的设备是LEDE 17.01.4 cortex-a15

    1. cokebarcokebar 文章作者 回复

      依赖地狱。。。WTF。。。curl支持openssl、mbedtls等好种tls库,然而LEDE偏偏default值就选了mbedtls。。 为啥不选openssl啊。。坑。。 而且LEDE的软件源里mbedtls也是一直跟进最新版,这让所有第三方下游程序都很恶心啊。。 要彻底解决可能没辙,自己编译吧。
      我的脚本里可以替换成wget,当初选择curl是考虑到有些OS可能默认只带curl不带wget。有空的话可能会修改成可wget、curl二选一的。wget用的openssl,openssl的修改很谨慎。

    2. cokebarcokebar 文章作者 回复

      aa65535软件源里更新到libmbedtls 2.8.0了 你试试将shadowsocks-libev/libmbedtls/libcurl都更新一下看能否兼容

      1. 头像Eric 回复

        很遗憾官方curl跟a大的libmbedtls 2.8.0 依然不兼容,不过别的都很正常,幸好dnsmasq优化文件也不用频繁更新~

  8. 头像flying-eagle 回复

    root@LEDE:/usr/bin# ss-local
    Error loading shared library libmbedcrypto.so.1: No such file or directory (needed by /usr/bin/ss-local)
    急等解决方案,谢谢。

    1. cokebarcokebar 文章作者 回复

      安装aa65535的软件源中的libmbedtls 2.7.0-2

  9. 头像peng 回复

    能讲一下插件那里是怎么设置的吗?

    我安装了aa65535的simple-obfs,json文件里面添加了option plugin ‘obfs-local’和option plugin_opts ‘obfs=http;obfs-host=www.bing.com’,但是连不上外网

    相同的设置在电脑端就没问题

    感谢

    1. cokebarcokebar 文章作者 回复

      可以在luci中直接设置 json配置里写到对应的config servers字段里就行,你加的内容没问题,但要确定写到正确的字段里了。进一步排错的话就需要error log了,遇到问题先找报错信息。

    1. cokebarcokebar 文章作者 回复

      已经可以用了,报错是因为你没有加正确的运行参数。手工运行不加参数肯定不行。

      1. 头像flying-eagle 回复

        的确如此。非常感谢。

发表评论

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

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