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-shadowsocks 3.0.1及以上版本,搭配 luci-app-shadowsocks 1.6.0及后续版本。

所需软件列表
对于OpenWrt,如果所用网络环境直连sourceforge.net和downloads.openwrt.org/downloads.lede-project.org没有问题的话,可以直接使用作者提供的软件源安装及更新SHADOWSOCKS

如果直连遇到困难(无法连接或者过程中下载总是中断),请继续下面的步骤来安装。实测国内许多ISP,执行 opkg update 和 opkg install 下载安装的时候都可能会遇到卡住、中断的情况,请多试几次。如果尝试多次仍然失败,请参考下面的依赖列表,手动至官方下载站点手工下载。

依赖包要装全!依赖包要装全!依赖包要装全!重要的事情说三遍!遇到安装问题请参考下列以来列表,看自己装全了没有!

依赖列表
安装过程中如果出现错误提示无法解决,可以留言。LEDE已发布正式版,建议从OpenWrt更新至LEDE。本篇文章将逐步放弃更新OpenWrt的步骤,最终将只描述LEDE上的步骤。

OpenWRT CC 15.05.1 及更早版本安装步骤
LEDE 安装步骤
二、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 拾遗》

1,741 条评论

  1. eddy 回复

    楼主你好,按照你的步骤在树莓派3和硬改的tplink742n中都顺利配通了,非常感谢。只是有一点深感疑惑,在设置代理方案一节中的代理类型如果选择正常代理的话,将导致无法访问国内站点,包括路由器自己。因为我的路由器是专门用来使用ss的,所有连上的设备默认就是要使用ss的,所以我就设为正常代理。我在这一步折腾了好久,两种设备都是一样的问题,一直觉得可能是防火墙配置有问题,但最终发现,只能选直接连接模式,每个连上的设备都要手工添加权限。楼主可否注意到这个问题?谢谢。

    1. eddy 回复

      忘了说场景,要配置的路由是在主路由之后的一个无线路由器。

    2. 木木 回复

      HOSTS和解析文件选项卡,勾中“忽略解析文件”
      =========================
      这个选项不勾选。

      1. cokebar 文章作者 回复

        不应该这么做 因为会引入DNS污染

        1. 木木

          但是按原文设置,9、15以前可以,后来就不行了。这2天卸载后重新装SS、chinadns,问题和eddy说的类似,开启SS后,连有些国内网站都不能访问。昨晚误操作,没勾中“忽略解析文件”,一切正常使用中。奇怪

        2. 木木

          终于搞好了,管理员请删掉我以前的留言,以免误导网友。简单记录一下过程,供其他朋友参考。
          1、ShadowSocks配置 — 开启“透明代理”和“SOCKS5代理”,“端口转发”停用。
          2、ChinaDNS配置 — 本地端口5353,上游服务器“114.114.114.114,8.8.8.8”,其中“114.114.114.114”为ISP提供的DNS,“8.8.8.8”为境外网的DNS。
          3、DHCP/DNS配置 — DNS 转发填写“127.0.0.1#5353”,勾选“忽略解析文件”。

          ok,搞定收工。

      2. cokebar 文章作者 回复

        如果按照文中配置了dnsmasq的gfwlist,那么list中的会强制转发到国外DNS不会污染,所以list中的应该是正常的,非list中的网站则可能会引入dns污染。国内无法访问的话还是要检查一下chinadns的国内dns解析是否正常,以及如果配置了dnsmasq的chinalist,那个list中是否正常

    3. cokebar 文章作者 回复

      1. 你在dnsmasq chinalist以及chindns里填入的国内DNS是多少?
      2. 你连不上国内网站的时候,访问控制里“代理类型”和“代理自身”两个选项分别是什么?

      1. eddy 回复

        1. 都是本地isp提供的网关地址
        2. 代理类型选normal,代理自身选normal

        谢谢

        1. cokebar 文章作者

          不应该是isp网关地址 应该是DNS地址啊,网关和ISP的DNS一般是不同的

        2. eddy

          那个确定是dns,是在主路由的界面上看到的,可能不是网关地址(记错)。也试过填114.114.114.114,是一样的情况。在log里可以看到域名解析的请求指向了这个地址,但是得不到response。

        3. cokebar 文章作者

          如果ISP的DNS为内网地址,尝试手工在chnroute文件里面添加这个IP,否则ChinaDNS会把这个IP当作国外DNS处理从而国内解析结果会被filter掉。我不确定是否有效。

        4. eddy

          我有空试一下,谢谢。不过设为114.114.114.114,也是同样现象,不知这样添加有没有效果,这个地址应该在列表里有的。

        5. JJJ

          你把114.114.114改成192.168.1.1这种就是你进主路由器的IP

      2. JJJ 回复

        “如果ISP的DNS为内网地址,尝试手工在chnroute文件里面添加这个IP,否则ChinaDNS会把这个IP当作国外DNS处理从而国内解析结果会被filter掉。我不确定是否有效。”

        我把114改成192.168.0.1了 国内网站如果在accelerated-domains.china里面没有的话就会提示找不到 XXX的服务器 DNS 地址。

        是不是得自己去chinadns_chnroute.txt里面添加192.168.0.1这个地址啊?如果要添加的话/后面得填多少?
        谢谢

    4. eddy 回复

      感谢楼主的提醒,遇到网络配置和防火墙配置,头脑就容易不清楚。DNS地址我在chinadns的列表里查了是有的。我又想起我的局域网地址是不是应该也在这个列表里,结果是没有。把局域网的地址加上之后,再把代理类型切换成normal,就都正常了。连上路由器的所有设备默认是可以用代理的了。一切都完美了。建议楼主在文章里补一句,如果局域网的ip不是普通的192.168开头的,需要手工添加到chinadns列表。十分感谢。

  2. woody 回复

    大大好!搜了好多教程,最后还是跟着你的做,成功的挂上SS了,十分感谢!我主要是玩switch游戏需要用,家里nat测试是D,根本联机不了,我挂了SS后开启udp,nat显示A!可是依然无法联机,立马在switch上测试nat,又变回D了,过一会又变回A,不知道在游戏这方面还需要做什么吗?关于dns,我路由器上除了装chinadns,就没做过啥了,nat这么不稳定变化跟dns有关系吗?

    1. cokebar 文章作者 回复

      多半和DNS无关。游戏联机时如果需要玩家和玩家直接建立数据连接,并且玩家主机处于nat之后,那么就需要udp穿透技术,而ss-redir下的udp透明代理可能会造成游戏使用的udp穿透技术失效,导致无法联机;加速游戏最好使用VPN,自建服务器的话可以用Openconnect VPN,或者OpenVPN over shadowsocks等;OpenWrt/LEDE直接支持,路由上专门配置其中一个LAN口走VPN,主机接到这个LAN口即可;按IP或者MAC分也行。

  3. Ray 回复

    非常感谢,安装成功

  4. Kkang 回复

    请教,对于MTK7620芯片,是LEDE还是openwrt更合适,性能更好,更稳定?

  5. kingkangsiu 回复

    在luci界面dns-forwarder和chinadns使终都是未运行,SS透明代理正常,在SSH下运行没有任何提示,版本是OpenWrt Chaos Calmer 15.05.1 20170128 (musicbox修改版),是不是还有什么依赖服务?

  6. kingkangsiu 回复

    刚刚试了一下客户机好像翻墙成功了,能打开FB,YT,LUCI界面DNS-forwarder和chinadns还是显示未运行,好坑爹。

  7. shikkoku 回复

    如何使gfwlist2dnsmasq.sh脚本定期自动运行?我想把dnsmasq.d的目录转移到tmp下,配置文件太大了,16M闪存空间吃紧。

    1. cokebar 文章作者 回复

      用crontab可实现

      1. shikkoku 回复

        但我试过直接在计划任务里用sh generate_dnsmasq_chinalist.sh -d 114.114.114.114 -p 53 -s ss_spec_dst_bp -o /tmp/dnsmasq.d/accelerated-domains.china.conf 触发后无生成文件。是不是有其他写法?

  8. moogle 回复

    有2个问题想咨询:
    1、teamviewer连接变得很慢,还有ps4某些游戏连接psn很慢,如果针对这些进行优化?
    2、如果我想让路由器完全关闭翻墙,正常使用teamviewer,我停止了chinadns,ShadowSocks和DNS-Forwarder,这样无法上网,该如何调整设置?

    1. nullee 回复

      只关掉SS就可以了吧

    2. cokebar 文章作者 回复

      1. 访问控制→附加参数中选择只代理22-1023端口,避开Teamviewer的端口;对于PS4,如果代理服务器速度快的(如亚洲服务器),建议设置成全局并开启UDP代理,并且chinalist里playstation的相关域名要去掉避免其解析到国内IP;如果代理服务器速度不快的建议不要走代理,意义不大。
      2. 关闭代理主要是两个环节:①将透明代理关掉;②还原DNS为ISP的DNS,因此这两步即可:
      将ss访问控制中设置成代理类型为直接连接(代理自身的选项不要改成直接连接,保持为正常代理或者全局代理),然后在DHCP/DNS设置中,将之前设置的127.0.0.1#5353改成ISP的DNS即可。
      由于我的方案里ss和DNS有耦合性,因此没有直接关闭ss,而是修改代理类型为直接连接,否则的话步骤会变多,比较麻烦。

    3. L 回复

      修改/etc/dnsmasq.d/custom_bypass.conf
      server=/teamviewer.com/114.114.114.114(或者换成你需要的NDS)#53
      ipset=/teamviewer.com/ss_spec_dst_bp

  9. nullee 回复

    你好,非常感谢您分享了如此精彩细致的教程,我是用raspberryPI3刷LEDE做一个智能翻墙的无线路由器B,它的WAN口是连在我家里的路由器A的LAN口上自动获取IP上网,路由器A上的wlan默认不翻墙,但只要连上路由器B的wlan就可能智能翻墙。做好了以后,这个LEDE盒子就能随身携带,走到哪里插上LAN就能有能翻墙的wlan。按照您给的教程一步步的做下来(做到了ChinaDNS,没有加入chinalist和gfwlist),发现ChinaDNS好像并没有起作用,流量还是全都走了SS的代理,希望能指点一下。另外想补充一下,可以加入KCPTUN来进一步提升翻墙体验。

    1. cokebar 文章作者 回复

      1. 看看chinadns_chnroute.txt文件是否正常,走不走代理是用IP来判断的,ChinaDNS不起决定性作用,只是优化解析结果。
      2. kcptun为golang语言编写,体积较大(好几MB),不太适合路由器使用;目前比较流行的加速方案是服务器开启bbr的tcp流控方案,做服务端的单边tcp加速,效果和锐速差不多,kvm和openvz都可以用,openvz稍麻烦点

      1. nullee 回复

        有没有测试chinadns_chnroute.txt是否正常工作的方法?

      2. nullee 回复

        问题解决了,在设置ChinaDNS上游DNS的时候我设成了:192.168.0.1,127.0.0.1#5432
        之前的想法是我就设成我上一级路由的网关就行了,结果不行
        把192.168.0.1改成ISP提供的DNS以后,一切妥妥的了
        这其实教程里有讲说要设成ISP的DNS,但是我自己发挥了一下,看来失败了
        可能是没弄明白ChinaDNS的原理:
        ChinaDNS原理是,向所有列表中的DNS server发DNS请求,判断结果可信任条件是:国内DNS解析出的是国内IP,国外DNS解析出的是国外IP

  10. shikkoku 回复

    你是不是忘了设置访问控制了,需要chinadns_chnroute.txt来控制流量。

    1. nullee 回复

      是不是外网忽略那里选ChinaDNS,那个选了的

发表评论

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

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