Shadowsocks + GfwList 实现 OpenWRT / LEDE 路由器自动翻墙

本站发布的三种 shadowsocks 在 openwrt 上的自动翻墙方案:

1、Shadowsocks + ChnRoute 实现 OpenWRT / LEDE 路由器自动翻墙
2、Shadowsocks + Redsocks 实现 OpenWRT 路由器自动翻墙 (停止更新)
3、Shadowsocks + GfwList 实现 OpenWRT / LEDE 路由器自动翻墙

本方案依靠GFWList,List中的域名站点走代理,不在List中的域名不走代理,根据域名判断。然而其实本质上依然是根据IP判断是否代理IP走代理,dnsmasq-full可以将解析域名得到的IP加到一个ipset中,利用这个ipset来判断走不走代理。实际是完成了gfwlist(域名列表)到dnsmasq的ipset规则再到IP地址的转换。同样,本方案依然可以搭配ChinaDNS搭配使用,也可以使用ss-tunnel,或者是自己的DNS服务器。

本方案的优点明确,只有被墙的站点才走代理,但是gfwlist并不能100%涵盖被墙站点,而且有些国外站点直连速度远不如走代理,特别是你代理服务器速度较快,希望通过代理加速国外访问时,此方案就不是那么好用了。请酌情选择你所使用的方案。

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

一、安装

依赖列表
OpenWRT CC 15.05.1 及更早版本安装步骤
LEDE 安装步骤
二、配置shadowsocks

1、配置 /etc/shadowsocks.json ,格式如下:

请自行修改好服务器IP、端口号、密码、加密方式。

新建文件: /etc/init.d/shadowsocks :

修改文件权限:

然后启动shadowsocks,并设置开机运行:

最后检查一下是否正常启动了:

如果未能正确启动,尝试手动执行,看看报什么错:

额外的优化:

开启 TCP Fast Open (TCP快速打开,缩略为TFO)

需求: 系统内核版本≥3.7,shadowsocks-libev≥3.0.4,shadowsocks服务端开启tcp fast open。

修改 /etc/sysctl.conf ,加入如下一行:

执行如下命令使之生效:

配置文件 /etc/shadowsocks.json 增加一行:

最后重启一下shadowsocks即可:

 

2、配置dnsmasq和ipset

2.1. 将如下规则加入到“网络→防火墙→自定义规则”中(最后的1080是shadowsocks的本地端口 酌情修改):

如果你需要

2.2. 修改dnsmasq配置:

OPENWRT:

修改 /etc/dnsmasq.conf,在最后加入 conf-dir=/etc/dnsmasq.d

LEDE:

执行:

如果返回值为 uci: Entry not found 或者其他非  /etc/dnsmasq.d 的值,则执行:

2.3 添加gfwlist和China-List配置文件:

新建并进入目录  /etc/dnsmasq.d ,下载 dnsmasq_gfwlist_ipset.conf 后放入该目录。

自动生成配置文件的脚本,本人放在这里:https://github.com/cokebar/gfwlist2dnsmasq

你可能需要自行修改这个文件,格式如下:

三、配置防污染DNS

1. 步骤一,有三个方案:

方案一 (由于不加密 所以有风险 不推荐):

在代理服务器上搭建DNS服务来解析国外网站,可用dnsmasq或者pdnsd,监听非53端口。

比如说DNS服务器IP是:3.4.5.6,端口是5050,那么使用替换功能将 /etc/dnsmasq.d/dnsmasq_list.conf 里面的 127.0.0.1#5353 全部替换成 3.4.5.6#5050 即可。

最后重启路由器即可。

方案二 (如果此方案较稳定那么推荐这个方案 不过不少ISP会出现UDP方式不稳定的情况,如果遇到请用方案三):

使用ss-tunnel转发UDP的DNS请求,修改 /etc/init.d/shadowsocks 文件,如需修改上游DNS,请修改 DNS=8.8.8.8:53 字段,本地端口修改 TUNNEL_PORT=5353 :

最后重启路由器即可。

方案三:使用dns-forwarder将DNS转成TCP后走ss代理解析:

