路由器自动更新hosts

https://github.com/sy618/hosts/blob/master/dnsmasq/dnsmasq.txtdnsmasq规则
一个强大的hosts、dnsmasq规则实现去广告与自由上网,附手动教程与padavan、tomato固件自动脚本!

恩山论坛:http://www.right.com.cn/forum/forum.php?mod=viewthread&tid=216155&extra=page%3D1&mobile=1&simpletype=no

20170614 前使用过3.2自动化脚本的兄弟,请重新再执行一次,因为规则地址有调整。

1.什么是dnsmasq:https://wapbaike.baidu.com/item/DNSmasq?adapt=1
简单来说,路由器dnsmasq可以看作是部署在路由器上的DNS服务器。
dnsmasq功能很多,我们这里主要用来重定向、加快网络响应 和 屏蔽广告(指向127.0.0.1或0.0.0.0)。

2 规则介绍
2.1 自.由.上.网,享受无墙般体验。
https://raw.githubusercontent.com/sy618/hosts/master/dnsmasq/dnsfq
(注意,这规则并不是万能的,目前仅解析部分高频使用的域名。若想完整访问外网请改用代理方式。)

2.2 屏蔽广告
可以使用vokins的专门去国内广告hosts
局域网内无PC的用这个规则:
https://raw.githubusercontent.com/vokins/yhosts/master/hosts
PC用户的用这个:
https://raw.githubusercontent.com/vokins/yhosts/master/hosts.txt
说明:
上面两个hosts规则区别:非PC端的是完整数据。PC端的是删减版,是由于PC端部分视频网站不能用hosts屏蔽,所以删掉了那部分数据。
(以hosts方式过滤广告非万能,肯定没有adbyby、KP等使用abp规则方式过滤全面,但对个人来说日常使用是够用了。如对去广告要求高的请用adbyby或KP。)

屏蔽一些广告家族的dnsmasq规则:
https://raw.githubusercontent.com/vokins/yhosts/master/dnsmasq/union.conf

2.3 屏蔽运营商劫持
https://raw.githubusercontent.com/vokins/yhosts/master/dnsmasq/ip.conf
(如何查看是否被劫持,使用nslookup命令测试一个不存在的域名,若返回IP就是劫持)

3 如何使用
3.1 手动添加(仅适用于h大的老毛子固件)
手动添加到自定义脚本的【在 WAN 上行/下行启动后执行】里,实现网络连接上时自动更新。也可以直接在命令行里直接运行。
#自由上网dnsmasq:
wget –no-check-certificate https://raw.githubusercontent.com/sy618/hosts/master/dnsmasq/dnsfq -O /etc/storage/dnsmasq/dnsmasq.d/dnsfq.conf;sed -i “1 i## update:$(date “+%Y-%m-%d %H:%M:%S”)” /etc/storage/dnsmasq/dnsmasq.d/dnsfq.conf;restart_dhcpd
#去广告hosts:
wget –no-check-certificate https://raw.githubusercontent.com/vokins/yhosts/master/hosts -O /etc/storage/dnsmasq/hosts;sed -i “1 i## update:$(date “+%Y-%m-%d %H:%M:%S”)” /etc/storage/dnsmasq/hosts;restart_dhcpd

手动添加到定时任务crontab(在 系统管理 - 服务 -计划任务 (Crontab) 里)
#自由上网dnsmasq:
01 00 * * * wget –no-check-certificate https://raw.githubusercontent.com/sy618/hosts/master/dnsmasq/dnsfq -O /etc/storage/dnsmasq/dnsmasq.d/dnsfq.conf;sed -i “1 i## update:$(date “+%Y-%m-%d %H:%M:%S”)” /etc/storage/dnsmasq/dnsmasq.d/dnsfq.conf;restart_dhcpd
#去广告hosts
02 00 * * * wget –no-check-certificate https://raw.githubusercontent.com/vokins/yhosts/master/hosts -O /etc/storage/dnsmasq/hosts;sed -i “1 i## update:$(date “+%Y-%m-%d %H:%M:%S”)” /etc/storage/dnsmasq/hosts;restart_dhcpd

