欢迎光临
我们一直在努力

OpenWRT/LEDE路由器使用Shadowsocksr配合GFWList实现智能科学上网

 

在路由器上使用ShadowsokcsR,可以使整个局域网实现科学上网,这种方式比在单台设备上安装SSR要更方便。

目前较为主流的路由第三方固件中,梅林固件和老毛子固件已经内置SSR及GFWList代理方式,使用时只要经过简单设置即可,也推荐刚接触的朋友使用可装这两种固件的路由器。有哪些路由器可用?可以参考这里

而第三方打包的OpenWRT及LEDE固件,虽然也大多内置Shadowsocks或ShadowsocksR,但是其中并没有内置GFWList上网模式。在默认情况下,是通过判断是否国内iP分流,即国内IP直接访问,国外IP走代理。这种模式虽然也可以实现科学上网,但是可能会导致访问国外正常网站时速度较慢,另外还会浪费SSR服务器的流量,尤其是下载国外资源时。那么如何为Openwrt或LEDE路由器添加GFWList实现智能分流呢?下面我们简单介绍一下。

 

路由器GFWList智能分流 实现原理

由于国内DNS解析被污染,默认情况下,GFWList列表域名解析得到的IP并不正确。

1.首先需要将GFWList规则写入路由器的dnsmasq中,列表中的域名不要直接解析,而是通过DNS转发解析。

2.将转发获取的真实IP通过ipset整合为IP列表,设置防火墙规则,使这部分IP走代理。

3.设置列表之外的域名仍然正常解析,并且不走代理,从而不影响正常网站的访问速度。

 

需要安装的模块

我们以路由器上已安装好SSR为例,为实现GFWList智能分流,其它需要安装的有:

  1. dnsmasq-full
  2. ipset
  3. dns-forwarder(DNS转发)

 

如何安装

 

1.dnsmasq-full

一般情况下,Openwrt或LEDE固件中,已经自带dnsmasq。但是自带的一般不是完全版本,所以需要先卸载自带,安装dnsmasq-full版本。

具体流程:

  1. 进入路由器的后台管理面板,点击菜单中的 系统 —— 软件包 ——点击刷新列表按钮。
  2. 刷新完成后,在过滤器处输入dnsmasq搜索,在已安装软件包中找到dnsmasq,如果不是如下图中的full版本,则切换到可用软件包中,找到full版本安装。
  3. 安装完成后,切换到已安装软件包中,卸载不带full版本。

 

2.ipset

与上文dnsmasq-full的查找方法一致,如果没有ipset,则在可用软件包中安装。

 

3.dns forwarder (DNS转发)

这个模块通过以上查找方法可能找不到,可以下载后通过Winscp上传至路由器安装。

分别下载以下两个文件

dns forwarder下载地址,进入页面后根据路由器的CPU架构,下载对应版本:

http://openwrt-dist.sourceforge.net/archives/dns-forwarder/1.2.1/

对应的Luci下载地址:

https://github.com/aa65535/openwrt-dist-luci/releases/download/v1.6.2/luci-app-dns-forwarder_1.6.2-1_all.ipk

 

dns forwarder 安装流程:

  1. 将下载得到的两个ipk文件,上传至路由器的/tmp目录下。
  2. 分别输入以下命令安装,实际名称可能与以下命令不一致,注意将文件名替换为实际名称:

 

以上各模块安装完成后,最好重启一下路由器。

 

GFWList智能分流设置

 

1.dnsmasq配置

1.1.下载GFWList 的 dnsmasq规则文件(包含ipset规则),下载地址:

https://cokebar.github.io/gfwlist2dnsmasq/dnsmasq_gfwlist_ipset.conf

1.2.用Winscp连接路由器,打开/etc目录,在此目录下新建dnsmasq.d文件夹。

1.3.将刚才下载得到的规则文件,上传至新建的dnsmasq.d文件夹。

1.4.如果是OpenWRT固件,则:

