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下图形化配置,大大简化了配置过程。配置完成后,路由器本身获得自动翻墙能力,所有连入该路由的设备都可无障碍访问被墙的站点。是运行于路由器的透明代理。

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

顺便吐槽一下OP/LEDE的包名,这也是各种Linux Distribution的通病了吧,OpenWrt里的ip,到了LEDE里弄成俩:ip-tiny和ip-full,ca-certificates也变成俩,多出来一个ca-bundle,真是日了狗了,搞这篇文章时候被这俩不同系统的不同之处弄得抓狂。

方案简介
本文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,700 条评论

  1. Danny 回复

    博主您好!
    经过几天的摸索(本人纯属小白)得出如下经验:
    1、Chromecast能连接wifi但无法访问互联网的问题得到解决,就是必须用:按域名指定是否走代理,上面一种方法不行。
    2、一个细节希望博主强调一下:“I. China-List强制直连 自定义域名强制直连” 和 “II. GFWList强制走代理 自定义域名强制走代理” 的 “.sh” 文件千万不能建立在 “ /etc/dnsmasq.d” 目录下,否则将会导致 LuCI网页反应缓慢且无法上网!
    3、有个不是透明代理的问题而是LEDE本身的问题,希望博主或各路技术大师有时间帮忙测试下:用LEDE x86_64 软路由器(其它硬路由没有测试LEDE固件),plex媒体中心(服务端+客户端)用客户端观看服务端视频非常卡,经常停顿缓冲,而且服务端电脑(或者NAS)的CPU消耗一直是99%,而用其它非LEDE固件硬路由器(我用的是华硕AC87U)则没有这个问题。

    1. cokebar 文章作者 回复

      1. Chromecast本身强制使用8.8.8.8/8.8.4.4做域名解析,因此如果要解决,一种方式是开启UDP透明代理,另一种是使用iptables劫持8.8.8.8/8.8.4.4的53端口UDP流量到dnsmasq
      2. dnsmasq会包含/etc/dnsmasq.d下任何文件作为配置文件的一部分,这个目录除过dnsmasq的配置文件不能放任何其他东西
      3. 服务端99%的话,估计是碰上Plex转码了,这个非常消耗CPU;默认设置下,Plex server会检测是否是同一个内网网段,是的话就会直接推送原文件(home streaming模式),没有转码,基本不消耗CPU;如果检测不在同一个内网,就会转码(internet streaming模式),具体转的分辨率和码率按设置的来,这个主要是为了防止源文件码率过大,而上传带宽不足导致播放卡顿,然而转码本身非常消耗CPU。两种方式解决:一种是调整网络配置,让Plex player和server在同一个内网环境下,使得播放时候归到home streaming模式来。另一种就是调整player的internet streaming设置,改成“原始数据”,来强制播放原文件。

  2. Danny 回复

    麻烦博主讲解一下“调整网络配置,让Plex player和server在同一个内网环境下” 的具体操作,谢谢!本人小白,实在不好意思。

    1. Danny 回复

      因为我所有电脑和NAS本身都在同一个内网环境下,自然Plex player和server在同一个内网环境下,只不过不是提供IP访问,而是通过https://app.plex.tv访问,之前用华硕路由器的时候没有发生过转码的问题,只是用了LEDE软路由就出现转码的问题了(认为是外网访问),应该是软路由哪里没有设置好。

      1. Danny 回复

        关于plex的问题终于解决:打开路由器管理页面 网络-DHCP/DNS-基本设置-去掉“重绑定保护”勾选-保存&应用,刷新本机电脑dns缓存: cmd-输入: ipconfig /flushdns 。
        在此多谢博主教程和指导,也希望遇到同样问题的小白少走弯路!

  3. muronghan 回复

    请问,额外的优化中提到的,“从luci-app-shadowsocks 1.7.0开始已经默认开启shadowsocks的TFO功能,因此只需完成上面的步骤即可,shadowsocks这边无需额外的步骤。最后重启一下shadowsocks即可”,是什么意思?是不是只需在luci里勾选fast open的选项,而不需要修改 /etc/sysctl.conf并添加“net.ipv4.tcp_fastopen = 3”?

    1. cokebar 文章作者 回复

      sysctl还是要改的,这是从系统层面打开TFO,而应用本身的支持也要打开,luci-app-shadowsocks的步骤之前有误,现在已更新。

  4. 引用: Synology Shadowsocks + LEDE (OpenWRT) 實時翻牆筆記 | Whisley's Blog

  5. Danny 回复

    请教博主,避免高端口走代理,自定义这样写可以吗:-m multiport –destination-port 22:1023,28888, … , …

    1. cokebar 文章作者 回复

      可以 但是最多15组,官网的文档说明:
      http://ipset.netfilter.org/iptables-extensions.man.html
      This module matches a set of source or destination ports. Up to 15 ports can be specified. A port range (port:port) counts as two ports. It can only be used in conjunction with one of the following protocols: tcp, udp, udplite, dccp and sctp.
      [!] –source-ports,–sports port[,port|,port:port]…
      Match if the source port is one of the given ports. The flag –sports is a convenient alias for this option. Multiple ports or port ranges are separated using a comma, and a port range is specified using a colon. 53,1024:65535 would therefore match ports 53 and all from 1024 through 65535.
      [!] –destination-ports,–dports port[,port|,port:port]…
      Match if the destination port is one of the given ports. The flag –dports is a convenient alias for this option.
      [!] –ports port[,port|,port:port]…
      Match if either the source or destination ports are equal to one of the given ports.

  6. 小白白 回复

    2. 添加gfwlist和China-List配置文件中:将China-List中的DNS改成你ISP的DNS,问一下飞羽老大:你ISP的DNS,是中国联通还是上海联通的DNS好了,就是哪一级的。学习飞羽大佬

    1. cokebar 文章作者 回复

      设置成WAN口自动获取的DNS的IP即可,这个就是ISP的DNS

  7. JJJ 回复

    博主 我选了忽略解析文件之后 新浪微博 图片不能显示

    现在我把那个去掉之后SS会有什么影响啊?

    1. JJJ 回复

      博主 我搞定了 我把114换成自己的DNS就对了

  8. i-like 回复

    问一下,同样的结构,dnsmasq+chinadns+dns-forwarder(用的是hev-dns-forwarder)部署在ubuntu上,就不解析不出来google这类域名,请问是什么问题?ubuntu也开了ss-redir且允许upd。

  9. kentooo 回复

    你好,按照你的教程去设置真的挺不错的,,

    但是目前有个小问题,我的电脑开迅雷满速下载东西的时候,访问网站直接dns无法解析,无论国内还是国外网站都是如此,请问这个问题有方法解决么?

  10. V 回复

    请问我路由是一个二级路由(和人合租的房子),通过网线连的,这里的isp dns该用什么?用主路由分配的192.168.1.1吗?还有就是按上面的流程走完后图片和视频都打不开了,打开网站的速度也很慢不知道为什么。

发表评论

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

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