3.2 自动化脚本,不会手动添加的用以下一键脚本命令
3.2.1 适用 hiboy大的【padavan固件】
固件地址:http://www.right.com.cn/forum/thread-161324-1-1.html
一键运行命令:
mkdir -p /etc/storage/dnsmasq/dns;wget –no-check-certificate https://raw.githubusercontent.com/sy618/hosts/master/dnsmasq/sh/setting.sh -O /etc/storage/dnsmasq/dns/setting.sh;sh /etc/storage/dnsmasq/dns/setting.sh
一键还原命令:
sh /etc/storage/dnsmasq/dns/del.sh
详细看https://github.com/sy618/hosts/tree/master/dnsmasq/sh

3.2.2 适用【tomato固件】

固件地址:http://tomato.groov.pl/
(感谢@◈Elvira◈ 的调试与帮助)
一键运行命令:
mkdir -p /tmp/etc/dns;wget https://raw.githubusercontent.com/sy618/hosts/master/dnsmasq/tomato/setting.sh -O /tmp/etc/dns/setting.sh;sh /tmp/etc/dns/setting.sh
一键还原命令:
sh /tmp/etc/dns/del.sh

3.3 其他固件:
Openwtr、LEDE、ddwrt等固件脚本可以尝试这位基友发的帖子里的脚本
http://www.right.com.cn/forum/thread-217335-1-1.html
https://github.com/clion007/dnsmasq
(这个脚本做的不错,有问题找帖子作者反馈。)

  • 不建议订阅太多规则(hosts或dnsmasq),可能会影响网络响应速度。因为路由器是使用遍历方式查询规则列表,规则越多耗时越多。同时太多规则你也很难排查问题在哪。

4.已集成规则的老毛子固件
http://www.right.com.cn/forum/forum.php?mod=viewthread&tid=216667&extra=page%3D3&mobile=2
这是由论坛基友做的固件,可以刷入试试。

5.优缺点
优点:解析快,消耗极少CPU资源,非常适合路由器使用。过滤广告无需证书,可部分代替s-s
缺点:IP易失效、hosts方式过滤广告有局限性。
这一切美好的事情,全靠规则维护者的维护,希望有更多人加入维护!

由于不常上论坛,有问题请到github上反馈与交流!
去广告项目:
https://github.com/vokins/yhosts
FQ项目:
https://github.com/sy618/hosts

前面提到的恩山那个论坛帖子
http://www.right.com.cn/forum/thread-217335-1-1.html这个帖子纪录了如何修改路由器dnsmasq来自动更新hosts的方法,使用了以下脚本:

#!/bin/sh
###仅限潘多拉与openwrt类固件使用###

###请将DNS设置为lan网关###

###该脚本只需要运行一次###

###-------------------------------------------Copyright (c) 2014-2017, clion007----------------------------------------###
# https://github.com/clion007/dnsmasq

# 移动到用户命令文件夹
cd /usr/bin/

# 创建广告规则与更新脚本存放的文件夹
mkdir -p /etc/dnsmasq
mkdir -p /etc/dnsmasq.d

# dnsmasq.conf 添加广告规则路径
cat >> /etc/dnsmasq.conf <<EOF
# 添加监听地址(将192.168.1.1修改为你的lan网关ip)
listen-address=192.168.1.1,127.0.0.1

# 并发查询所有上游DNS
all-servers

# 添加上游DNS服务器
resolv-file=/etc/dnsmasq/resolv.conf

# 添加额外hosts规则路径
addn-hosts=/etc/dnsmasq/noad.conf

# IP反查域名
bogus-priv

# 添加DNS解析文件
conf-file=/etc/dnsmasq.d/fqad.conf
EOF

# 创建上游DNS配置文件
cat > /etc/dnsmasq/resolv.conf <<EOF
# 上游DNS解析服务器
nameserver 127.0.0.1
nameserver 218.30.118.6
nameserver 8.8.4.4
nameserver 182.254.116.116
nameserver 119.29.29.29
nameserver 4.2.2.2
nameserver 114.114.114.114
EOF

# 开始下载扶墙和广告规则

# 下载dnsmasq规则
# # 下载sy618规则
wget --no-check-certificate -qO - https://raw.githubusercontent.com/sy618/hosts/master/dnsmasq/dnsfq > /etc/dnsmasq.d/sy168.conf
# 下载racaljk规则
wget --no-check-certificate -qO - https://raw.githubusercontent.com/racaljk/hosts/master/dnsmasq.conf > /etc/dnsmasq.d/racaljk.conf
# 下载vokins广告规则
wget --no-check-certificate -qO - https://raw.githubusercontent.com/vokins/yhosts/master/dnsmasq/union.conf > /etc/dnsmasq.d/ad.conf
# 下载easylistchina广告规则
wget --no-check-certificate -qO - https://c.nnjsx.cn/GL/dnsmasq/update/adblock/easylistchina.txt > /etc/dnsmasq.d/easylistchina.conf
# 删除racaljk规则中google相关规则
sed -i '/google/d' /etc/dnsmasq.d/racaljk.conf
sed -i '/youtube/d' /etc/dnsmasq.d/racaljk.conf
# 合并dnsmasq缓存
cd /etc/dnsmasq.d;cat racaljk.conf sy168.conf ad.conf easylistchina.conf > fqad
# 删除dnsmasq缓存
rm -rf /etc/dnsmasq.d/ad.conf
rm -rf /etc/dnsmasq.d/sy168.conf
rm -rf /etc/dnsmasq.d/racaljk.conf
rm -rf /etc/dnsmasq.d/easylistchina.conf
# 删除dnsmasq重复规则
sort /etc/dnsmasq.d/fqad | uniq > /etc/dnsmasq.d/fqad.conf
# 删除dnsmasq合并缓存
rm -rf /etc/dnsmasq.d/fqad
# 删除无用的注释
sed -i '/#/d' /etc/dnsmasq.d/fqad.conf

# 下载hosts规则
# 下载yhosts缓存
wget --no-check-certificate -qO - https://raw.githubusercontent.com/vokins/yhosts/master/hosts.txt > /etc/dnsmasq/yhosts.conf
# 下载malwaredomainlist?嬖?
wget --no-check-certificate -qO - http://www.malwaredomainlist.com/hostslist/hosts.txt > /etc/dnsmasq/malwaredomainlist.conf
# 下载adaway规则缓存
wget --no-check-certificate -qO - http://77l5b4.com1.z0.glb.clouddn.com/hosts.txt > /etc/dnsmasq/adaway.conf
# 合并hosts缓存
cd /etc/dnsmasq;cat yhosts.conf adaway.conf malwaredomainlist.conf > noad
# 删除hosts缓存
rm -rf /etc/dnsmasq/yhosts.conf
rm -rf /etc/dnsmasq/adaway.conf
rm -rf /etc/dnsmasq/malwaredomainlist.conf
# 删除hosts重复规则
sort /etc/dnsmasq/noad | uniq > /etc/dnsmasq/noad.conf
# 删除hosts合并缓存
rm -rf /etc/dnsmasq/noad
# 删除无用的注释
sed -i '/#/d' /etc/dnsmasq/noad.conf
sed -i '/@/d' /etc/dnsmasq/noad.conf

# 扶墙和广告屏蔽规则下载结束

# 重启dnsmasq服务
killall dnsmasq
/usr/sbin/dnsmasq

# 创建规则更新脚本
cat > /etc/dnsmasq/fqad_update.sh <<EOF
    #!/bin/sh
