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. 头像zhang 回复

    楼主您好,我在手动安装ChinaDNS和dns-forwarder时出现了问题:
    我按照opkg print-architecture的结果(arch all 1;arch noarch 1;arch arm_cortex-a15_neon-vfpv4 10)选择了您给的链接中arm_cortex-a15_neon-vfpv4下相应的文件,用WinSCp传入/tmp中,并成功安装了shadowsocks
    但是,ChinaDNS和dns-forwarder都显示“Unkown package”;而它们相应的luci-app-xxx都显示imcompatible with the architectures configured。
    网上说注释掉opkg.conf中的option check_sigature可以解决这个问题,但是我试了一下并没有效果;还有人说要修改文件中architecture的内容,但是我没看到类似的语句。
    我的路由器是NetGear R7500 X4,固件是OpenWrt 18.06.2。
    谢谢

    1. cokebarcokebar 文章作者 回复

      如果提示的是Unkown package,请检查一下下载的文件的完整性,应该是文件有问题。如果是架构不对,提示不是这个,应该是如下这样子:
      Collected errors:
      * pkg_hash_fetch_best_installation_candidate: Packages for xxx found, but incompatible with the architectures configured
      * opkg_install_cmd: Cannot install package xxx.
      luci-app-xxx和架构无关,如果文件完整应该都能装上

  2. 头像凡夫 回复

    很棒,K家的好用,但是有软件中心,不放心。还是这个好,用着放心。

  3. 引用: 路由器自动翻墙方案 shadowsocks+dns2socks+pdnsd+dnsmasq - 技术人生-孙强

  4. 头像linear 回复

    配置ss的时候,可以指定额外走代理的IP和被忽略的IP,那么这两个列表之外的IP如何处理呢?
    因为我使用的是openwrt软件中心的版本,这个版本需要选择这两个列表之外IP的默认处理方式(走代理/不走代理)。我目前选择的是默认走代理,也就是国内路由表之外的IP全部走代理,然后我发现我登我的国内vps也从墙外绕了一圈回来(不在IP表中),但是我之前使用的第三方固件(同样使用chinadns大陆IP表)是没有这个问题的,所以感到很不解。
    (发现文中序号标错了,SS配置和DNS配置都是二)

    1. cokebarcokebar 文章作者 回复

      那个版本没用过,aa65535这个版本判定顺序如下:
      1. 先判定源IP,根据内网区域的设置,判定源IP的代理方式,分别为不走代理/全局走代理/正常模式;若为正常模式,则进入下一步的判断。
      2. 判定目的IP,根据外网区域的设置,首先判断是否属于强制走代理的IP/额外被忽略的IP,如果不属于,进入下一步
      3. 判定目的IP,根据“被忽略的IP列表”来判定,列表内的不走代理,列表外的走代理,若在额外规则里限定了端口号,则同样会判断端口号(好像是影响2,3两步,不影响1,不太记得了,可以参考ss-rules的源码得出结论)
      至此走不走代理的判定完毕

  5. 头像whicky 回复

    接着切换到“访问控制”页面,一种配置举例如下图:
    这一段,图中的内网区域,要配置成正常代理,图中的是直接连接,导致我找了一下午原因 T_T 建议修改!

    1. cokebarcokebar 文章作者 回复

      文中是刻意设置成这样的,因此不会修改的,这里就是为了演示一种较为复杂的应用场景,图下方有详细的解释,不能只看图不看字,大多数人没遇到你这种情况。

  6. 头像Max 回复

    小米9se,手机客户端ss能正常使用Google play以及Google photo等。但连路由器(wndr4300,按本指南配置)就无法通过Google 验证。查阅资料后确定是国产手机的Google play 框架包含googleapis.cn。是DNS污染问题。
    改问题shadowsocks-Android已可通过更新解决(即我手机客户端没问题)。想请问路由器上怎么解决?
    谢谢!
    # 安卓 # 国内Google play 框架 # googleapis.cn # DNS污染

    1. 头像Max 回复

      已解决。googleapis.cn本身就包含在dnsmasq_gfwlist.conf中。但是测试结果如下。
      root@OpenWrt:/etc/dnsmasq.d# nslookup googleapis.cn 127.0.0.1#5311
      Server: 127.0.0.1
      Address: 127.0.0.1#5311

      *** Can’t find googleapis.cn: No answer
      *** Can’t find googleapis.cn: No answer
      所以我最终的方法就是下国外的Google play service framework。

  7. 头像123 回复

    是不是没有开启bbr

  8. 头像F 回复

    一、访问google.com

    1、 dnsmasq解析该域名,发现该ip在ss_spec_dst_fw列表中,则交给DNS- Forwarder 转8.8.8.8 查询
    2、 8.8.8.8解析出IP后,发现该IP不匹配china-route列表,则返回国外IP
    3、iptables检测到该IP在中ss_spec_dst_fw,则代理访问

    二、访问microsoft.com

    1、 dnsmasq解析该域名,发现该域名不在ss_spec_dst_fw、ss_spec_dst_bp两个列表中,则交给china-dns处理
    2、china-dns,发现该不匹配china-route列表,则交dns-forwarder处理,则返回国外IP
    3、iptables检测到该IP不在ss_spec_dst_fw、ss_spec_dst_bp和china-route中,则代理访问(microsfot.com没有被墙,这个可以通过自定义custom_bypass.conf,国内dns解析)

    有个疑问 :
    就是两种情况下,正常luci-app-shadowsocks只是设置了忽略国内ip集不走代理(这个策略是luci-app-shadowsocks添加到防火墙),但是ss_spec_dst_fw、ss_spec_dst_bp这两个Ip集是哪个软件添加到防火墙策略中的??

    1. 头像F 回复

      看了luci-app-shadowsocks 中的 ss-rules增加到防火墙策略中的

  9. 头像Bubu 回复

    googleapis.cn存在DNS污染问题,请问如何解决?

  10. 头像z 回复

    请问有必要把服务器端换成ssr吗

发表评论

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

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