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/LEDE的一系列变化,以及作者aa65535的一系列更改,本文需要更新,下面的步骤仅供参考!本人应该会在近期休假期间更新本文。不排除鸽的可能:)

 

一、安装

适用于 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:

I. China-List强制直连 自定义域名强制直连
II. GFWList强制走代理 自定义域名强制走代理
四、其他

一些强烈推荐的额外设置项(涉及到更新、维护)可以参考:《Shadowsocks for OpenWRT / LEDE 拾遗》

需要自己搭建服务器的,可以参考:shadowsocks – libev 服务端的部署

推荐的VPS商家见:https://cokebar.info/about

本博客有关 shadowsocks 文章合集目录

五、写在最后

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

1,912 条评论

  1. Andy 回复

    哈哈 我想我的echo dot全局代理该如何操作?我现在google home mini可以用了

  2. 春夏秋冬 回复

    Shadowsocks服务器只支持输入ip吗?,可以用域名吗

  3. Oxygen 回复

    同问一下,如果shadowsocks支持域名就方便多了!

  4. 木木 回复

    请教站长,双ISP(移动、电信)如何实现访问分流?访问国内的网站走电信,访问境外网站走移动。网上搜索了很久,但是没看到在LuCI下设置的教程或者没有完整的方案,不知站长是否可以研究研究。谢谢了。

    1. cokebar 文章作者 回复

      首先,你需要知晓TCP/IP组网的知识;熟悉ip, iptables等命令。
      1. 如果你访问境外网站全走ss,那么你可以添加一条静态路由,指定你的ss的IP地址走移动的出口;
      如果你用mwan3做多wan负载均衡,mwan3里可以直接设置指定ip走指定的wan口,因此在mwan3中指定ss的服务器ip走移动的wan口就可以了。

      2. 如果你并不是所有国外流量走ss,但是依然希望所有国外流量走移动,那你可能需要chnroute,获取到chnroute后将其设置到某个ipset中(或者直接使用luci-app-shadowsocks自动建立的对应的ipset),然后给match到这个ipset的打上一个mark标记,然后配置路由表,有这个mark的路由到电信网关,而默认网关设置成移动的。可以参考这个:https://www.v2ex.com/t/213752

      1. 木木 回复

        谢回复。
        首先,你需要知晓TCP/IP组网的知识;熟悉ip, iptables等命令。
        不知道,只会按图索引。
        ==================
        如果你访问境外网站全走ss,那么你可以添加一条静态路由,指定你的ss的IP地址走移动的出口;
        lede下双wan口,请问这个静态路由要怎么设置?
        ==================
        如果你用mwan3做多wan负载均衡,mwan3里可以直接设置指定ip走指定的wan口,因此在mwan3中指定ss的服务器ip走移动的wan口就可以了。
        mwan3好像很复杂,没找到一个逻辑清晰的图片详细的教程,遗憾。
        期待站长发飙。

      2. 木木 回复

        今天试了一下,安装了mwan3,在规则中指定了ss的服务器ip走移动的wan口。好像没用,还是继续走电信的wan口。是不是还有设置不对?谢谢。

  5. Wonpn 回复

    想问下dnsmasq配置根证书,对于dns解析有什么作用?

    1. cokebar 文章作者 回复

      dnsmasq和根证书有啥关系?

    2. cokebar 文章作者 回复

      应该是我的叙述误导你了,安装根证书是因为,默认OpenWrt/LEDE不会去装任何根证书,因此wget/curl等命令是无法正常进行HTTPS通讯的(除非你强制忽略证书检查,众所周知这是非常不安全的)。由于本文里用到的脚本需要从github上下载文件,而github已经是强制全局https了,所以需要装一下根证书。

      1. wonpn 回复

        明白了,谢谢博主

  6. dog3 回复

    ss配合apple tv3的同学能来交流一下心得吗?
    俺自己的apple tv3时不时抽风呢。

  7. 开心就好 回复

    感谢大大的教程,顺利喝上了酸酸乳,但是有个疑问,我另外安装了ddns-scripts_aliyun,现在阿里云解析到的都是酸酸乳的IP地址。试过在china-list里加入ip查询的网站直连,或者是ddns-scripts_aliyun里就可以直接配置dns,但是没有效果,请问有啥解决方法吗~

      1. 开心就好 回复

        您好,早上没说清楚,按照您的教程ss可以上外网了,但是按照教程在custom_bypass.conf里设置强制直连的域名没有起作用,以下第一行最后是否需要加#53,不过即使加了好像也是没有起作用。
        =========================
        server=/checkip.dyndns.com/114.114.114.114
        ipset=/checkip.dyndns.com/ss_spec_dst_bp
        =========================
        因为我想用阿里的ddns服务,就安装了lede的ddns-scripts_aliyun插件,这个插件是到checkip.dyndns.com读取wan侧ip的,我在china-list中设置了这个域名的直连,但最终在阿里上显示的还是我ss的ip地址。

        1. cokebar 文章作者

          1. 建议读取wan口IP采取如下方式:
          luci里的DDNS设置中的高级设置里,IP地址来源选择“网络(network)”,地址来源选择wan,这种方式会使用openwrt/lede自带的脚本直接读取wan口的ip地址,最为直接,效果最好。
          2. 如果你有其他特殊原因必须使用访问checkip.dyndns.com的方式来获取IP地址的话,你需要强制配置wan口的DNS为127.0.0.1,否则路由器自身去访问cheip.dyndns.com的时候,会直接查询ISP的dns,不会走dnsmasq,从而你设置的bypass不会生效。因为大部分人不会不会遇到你的情况所以我在本文里没提这个步骤,不过在《Shadowsocks for OpenWRT / LEDE 拾遗》一文中的第一部分“1、让路由器本身走SHADOWSOCKS”提到了,按照那个步骤设置即可。不过既然你遇到了,我也就修改了本文,将这个步骤加进来了。

  8. CSVV 回复

    大师。我用你的这个方案用了一年多了,很顺畅,谢谢。我现在有一个问题想请教一下。我在看一个网站时,比如说 A.COM,解析出了1.1.1.1这个IP.这个是对的。但这个网站还有一个2.2.2.2的IP地址。我怎么让它能解析到2.2.2.2这个IP上来谢谢

  9. satoshinakamoto 回复

    感谢博主,折腾了很久,终于用博主的教程弄好了,衷心感谢

发表评论

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

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