dns-forwarder的安装可参考:《Shadowsocks + ChnRoute 实现 OpenWRT / LEDE 路由器自动翻墙》一文中的安装部分,到文中提到的地址,下载安装dnsforwarder_x.x.xx_xxxx.ipk,luciappdnsforwarder_x.x.xx_all.ipk即可。

配置也很简单,luci界面,“服务”→”DNS 转发”(英文界面是DNS Forwarder),如图配置:

最后需要在自定义防火墙规则里再增加一句,来确保8.8.8.8是走代理的:

其他TCP查询方式可以参考:

TCP 方式查询解决 DNS 污染问题


2. 步骤二

在WAN口配置中如图所示,将DNS手动指定为127.0.0.1:

ss222

最后在DHCP/DNS设置中将你的ISP的DNS填入(或者使用114DNS等公共DNS)

dnsmasq_localdns

 

最后你可能需要重启一下路由器,以及清空一下你的PC/PED设备的DNS缓存。


PS1:发现有不少人之前用过chnroute方案,然后改成gfwlist方案,此时记得把忽略解析文件的勾选去掉并把原来的设置填回去:

problem1


参考文章:https//kyonli.com/p/18

519 条评论

  1. mlm 回复

    飞羽老师,之前请教过,用你推荐的luci加gfwlist模式来翻墙,之后想重新更新一下路由器,于是重新下载了最新版的lede及匹配的软件,然后现在就又不能正常使用了,只要把dnsmasq的配置启用,就彻底不能上网,无论墙内或墙外,而且打开shadowsocks的访问控制选项卡也特别慢,怀疑是dnsmasq跟访问控制这个模块有冲突。麻烦老师能不能把这篇更新一下,变成启用luci界面的gfwlist模式。

  2. forward 回复

    实测方案1使用ss tunnel/dns forward都可以转发;方案3我这里仅可以使用ss tunnel,朋友那边(使用我提供的虚拟机文件,我在软路由上测试的,软件环境完全一致)就可以使用dns forward。tcpdump抓包5353(gfwlist方案)我这里ss tunnel正常,dns forward返回不正常,但是朋友那边gfwlist方案两种dns转发抓包都显示正常访问也很快,我这边中国电信

    1. cokebar 文章作者 回复

      TCP方式查询的话,需要加一句防火墙规则,来确保8.8.8.8走代理,否则部分ISP干扰8.8.8.8的tcp通讯导致查询失败。文中已将DNS的方案三改成TCP查询的方法了,请参考

  3. yance 回复

    博主您好,我也遇到了跟mlm一样的问题。硬件用的树莓派3…..只要开始dnsmasq之后路由器本身以及连接路由器的设备都无法进行DNS,关闭dnsmasq之后路由器可以正常DNS,但是连接路由器的设备依然无法解析域名

    1. cokebar 文章作者 回复

      请提供系统日志信息 否则无从查起。如果日志太长可以发邮件给我

      1. yance 回复

        已解决…..
        犯了个2B错误 gfwlist转dnsmasq的脚本也放在dnsmasq.d路径下了…自己看了一眼日志发现dnsmasq启动报错..

  4. 小麦 回复

    感谢发文传播技术!!!
    以下是我遇到的情况:
    root@LEDE:/tmp# ss-redir -c /etc/shadowsocks.json -b 0.0.0.0 -v
    Error loading shared library libsodium.so.23: No such file or directory (needed by /usr/bin/ss-redir)
    启动时出现这错误,然后我安装了http://openwrt-dist.sourceforge.net/packages/LEDE/base/mips_24kc/libsodium_1.0.16-1_mips_24kc.ipk 然后就成功启动

    然后依然不能自由上网。。。还有这种方案怎么安装语言包?

  5. dover 回复

    请问下,用surge的时候,速度明显比用这个方案快,是什么原因呢? 该如何解决呢?

  6. dean 回复

    使用的第三方案。
    ss tunnel可以,但是会间歇性无法解析。
    dns-forward查询方式不行,tcp 8.8.8.8确定是走的代理,固件版本LEDE Reboot 17.01.4,自己编译和作者预编译版都试过了。

    1. cokebar 文章作者 回复

      修改了一下文中的步骤 请参考。主要原因应该是没有添加OUTPUT链的规则,导致路由器自身的流量没走代理

1 2 16 17 18 19 20

cokebar进行回复 取消回复

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

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