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

  1. 头像magicwolf 回复

    博主,按照你的教程做了,淘宝闲鱼等阿里的app会提示我使用了代理,拒绝访问。我有办法获得阿里的ip放入忽略列表吗?

    1. 头像magicwolf 回复

      大家没遇到类似问题吗?

      目前发现爱奇艺,淘宝,知乎都会走代理

  2. 头像Lucifer Xue 回复

    飞羽大大,想请教一下:dnsmasq将域名解析请求转发给chinadns后,/etc/dnsmasq.conf里面的规则是不是就无效了。如果我想单独让某个或某些域名通过特定dns服务器解析,有什么方法能办到呢?

    1. cokebarcokebar 文章作者 回复

      /etc/dnsmasq.conf里如果写了针对特定域名的规则,这些规则是优先的;在luci界面的DHCP/DNS设置里填写的127.0.0.1#5353相当于默认设置,当没有其他规则匹配到的时候,使用默认规则。
      因此,你可以自行增加规则到dnsmasq.conf里,或者按照文中说的,在dnsmasq.d文件夹里新建一个文件,写道这个文件里面

  3. 头像ctz 回复

    非常感谢如此全面专业的技术分享,解决了很多疑惑,还保持长期更新,博主辛苦啦。

  4. 头像Fei 回复

    问题反馈:shadowsocks-libev更新到3.2.1 只有再配置服务器勾上 TCP快速打开,则ss启动不了,教程是按照
    {2. 开启 TCP Fast Open (TCP快速打开,缩略为TFO)}系统版本17.01.4求老大更新一下或者说明是不是我的版本问题,谢谢

    1. 头像zypA13510 回复

      我这里也是同样的问题。系统更新到18.06.1后又可以了。(更新前备份package列表和设置)

  5. 头像K.u. 回复

    感谢楼主等详细说明。

    我以前用 17.1.1, 那时用的shadowsocks =-lidev 比较简单,但可以实现全网但FQ,现在我把系统升到17.1.6,按照你的说明重新安装了一遍,但没有成功。基本情况如下:

    System
    Hostname LEDE
    Model NETGEAR WNDR3700v2
    Firmware Version LEDE Reboot 17.01.6 r3979-2252731af4 / LuCI lede-17.01 branch (git-18.201.27126-7bf0367)
    Kernel Version 4.4.153

    安装你文章中的软件全部成功而没有任何error,配置到 “III. DNS转发链的优化配置”之前也都没有问题,transparent proxy running normally,但当访问外网就timeout,没有response,我查了log也没发现问题,请问按照什么思路查,能给一个顺序列表吗?shadowsocks server肯定没有问题,我手机ipad电脑都能顺利访问而且天天使用,服务器的setting我也double check过n次。

    谢谢了?

    K.U。

  6. 头像zypA13510 回复

    我这里也是同样的问题。系统更新到18.06.1后又可以了。(更新前备份package列表和设置)

    1. 头像zypA13510 回复

      验证码过期了回复就变成新评论了。。。

  7. 头像zypA13510 回复

    wget -O- ‘http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest’ | awk -F\| ‘/CN\|ipv4/ { printf(“%s/%d\n”, $4, 32-log($5)/log(2)) }’ > /etc/chinadns_chnroute.txt
    这里,几个建议:1. 建议先opkg安装aggregate,然后这里在>前加上|aggregate,可以把8000多条记录合并至5000多条(可能可以提高查找效率?) 2. 可以加入scheduled tasks(也就是crontab)里自动定期运行更新

  8. 头像K.u. 回复

    哦,谢谢。

    昨天我的ISP给我发信,说我有很多SSH连接,我看了下log发现都是ss server查询8.8.8.8,也就是DNS forward

    ISP suspend 了我的账号,但没说什么,我接触后继续使用。想问下,你们也遇到过这样但情况吗?ISP对于DNSforward 这么敏感吗?

    1. cokebarcokebar 文章作者 回复

      SSH和DNS查询没有关系

  9. 引用: 【记录】Netgear WNDR4300 安装OpenWRT及规则代理 – Kuro Latz' Blog

  10. 头像huto 回复

    请问现在运营商开始推ipv6了,有没有针对ipv6的设置。主要是dns查询这一块,还有能不能使用dns over tls功能。

    1. 头像huto 回复

      还有就是新版的openwrt18.06,我使用的ath79 dts,网件3800,4.14内核,安装 ipset,iptables-mod-tproxy,luci-shadowsocks提示不满足依赖。

    2. cokebarcokebar 文章作者 回复

      目前aa65535还没有做这方面的工作,有没有其他人做了我还不太清楚;我这里没有ipv6环境调试起来也是很不方便。ipv6下要做的设置差不太多,主要是改写iptables规则;不过目前ipv6建议只做测试和尝鲜用,因为目前全球范围内ipv6的覆盖率都不是很高,ipv6下的网速也远不及ipv4。
      至于DNS over TLS,我没研究过openwrt下有什么客户端,有应该是有的;但是除非你对隐私保护要求很高,不建议使用,本文的TCP方式的DNS查询已经相比传统的UDP增加了延迟,如果将DNS承载于TLS中,延迟会进一步增大,除非你用低延迟的港台、韩国等服务器,否则延迟可能增大到1秒以上

      1. 头像huto 回复

        我的想法是使用dns over tls是否可以直接dns查询了,不使用目前的china dns这些,因为这样dns是不会被污染的。只要有一个没被墙的,支持dns over tls的dns服务器。

        现在我的宽带和服务器都能使用ipv6,路由器没做改动,感觉翻墙确实慢了。

发表评论

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

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