打开/etc/dnsmasq.conf文件,在最后一行添加如下规则:

如果是LEDE固件,则:

打开Putty连接路由器,运行:

如果返回结果为 uci: Entry not found 或者其他非 /etc/dnsmasq.d 的值,则分别运行如下两条命令:

 

2.ipset及防火墙配置

2.1.打开路由器后台管理界面,点击菜单中的 网络——防火墙——自定义规则,在最下方加入以下代码:

注意:以上代码中的1234为SSR或SS的本地端口,请按实际填写,端口可以在路由器后台的SSR管理界面中查看:

 

2.2.以上设置完成后,点击防火墙界面的 重启防火墙 使设置生效。由于涉及防火墙规则变动,之后可能会出现网络卡死,关掉电源重启路由器即可。

 

3.DNS转发设置

3.1.打开路由器后台管理面板,菜单——服务——DNS转发,设置如下:

 

3.2.按照前文的说明,在防火墙的自义规则中添加如下一行,使8.8.8.8走代理解析,防止被污染:

 

3.3.在路由器后台管理面板中,菜单——网络——接口——WAN——修改——高级设置,去掉下图勾选,并将DNS服务器设置为127.0.0.1:

 

3.4.打开 菜单——网络——DHCP/DNS——基本设置,将DNS转发设置为运营商分配的DNS,或者114.114.114.114之类的公共DNS也可以,用于正常域名解析:

 

4.Shadowsocks/SSR设置

通过以上的设置,路由器内部已经完成了GFWList的智能分流,这时候我们就不需要Shadowsokcs的内网代理了。

进入shadowsocks的后台管理界面,将内网代理类型由 正常代理 修改为 直接连接:

注意:Shadowsock管理界面的透明代理功能要正常开启。

 

验证GFWList智能分流是否生效

重启路由器,打开以下地址:http://www.ip111.cn/

以下图结果为例,前两个iP为你的真实IP,第3个IP为你的SSR服务器iP,这就说明只有访问被墙网站时,才会走代理,其它网站还是直连。

智能分流设置成功。

 

赞(21)
未经允许不得转载:SSR中文网 » OpenWRT/LEDE路由器使用Shadowsocksr配合GFWList实现智能科学上网
 

评论 3

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    梅林里的GFWlist文件很久没有更新了,请问用什么方法才能更新

    secret5年前 (2019-09-06)回复
  2. #2

    按楼主方法,确实搞定了路由器代理,之前不懂设置结果99%的时间不能用。
    但是设置完有个问题啊,访问国外网站,不管是否被墙都走代理。
    已确认不是dns缓存问题,使用IP111.cn和一个香港的自建服务器测试都是如此,请赐教!
    另,本人做了一个可以方便管理用户规则的脚本,如楼主感觉有价值,可以无私分享。 具体功能:
    [root@RainbowSignal-WRT ~]# ssrule help
    ssrule help info
    ssrule is a shadowsocks rules manager.
    Usage: ssrule
    OPTIONS:
    check : Check HOSTNAME in both GFW and user rules.
    add : Add HOSTNAME as user rule.
    remove : Remove HOSTNAME from user rule.
    status : Display status of relative services.
    refresh : Update the rule file to the latest version.
    list : Display rules currently using.
    help : Display this help information.
    [root@RainbowSignal-WRT ~]#

    嘉语5年前 (2019-11-30)回复
  3. #3

    刚用best trace软件又测试一下,问题不大。
    总体满足要求。
    只是在gfw规则文件中添加自定义规则,并依次重启dnsmasq、firewall、dns-forwarder、shadowsocks后,貌似国外域名(含香港)依然不走代理,添加自定义域名仅对国内域名(如ip138)生效。
    且无论是否手动添加ip111.cn,ip111.cn均显示访问国内域名使用的地址为ss服务器地址,很奇怪。
    不过正常使用倒是问题不大了。

    嘉语5年前 (2019-11-30)回复
error: