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 文章合集目录

五、写在最后

本人作为一名普通使用者,水平有限,且文章也缺乏校审,肯定有错误存在,也有很多能改进的地方,如有意见或建议,请留言指出,万分感谢! 如果使用时遇到问题也欢迎留言,本人如果有空都会回复,不过请一定要将出错信息贴出来,有些错误信息需要到系统日志中查看。

1,971 条评论

  1. kingwong 回复

    附上系统日志:我DNS 转发哪里设置的监听地址设置的是:127.0.0.1但是看日志怎么变成0.0.0.0了。还请指点:
    Tue Apr 10 11:23:05 2018 daemon.err chinadns[3733]: Tue Apr 10 11:23:05 2018 chinadns.c:597 bind: Address in use
    Tue Apr 10 11:23:05 2018 daemon.err chinadns[3733]: Tue Apr 10 11:23:05 2018 Can’t bind address 0.0.0.0:5353
    Tue Apr 10 11:23:06 2018 daemon.err ss-redir[2840]: getpeername: Socket not connected
    Tue Apr 10 11:23:06 2018 daemon.err ss-redir[2840]: getpeername: Socket not connected
    Tue Apr 10 11:23:10 2018 daemon.err chinadns[3761]: Tue Apr 10 11:23:10 2018 chinadns.c:597 bind: Address in use
    Tue Apr 10 11:23:10 2018 daemon.err chinadns[3761]: Tue Apr 10 11:23:10 2018 Can’t bind address 0.0.0.0:5353
    Tue Apr 10 11:23:13 2018 daemon.err uhttpd[2469]: luci: accepted login on /admin for root from 101.89.64.6
    Tue Apr 10 11:23:15 2018 daemon.err chinadns[4078]: Tue Apr 10 11:23:15 2018 chinadns.c:597 bind: Address in use
    Tue Apr 10 11:23:15 2018 daemon.err chinadns[4078]: Tue Apr 10 11:23:15 2018 Can’t bind address 0.0.0.0:5353

    1. cokebar 文章作者 回复

      请不要贴这么长的日志,你的问题是chinadns的,摘出chinadns的即可;我已经帮你编辑过了。你这个是5353端口被占用,导致chinadns无法bind这个端口。请检查那个程序占用了这个端口。(netstat -lnp)

      1. kingwong 回复

        不好意思。了解了。

      2. kingwong 回复

        您好。我把占用了5353端口的程序警用了。重启设备后,chinaDNS\DNS转发\透明代理都在运行了。
        whatismyip:也是显示了我服务器地址的IP。
        我看了一下日志,还有如下错误提示:
        Tue Apr 10 13:30:43 2018 daemon.err ss-redir[2825]: getpeername: Socket not connected
        Tue Apr 10 13:30:43 2018 daemon.err ss-redir[2825]: getpeername: Socket not connected
        Tue Apr 10 13:30:43 2018 daemon.err ss-redir[2825]: getpeername: Socket not connected
        Tue Apr 10 13:30:43 2018 daemon.err ss-redir[2825]: getpeername: Socket not connected
        Tue Apr 10 13:30:43 2018 daemon.err ss-redir[2825]: getpeername: Socket not connected
        目前是无法打开google.com.facebook.com等网站。线路是正常的。请大神有空指点一下如何排查。

  2. kingwong 回复

    另外说明一下我的网络结构:
    我的LEDE是作为主路由的旁路 ,纯跑服务。主路由通过策略路由指点哪些数据需要跑服务,需要就从LEDE经过,然后从LEDE的WAN口到主路由做出口。
    是不是这样的结构下相关配置涉及的端口,我也需要在主路由端口映射一下。

  3. kingwong 回复

    显示如下:
    udp 0 0 :::5353 :::* 2625/avahi-daemon:
    改一个没被占有的端口是否可以?

    1. cokebar 文章作者 回复

      avahi不用可否,我查了一下是mDNS,我对这个不了解,不清楚是否会影响到DNS防污染解析

      1. kingwong 回复

        我先禁用了测试一下。服务都能起来,就是网站不能打开。
        刚看了一下WAN口获取不到外网IP地址。

      2. kingwong 回复

        按您之前回复其他朋友的内容测试了一下:
        把dns-forwarder的监听地址改成0.0.0.0,然后 dig @路由器 -p 5311 http://www.google.com, dig @路由器 -p 5353 http://www.google.com 分别测试dns-forwarder、chinadns是否正常。
        显示如下:

        KingWongs-Mac:~ King$ dig @192.168.2.1 -p 5311 http://www.google.com

        ; <> DiG 9.10.6 <> @192.168.2.1 -p 5311 http://www.google.com
        ; (1 server found)
        ;; global options: +cmd
        ;; Got answer:
        ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27918
        ;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 1

        ;; OPT PSEUDOSECTION:
        ; EDNS: version: 0, flags:; udp: 512
        ;; QUESTION SECTION:
        ;www.google.com. IN A

        ;; ANSWER SECTION:
        http://www.google.com. 72 IN A 108.177.125.99
        http://www.google.com. 72 IN A 108.177.125.105
        http://www.google.com. 72 IN A 108.177.125.106
        http://www.google.com. 72 IN A 108.177.125.103
        http://www.google.com. 72 IN A 108.177.125.104
        http://www.google.com. 72 IN A 108.177.125.147

        ;; Query time: 95 msec
        ;; SERVER: 192.168.2.1#5311(192.168.2.1)
        ;; WHEN: Tue Apr 10 15:48:23 CST 2018
        ;; MSG SIZE rcvd: 139

        KingWongs-Mac:~ King$ dig @192.168.2.1 -p 5353 http://www.google.com

        ; <> DiG 9.10.6 <> @192.168.2.1 -p 5353 http://www.google.com
        ; (1 server found)
        ;; global options: +cmd
        ;; Got answer:
        ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23590
        ;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 1

        ;; OPT PSEUDOSECTION:
        ; EDNS: version: 0, flags:; udp: 512
        ;; QUESTION SECTION:
        ;www.google.com. IN A

        ;; ANSWER SECTION:
        http://www.google.com. 28 IN A 108.177.97.99
        http://www.google.com. 28 IN A 108.177.97.147
        http://www.google.com. 28 IN A 108.177.97.103
        http://www.google.com. 28 IN A 108.177.97.106
        http://www.google.com. 28 IN A 108.177.97.104
        http://www.google.com. 28 IN A 108.177.97.105

        ;; Query time: 103 msec
        ;; SERVER: 192.168.2.1#5353(192.168.2.1)
        ;; WHEN: Tue Apr 10 15:48:43 CST 2018
        ;; MSG SIZE rcvd: 139

      3. kingwong 回复

        今天看了一下系统日志多了一个报错,还请指点。这个message too large的报错一直重复出现。
        Tue Apr 10 20:50:48 2018 daemon.err chinadns[2676]: Tue Apr 10 20:50:48 2018 chinadns.c:628 local_ns_initparse: Message too large
        Tue Apr 10 20:50:48 2018 daemon.err chinadns[2676]: Tue Apr 10 20:50:48 2018 chinadns.c:628 local_ns_initparse: Message too large
        Tue Apr 10 20:50:48 2018 daemon.err chinadns[2676]: Tue Apr 10 20:50:48 2018 chinadns.c:628 local_ns_initparse: Message too large
        Tue Apr 10 21:49:37 2018 daemon.err ss-redir[6243]: server recv: Connection reset by peer
        Tue Apr 10 21:50:19 2018 daemon.err ss-redir[6243]: server recv: Connection reset by peer

        1. cokebar 文章作者

          这个我也不大清楚原因了,是否能正常解析?可以给aa65535发issue问问

  4. 小小白 回复

    shadowsocks-libev改为shadowsocks-libev-static。

  5. for 回复

    /packages/LEDE/base/mips_24kc 目录里面没找到 shadowsocks-libev(或shadowsocks-libev-static)客户端 !
    麻烦请cokebar抽空检查一下,谢谢!

    1. cokebar 文章作者 回复

      软件源是aa65535维护的,找我也没用啊

      1. for 回复

        哦哦,sorry 。谢谢,anyway。
        也许忘记了,过几天再检查吧。

  6. kingwong 回复

    今天看了一下系统日志多了一个报错,还请指点。这个message too large的报错一直重复出现。
    Tue Apr 10 20:50:48 2018 daemon.err chinadns[2676]: Tue Apr 10 20:50:48 2018 chinadns.c:628 local_ns_initparse: Message too large
    Tue Apr 10 20:50:48 2018 daemon.err chinadns[2676]: Tue Apr 10 20:50:48 2018 chinadns.c:628 local_ns_initparse: Message too large
    Tue Apr 10 20:50:48 2018 daemon.err chinadns[2676]: Tue Apr 10 20:50:48 2018 chinadns.c:628 local_ns_initparse: Message too large
    Tue Apr 10 21:49:37 2018 daemon.err ss-redir[6243]: server recv: Connection reset by peer
    Tue Apr 10 21:50:19 2018 daemon.err ss-redir[6243]: server recv: Connection reset by peer

  7. 小小白 回复

    hi!羽大打扰一下这边有一个小小的问题!我开始配置的时候是使用192.168.1.1 ,IP段配置的,没有问题;然后昨天接光猫把lan段改成了192.168.2.1,现在发现科学上网不行了(其他客户端可以使用),我想问一下这个是什么问题。谢谢羽大。

  8. 小小白 回复

    hi老大有空你这边要更新一下教程了。有些不少的地方更新了

  9. 洋葱王 回复

    老大……lede和openwrt合并了…………

    惊喜不惊喜
    意外不意外

    1. 西门子 回复

      你现在才知道,,,火星人你好!

    2. cokebar 文章作者 回复

      是的 太火星了。17.01已经改不回来了,就叫LEDE了,明天的版本可能会改回去吧

  10. Julie 回复

    “切换到WAN口设置→高级设置,取消“使用端局通告的DNS服务器”的勾选”,这个设置找不到,LEDE17.

发表评论

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

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