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. cokebar 文章作者 回复

      请开梯子打开

      1. SingChu 回复

        还是回到openwrt了,但现在出现个问题,安装好shadowsocks一切正常,直接全局翻,安装好dns转发和chinadns并且把dhcp上的dns转发和忽略解析文件设置好之后,无论墙外墙内都上不去了,比如ping baidu.com,返回无法找到主机,估计是dns出问题了,我对照你的图片检查了好几次,没发现问题所在,很奇怪啊。

  1. zheng 回复

    博主好:
    按照博主的方法翻墙成功,但是网速很慢,刷网页还行,等待30秒左右,但是有时第一次连接不上,需要再刷新下。看YOUTUBE视频是个问题,显示一直缓冲。国内的网站速度没什么影响。期待您解惑。

  2. 小小白 回复

    谢谢飞羽老大的教程,但是我是小白这边有几个问题一直看不懂求一下老大解释一下:
    III. DNS转发链的优化配置
    1. 修改dnsmasq配置:

    OPENWRT:

    新建目录 /etc/dnsmasq.d
    LEDE:

    新建目录 /etc/dnsmasq.d
    在新建目录这一步是直接在putty: /etc/dnsmasq.d这个就可以了吗!

    1. cokebar 文章作者 回复

      请先自行学习linux的命令行操作。新建文件夹可以使用mkdir命令,也可以直接使用WinSCP之类的SFTP文件管理工具。

      1. 小小白 回复

        非常感谢老大抽个时间回复,我真的是小白google了一下还是不能确认所以才来问一下。好的我知道了。谢谢

  3. 小小白 回复

    我打开没有问题

  4. wonpn 回复

    想问下,透明代理中的UDP服务器打开,服务器端是UDP relay enabled,访问控制里
    改成留空-做全局代理:外网完全连不上了,国内国外都连不上。
    改成chinsdns:就可以连接国内国外网了。
    想知道怎么回事

    1. cokebar 文章作者 回复

      改成chinadns是什么意思?UDP服务器是UDP透明代理,chinadns是防污染DNS,二者完全不同的两个东西。

      1. wonpn 回复

        就是访问控制 – 外网区域 – 被忽略IP列表,选成”chinadns路由表“。

  5. Danny 回复

    博主您好,用您的教程顺利在LEDE X86_64软路由上部署并无障碍上网,唯一的缺憾是chromecast无法使用,显示:“已连接到*****,但是无法访问互联网”。试过网上的N种方法还是不行,家里有两款chromecast设备,一个是Nexus player,还有一个是ChromecastUltra,其中Nexus player可以更改dns,能顺利连接上网络并cast,而ChromecastUltra的dns是固化的,无法更改而无法连接互联网。

    看网上有两种方法:

    在/etc/firewall.user上增加两条规则即可:
    iptables -t nat -A PREROUTING -s 192.168.1.1/24 -p udp –dport 53 -j DNAT –to 192.168.1.1
    iptables -t nat -A PREROUTING -s 192.168.1.1/24 -p tcp –dport 53 -j DNAT –to 192.168.1.1
    192.168.1.1是路由器IP,根据自己的路由器改正。

    iptables -I PREROUTING -t nat -p udp -d 8.8.4.4 –dport 53 -j REDIRECT –to-ports 53
    iptables -I PREROUTING -t nat -p udp -d 8.8.8.8 –dport 53 -j REDIRECT –to-ports 53

    两种方法都试过还是无法解决ChromecastUltra的问题,其中把“192.168.1.1/24”改成ChromecastUltra还是不成功,实在是没有办法了想求救博主,希望博主帮忙解决下,万分感谢!!!

    1. Danny 回复

      修正:”其中把“192.168.1.1/24”改成ChromecastUltra还是不成功“
      应该是:”其中把“192.168.1.1/24”改成ChromecastUltra的IP还是不成功“

    2. cokebar 文章作者 回复

      第一种(假设chromecast的ip是192.168.1.101,路由是192.168.1.1):
      iptables -t nat -I PREROUTING -s 192.168.1.101 -p udp --dport 53 -j DNAT --to 192.168.1.1
      第二种那两条命令看起来没问题。不过这两种方式我都没测试过,如果你还是不行我可以测试一下看看。
      测试时候,先通过SSH敲入命令测试,如果成功,就加到/etc/firewall.user,加完要重启一下

    3. cokebar 文章作者 回复

      如果SSH下测试一种不成功,记得先删除规则(把原来命令的-A或者-I换成-D后重新执行就是删除),再添加另一种。或者干脆重启防火墙(或者重启路由)。

      1. Danny 回复

        博主您好,我按照你的方法测试了还是不行,麻烦您帮忙测试下,谢谢

  6. Danny 回复

    博主您好,我按照你的方法测试了还是不行,麻烦您帮忙测试下,谢谢

  7. wang 回复

    Shadowsocks 可以改成ShadowsocksR吗,现在啬好像可以检测到$$流量。

    1. 小小白 回复

      飞羽好像没有搞酸酸乳。就搞酸酸

  8. yuan1984 回复

    博主您好!

    执行 root@LEDE:~# sh gfwlist2dnsmasq.sh -d 127.0.0.1 -p 5311 -s ss_spec_dst_fw -o /etc/dnsmasq.d/dnsmasq_gfwlist.conf 时出现如下错误请问如何解决?

    gfwlist2dnsmasq.sh: line 2: syntax error: unexpected newline

    1. cokebar 文章作者 回复

      文本文档要使用unix格式(换行符问题)

  9. yuan1984 回复

    谢谢,我是直接按照教程输入指令一步步操作的,没有从网站直接下载或者编辑过gfwlist2dnsmasq.sh,请问如何确保是unix格式?需要其他什么指令?

    1. cokebar 文章作者 回复

      又想了想可能不是换行符问题 要说shell其实我也只是会用的程度 也不是很确定原因。要么是文件不完整或者格式出问题,要么就是shell有点问题了。试着直接 ./gfwlist2dnsmasq.sh xxxxx 而不是sh gfwlist2dnsmasq.sh xx 看看

      1. yuan1984 回复

        你好,换成./开头执行就OK了,非常感谢

    2. cokebar 文章作者 回复

      不知道你用的哪个shell,我的脚本已经做成sh的格式尽可能兼容各种shell了,不过可能还是有点兼容性问题

发表评论

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

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