# 移动到用户命令文件夹
cd /usr/bin/

# 开始更新dnsmasq规则
# # 下载sy618规则
wget --no-check-certificate -qO - https://raw.githubusercontent.com/sy618/hosts/master/dnsmasq/dnsfq > /etc/dnsmasq.d/sy168.conf
# 下载racaljk规则
wget --no-check-certificate -qO - https://raw.githubusercontent.com/racaljk/hosts/master/dnsmasq.conf > /etc/dnsmasq.d/racaljk.conf
# 下载vokins广告规则
wget --no-check-certificate -qO - https://raw.githubusercontent.com/vokins/yhosts/master/dnsmasq/union.conf > /etc/dnsmasq.d/ad.conf
# 下载easylistchina广告规则
wget --no-check-certificate -qO - https://c.nnjsx.cn/GL/dnsmasq/update/adblock/easylistchina.txt > /etc/dnsmasq.d/easylistchina.conf
# 删除racaljk规则中google相关规则
sed -i '/google/d' /etc/dnsmasq.d/racaljk.conf
sed -i '/youtube/d' /etc/dnsmasq.d/racaljk.conf
# 合并dnsmasq缓存
cd /etc/dnsmasq.d;cat racaljk.conf sy168.conf ad.conf easylistchina.conf > fqad
# 删除dnsmasq缓存
rm -rf /etc/dnsmasq.d/ad.conf
rm -rf /etc/dnsmasq.d/sy168.conf
rm -rf /etc/dnsmasq.d/racaljk.conf
rm -rf /etc/dnsmasq.d/easylistchina.conf
# 删除dnsmasq重复规则
sort /etc/dnsmasq.d/fqad | uniq > /etc/dnsmasq.d/fqad.conf
# 删除dnsmasq合并缓存
rm -rf /etc/dnsmasq.d/fqad
# 删除无用的注释
sed -i '/#/d' /etc/dnsmasq.d/fqad.conf
# dnsmasq规则更新结束

# 开始更新hosts规则
# 下载yhosts缓存
wget --no-check-certificate -qO - https://raw.githubusercontent.com/vokins/yhosts/master/hosts.txt > /etc/dnsmasq/yhosts.conf
# 下载malwaredomainlist?嬖?
wget --no-check-certificate -qO - http://www.malwaredomainlist.com/hostslist/hosts.txt > /etc/dnsmasq/malwaredomainlist.conf
# 下载adaway规则缓存
wget --no-check-certificate -qO - http://77l5b4.com1.z0.glb.clouddn.com/hosts.txt > /etc/dnsmasq/adaway.conf
# 合并hosts缓存
cd /etc/dnsmasq;cat yhosts.conf adaway.conf malwaredomainlist.conf > noad
# 删除hosts缓存
rm -rf /etc/dnsmasq/yhosts.conf
rm -rf /etc/dnsmasq/adaway.conf
rm -rf /etc/dnsmasq/malwaredomainlist.conf
# 删除hosts重复规则
sort /etc/dnsmasq/noad | uniq > /etc/dnsmasq/noad.conf
# 删除hosts合并缓存
rm -rf /etc/dnsmasq/noad
# 删除无用的注释
sed -i '/#/d' /etc/dnsmasq/noad.conf
sed -i '/@/d' /etc/dnsmasq/noad.conf
# hosts规则更新结束

# 重启dnsmasq服务
killall dnsmasq
/usr/sbin/dnsmasq
EOF

# 注入每天更新一次的任务
chmod 755 /etc/dnsmasq/fqad_update.sh
#http_username=`nvram get http_username`
sed -i '/fqad_update/d' /etc/crontabs/root

cat >> /etc/crontabs/root <<EOF
# 每天5点30分更新dnsmasq和hosts规则
30 5 * * * /bin/sh /etc/dnsmasq/fqad_update.sh
EOF