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.lede-project.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,018 条评论

  1. martian 回复

    可以使用 opkg download dnsmasq-full命令下载包,下载好的就在当前文件夹下

  2. Evan 回复

    博主你好,用了本方案之后,最近一段时间发现www.icloud.com和appleid.apple.com无法访问,有些iCloud同步也不太正常,不知你是否有遇到类似问题。

    1. Evan 回复

      发现貌似是我的VPS IP被Apple屏蔽了…换了一个就好了…汗

  3. Captain Tang 回复

    我觉得应该是你手机手动设置了dns,取消手动设置,用获取的

  4. Fe 回复

    shadowsocks+V2ray plugin已经加入了飞羽可以更新教程,支持一下吗!

    1. cokebar 文章作者 回复

      使用上和simple-obfs类似。最近是越来越懒得折腾了,应该回更新,但不保证时间

  5. 感谢版主 回复

    运行版主的脚本会报错,解决方法
    opkg install libustream-mbedtls
    执行export SSL_CERT_DIR=/etc/ssl/certs,并把这句添加到 /etc/profile中重启。

    1. cokebar 文章作者 回复

      按照我的步骤安装了ca-certificates ca-bundle curl就不会有问题。
      你出现这个问题是没有装curl,所以脚本检测没有curl会再检测wget,而openwrt默认带的是busybox-wget,且不支持ssl,所以需要安装libustream-mbedtls或者libustream-openssl才能让其支持ssl。或者安装gnu-wget(opkg install wget)也可以支持ssl。而手工安装的curl也是默认支持ssl的。除过让curl/wget支持ssl之外,还需要安装根证书才能完整支持https,所以需要安装ca-certificates ca-bundle,这两个包会下载所有openwrt带的可信根证书和中间证书,这样curl/wget就可以完整支持https了,export SSL_CERT_DIR=/etc/ssl/certs是不用去配置的,wget默认就会去找这个目录,而且不安装ca-certificates ca-bundle配置这句也是不行的,因为不装的话/etc/ssl/certs里面是没有根证书的
      详情解释见脚本github repo的readme.md:
      https://github.com/cokebar/gfwlist2dnsmasq#openwrt-usage

  6. 123 回复

    自动脚本好像有问题,提示:
    sh: syntax error: unexpected end of file (expecting “then”)
    应该是写错了吧。

  7. Captain Tang 回复

    把sh脚本中shadowsocks-libev-static改成shadowsocks-libev,保存重新运行即可

  8. lele 回复

    按照您说的方式完成了配置,但是透明代理处始终显示未运行,Wifi能上网,但是翻不了墙,求教

    1. lele 回复

      抱歉,那个问题我用重启路由器的办法解决了。但是新的问题是我在配备了WAN口之后,路由器就连不上网了,不知道是不是因为我用的r7500路由器还有一个WAN6的原因,我在WAN6设置了“::1”,但是问题还是没有解决。

      1. cokebar 文章作者 回复

        WAN6都是有的,默认配置了dhcpv6客户端协议,用于wan口ipv6协议,和你的问题相关性不大。如果WAN口手工指定DNS为127.0.0.1后路由器自身无法访问web但是连wifi的设备可以,那么检查一下dnsmasq是否监听的是0.0.0.0:53。如果确实是,那先把设置改回去让路由能联网,然后装一个dig工具(包名忘了,请自行google一下),在路由上用dig检查一下路由自身的解析:
        dig @127.0.0.1 -p 53 http://www.google.com

  9. 5cyl 回复

    执行gfwlist2dnsmasq.sh脚本时,总是报 :
    Error: Missing Dependency.
    Please check whether you have the following binaries on you system:
    which, sed, base64, mktemp.

    openwrt 18.06.2环境。请问怎么解决?

    1. cokebar 文章作者 回复

      base64没装吧

  10. 何东升 回复

    想问一个问题,假设网站的服务器在国外,但是GFW并没有封锁,那么虽然从国内解析了DNS,但是ip属于国外,所以还是会走代理咯?

    1. cokebar 文章作者 回复

      是的。此文方法根据ip判断,除非将其配置到dnsmasq的custom bypass规则中(按照本文“按域名指定是否走代理”中所说的方法配置),否则只要是国外IP均走代理。如只需gfwlist中走代理,请参考本博客的gfwlist方案

发表评论

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

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