dnsmasq及hosts自动去广告脚本安装,强大的dnsmasq及hosts自动脚本扶墙去广告
本着简单易用的基本原则,首先还是再科普一下Dnsmasq的基本相关知识
1、什么是Dnsmasq啊?(转自百度百科,不知道就百度)
DNSmasq是一个小巧且方便地用于配置DNS和DHCP的工具,适用于小型网络,它提供了DNS功能和可选择的DHCP功能。它服务那些只在本地适用的域名,这些域名是不会在全球的DNS服务器中出现的。DHCP服务器和DNS服务器结合,并且允许DHCP分配的地址能在DNS中正常解析,而这些DHCP分配的地址和相关命令可以配置到每台主机中,也可以配置到一台核心设备中(比如路由器),DNSmasq支持静态和动态两种DHCP配置方式。
2、Dnsmasq有什么用?能为我解决什么
默认的情况下,我们平时上网用的本地DNS服务器都是使用电信或者联通的,但是这样也导致了不少的问题,首当其冲的就是上网时经常莫名地弹出广告,或者莫名的流量被消耗掉导致网速变慢。其次是部分网站域名不能正常被解析,莫名其妙地打不开,或者时好时坏。
如果碰上不稳定的本地DNS,还可能经常出现无法解析的情况。除了要避免“坏”的DNS的影响,我们还可以利用DNS做些“好”事,例如管理局域网的DNS、给手机App Store加速、纠正错误的DNS解析记录、保证上网更加安全、去掉网页讨厌的广告等等。
3、方案dnsmasq提供了什么?
目前主要提供几个功能:
分域名DNS解析,提升加快不同网站的访问速度;
国外域名加密解析自动扶墙,享受无墙的快感,上你想上的,看你想看的;
屏蔽恶心的运营商ip劫持(依靠优化上游DNS解析服务器实现,非hosts);
全面屏蔽广告(依靠路由器计划任务进行自动维护更新的hosts和dnsmasq规则实现)。
4、方案的优势?
系统支持广,(OpenWRT、pandorabox等)凡是基于Openwtr系统内核的固件原则上均可使用;
路由器资源消耗极低,相比起adbyby、koolproxy等去广告插件后产生的30%-50%的带宽损失,本脚本一点也不占用和降低带宽,让你享受满速狂奔的快感;
方便,快捷,智能全自动化,让你的智能路由器真正实现智能,一键全自动安装配置,无需后续人工手动维护,路由器便可全自动定时更新和维护,一劳永逸;
广告扶墙规则涵盖全面,你想要的,这里都有,你不想看的(广告),都看不到,让你拥有干净的网络空间,所有规则源均为持续维护源,永不过时;
免费方便,扶墙、过滤广告无需额外安装证书,可代替s-s、adbyby、koolproxy、china-dns等防劫持、扶墙和广告过滤插件,且永远不会产生任何费用。
5、Dnsmasq实现方法
往路由器上传文件及登录方式借助winSCP软件,运行脚本方法可以使用路由器的webshell或者用putty软件登录路由器运行,推荐使用putty远程登录路由器运行,中间需要选择运行选项时,putty支持好像更好
winSCP和putty使用方法可以参考这篇文章新路由3newifi3路由器刷机
脚本源代码原理介绍
#!/bin/sh echo wgetroute="/usr/bin/wget-ssl" CRON_FILE=/etc/crontabs/$USER clear echo "# Copyright (c) 2014-2017,by clion007" echo echo "# 本脚本仅用于个人研究与学习使用,从未用于产生任何盈利(包括“捐赠”等方式)" echo "# 未经许可,请勿内置于软件内发布与传播!请勿用于产生盈利活动!请遵守当地法律法规,文明上网。" echo "# openwrt类固件使用,包括但不限于pandorabox、LEDE、ddwrt、明月、石像鬼等,华硕、老毛子、梅林等Padavan系列固件慎用。" echo -e "# 安装前请\e[1;31m备份原配置\e[0m;由此产生的一切后果自行承担!" echo -e "# 安装前请\e[1;31m检查确认路由器配置,lan IP必须是192.168.1.1\e[0m;全自动无人值守安装!" echo echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" echo "+ +" echo "+ Install Fq only for OpnWrt or LEDE or PandoraBox +" echo "+ +" echo "+ Time:`date +'%Y-%m-%d'` +" echo "+ +" echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" echo echo "------------------------------------------------------------------" echo -e "\e[1;31m 请先查询你的\e[1;36mlan网关ip\e[1;31m再选择,\e[1;36mlan网关ip\e[1;31m必须为:\e[1;36m'192.168.1.1'\e[0m" echo "------------------------------------------------------------------" echo echo -e "\e[1;36m > 1. 安装 \e[0m" echo echo -e "\e[1;31m > 2. 卸载 \e[0m" echo echo -e "\e[1;36m > 3. 退出 \e[0m" echo echo -e -n "\e[1;34m 请输入数字继续执行: \e[0m" read menu if [ "$menu" == "1" ]; then echo echo -e "\e[1;36m 三秒后开始安装......\e[0m" echo sleep 3 echo -e "\e[1;36m 正在更新软件包,根据网络状态决定时长\e[0m" rm -f /var/lock/opkg.lock opkg update sleep 2 echo echo -e "\e[1;36m 开始检查并安装wget-支持https\e[0m" echo if [ -f $wgetroute ]; then echo -e "\e[1;31m 系统已经安装wget-ssl软件\e[0m" #opkg remove wget > /dev/null 2>&1 #opkg install wget else echo -e "\e[1;31m 没有发现wget-ssl开始安装\e[0m" opkg install wget echo if [ -f $wgetroute ]; then echo -e "\e[1;36m wget安装成功 \e[0m[\e[1;31mmwget has been installde successfully\e[0m]" else echo -e "\e[1;31m wget安装失败,请到路由器系统软件包手动安装后再试!\e[0m" exit fi fi echo sleep 3 echo -e "\e[1;36m 创建dnsmasq规则与更新脚本存放的文件夹\e[0m" echo echo -e "\e[1;36m 检测和备份当前dnsmasq配置信息\e[0m" if [ -d /etc/dnsmasq ]; then mv /etc/dnsmasq /etc/dnsmasq.bak fi if [ -d /etc/dnsmasq.d ]; then mv /etc/dnsmasq.d /etc/dnsmasq.d.bak fi mkdir -p /etc/dnsmasq mkdir -p /etc/dnsmasq.d echo sleep 3 echo -e "\e[1;36m dnsmasq.conf 添加广告规则路径\e[0m" if [ -f /etc/dnsmasq.conf ]; then mv /etc/dnsmasq.conf /etc/dnsmasq.conf.bak fi echo "# 添加监听地址(其中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 # IP反查域名 bogus-priv # 添加DNS解析文件 conf-file=/etc/dnsmasq.d/fq.conf # 设定域名解析缓存池大小 cache-size=10000" > /etc/dnsmasq.conf # 换成echo的方式注入 echo sleep 3 echo -e "\e[1;36m 创建上游DNS配置文件\e[0m" cp /tmp/resolv.conf.auto /etc/dnsmasq/resolv.conf echo "# 上游DNS解析服务器 nameserver 127.0.0.1 # 如需根据自己的网络环境优化DNS服务器,可用ping或DNSBench测速 # 选择最快的服务器,打开文件依次按速度快慢顺序手动改写 nameserver 218.30.118.6 nameserver 8.8.4.4 nameserver 119.29.29.29 nameserver 4.2.2.2 nameserver 114.114.114.114 nameserver 1.2.4.8 nameserver 223.5.5.5 nameserver 114.114.114.119" >> /etc/dnsmasq/resolv.conf # 换成echo的方式注入 echo sleep 3 echo -e -n "\e[1;36m 创建自定义扶墙规则\e[0m" echo echo "# 规则格式,删除address前 # 生效,如有需要自己添加的规则,请打开userlist添加 # 后面的地址有两种情况,优选具体ip地址 #address=/.001union.com/127.0.0.1 #address=/telegram.org/149.154.167.99" > /etc/dnsmasq.d/userlist echo echo -e "\e[1;36m 下载扶墙规则\e[0m" echo echo -e "\e[1;36m 下载sy618扶墙规则\e[0m" /usr/bin/wget-ssl --no-check-certificate -q -O /tmp/sy618 https://raw.githubusercontent.com/sy618/hosts/master/dnsmasq/dnsfq echo #echo -e "\e[1;36m 下载racaljk规则\e[0m" #/usr/bin/wget-ssl --no-check-certificate -q -O /tmp/racaljk https://raw.githubusercontent.com/racaljk/hosts/master/dnsmasq.conf #echo sleep 3 #echo -e "\e[1;36m 删除racaljk规则中google'youtube相关规则\e[0m" #sed -i '/google/d' /tmp/racaljk #sed -i '/youtube/d' /tmp/racaljk #echo echo -e "\e[1;36m 创建用户自定规则缓存\e[0m" cp /etc/dnsmasq.d/userlist /tmp/userlist echo echo -e -n "\e[1;36m 删除dnsmasq缓存注释\e[0m" sed -i '/#/d' /tmp/sy618 #sed -i '/#/d' /tmp/racaljk sed -i '/#/d' /tmp/userlist echo #echo -e -n "\e[1;36m 扶墙网站指定到#443端口访问\e[0m" #awk '{print $0"#443"}' /tmp/sy618 > /tmp/sy618 #awk '{print $0"#443"}' /tmp/racaljk > /tmp/racaljk #awk '{print $0"#443"}' /tmp/userlist > /tmp/userlist #echo echo -e -n "\e[1;36m 合并dnsmasq缓存\e[0m" #cat /tmp/userlist /tmp/racaljk /tmp/sy618 > /tmp/fq cat /tmp/userlist /tmp/sy618 > /tmp/fq echo echo -e -n "\e[1;36m 删除dnsmasq临时文件\e[0m" rm -rf /tmp/userlist rm -rf /tmp/sy618 #rm -rf /tmp/racaljk echo echo -e "\e[1;36m 删除本地规则\e[0m" sed -i '/::1/d' /tmp/fq sed -i '/localhost/d' /tmp/fq echo echo -e "\e[1;36m 创建dnsmasq规则文件\e[0m" echo " ############################################################ ## 【Copyright (c) 2014-2017, clion007】 ## ## ## ## 感谢https://github.com/sy618/hosts ## ## 感谢https://github.com/racaljk/hosts ## #################################################################### # Localhost (DO NOT REMOVE) Start address=/localhost/127.0.0.1 address=/localhost/::1 address=/ip6-localhost/::1 address=/ip6-loopback/::1 # Localhost (DO NOT REMOVE) End # Modified hosts start " > /etc/dnsmasq.d/fq.conf # 换成echo的方式注入 echo echo -e "\e[1;36m 删除dnsmasq重复规则及相关临时文件\e[0m" sort /tmp/fq | uniq >> /etc/dnsmasq.d/fq.conf echo "# Modified DNS end" >> /etc/dnsmasq.d/fq.conf rm -rf /tmp/fq echo sleep 3 echo -e "\e[1;36m 重启dnsmasq服务\e[0m" #killall dnsmasq /etc/init.d/dnsmasq restart > /dev/null 2>&1 echo sleep 2 echo -e "\e[1;36m 获取规则更新脚本\e[0m" wget --no-check-certificate -q -O /etc/dnsmasq/fqad_update.sh https://raw.githubusercontent.com/clion007/dnsmasq/master/fq_update.sh echo sleep 1 echo -e "\e[1;31m 添加计划任务\e[0m" chmod 755 /etc/dnsmasq/fq_update.sh sed -i '/dnsmasq/d' $CRON_FILE sed -i '/@/d' $CRON_FILE echo echo "[$USER@$HOSTNAME:/$USER]#cat /etc/crontabs/$USER # 每天6点28分更新dnsmasq扶墙规则 28 6 * * * /bin/sh /etc/dnsmasq/fq_update.sh > /dev/null 2>&1" >> $CRON_FILE /etc/init.d/cron reload echo -e "\e[1;36m 定时计划任务添加完成!\e[0m" sleep 1 echo echo clear echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" echo "+ +" echo "+ installation is complete +" echo "+ +" echo "+ Time:`date +'%Y-%m-%d'` +" echo "+ +" echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" echo echo rm -f /tmp/fq_auto.sh fi echo if [ "$menu" == "2" ]; then echo echo -e "\e[1;31m 开始卸载dnsmasq扶墙及广告规则\e[0m" rm -f /var/lock/opkg.lock sleep 1 echo echo -e "\e[1;31m 删除残留文件夹以及配置\e[0m" rm -rf /etc/dnsmasq rm -rf /etc/dnsmasq.d if [ -d /etc/dnsmasq.bak ]; then mv /etc/dnsmasq.bak /etc/dnsmasq fi echo if [ -d /etc/dnsmasq.d.bak ]; then mv /etc/dnsmasq.d.bak /etc/dnsmasq.d fi echo if [ -f /etc/dnsmasq.conf.bak ]; then rm -rf /etc/dnsmasq.conf mv /etc/dnsmasq.conf.bak /etc/dnsmasq.conf fi echo sleep 1 echo -e "\e[1;31m 删除相关计划任务\e[0m" sed -i '/dnsmasq/d' $CRON_FILE /etc/init.d/cron reload sleep 1 echo echo -e "\e[1;31m 重启dnsmasq\e[0m" /etc/init.d/dnsmasq restart > /dev/null 2>&1 rm -f /tmp/fq_auto.sh fi echo if [ "$menu" == "3" ]; then echo rm -f /tmp/fq_auto.sh echo exit 0 fi echo
运行脚本后,将会在/etc/dnsmasq目录中生成fq_update.sh自动更新规则脚本文件,脚本源代码如下:
#!/bin/sh echo echo " Copyright (c) 2014-2017,by clion007" echo echo " 本脚本仅用于个人研究与学习使用,从未用于产生任何盈利(包括“捐赠”等方式)" echo " 未经许可,请勿内置于软件内发布与传播!请勿用于产生盈利活动!请遵守当地法律法规,文明上网。" echo #LOGFILE=/tmp/fq_update.log #LOGSIZE=$(wc -c < $LOGFILE) #if [ $LOGSIZE -ge 5000 ]; then # sed -i -e 1,10d $LOGFILE #fi echo -e "\e[1;36m 3秒钟后开始更新规则\e[0m" echo sleep 3 echo " 开始更新dnsmasq规则" # 下载sy618扶墙规则 /usr/bin/wget-ssl --no-check-certificate -q -O /tmp/sy618 https://raw.githubusercontent.com/sy618/hosts/master/dnsmasq/dnsfq # 下载racaljk规则 #/usr/bin/wget-ssl --no-check-certificate -q -O /tmp/racaljk https://raw.githubusercontent.com/racaljk/hosts/master/dnsmasq.conf # 删除racaljk规则中google'youtube相关规则 #sed -i '/google/d' /tmp/racaljk #sed -i '/youtube/d' /tmp/racaljk # 创建用户自定规则缓存 cp /etc/dnsmasq.d/userlist /tmp/userlist # 删除dnsmasq缓存注释 sed -i '/#/d' /tmp/sy618 #sed -i '/#/d' /tmp/racaljk sed -i '/#/d' /tmp/userlist # 扶墙网站指定到#443端口访问 #awk '{print $0"#443"}' /tmp/sy618 > /tmp/sy618 #awk '{print $0"#443"}' /tmp/racaljk > /tmp/racaljk #awk '{print $0"#443"}' /tmp/userlist > /tmp/userlist # 合并dnsmasq缓存 #cat /tmp/userlist /tmp/racaljk /tmp/sy618 > /tmp/fq cat /tmp/userlist /tmp/sy618 > /tmp/fq # 删除dnsmasq临时文件 rm -rf /tmp/userlist rm -rf /tmp/sy618 #rm -rf /tmp/racaljk # 删除本地规则 sed -i '/::1/d' /tmp/fq sed -i '/localhost/d' /tmp/fq # 创建dnsmasq规则文件 echo " ############################################################ ## 【Copyright (c) 2014-2017, clion007】 ## ## ## ## 感谢https://github.com/sy618/hosts ## ## 感谢https://github.com/racaljk/hosts ## #################################################################### # Localhost (DO NOT REMOVE) Start address=/localhost/127.0.0.1 address=/localhost/::1 address=/ip6-localhost/::1 address=/ip6-loopback/::1 # Localhost (DO NOT REMOVE) End # Modified hosts start " > /tmp/fq.conf # 删除dnsmasq重复规则 sort /tmp/fq | uniq >> /tmp/fq.conf echo "# Modified DNS end" >> /tmp/fq.conf # 删除dnsmasq合并缓存 rm -rf /tmp/fq echo if [ -s "/tmp/fq.conf" ]; then if ( ! cmp -s /tmp/fq.conf /etc/dnsmasq.d/fq.conf ); then mv /tmp/fq.conf /etc/dnsmasq.d/fq.conf echo " `date +'%Y-%m-%d %H:%M:%S'`:检测到fq规则有更新......开始转换规则!" /etc/init.d/dnsmasq restart > /dev/null 2>&1 echo " `date +'%Y-%m-%d %H:%M:%S'`: fq规则转换完成,应用新规则。" else echo " `date +'%Y-%m-%d %H:%M:%S'`: fq本地规则和在线规则相同,无需更新!" && rm -f /tmp/fq.conf fi fi echo echo -e "\e[1;36m 规则更新完成\e[0m" echo exit 0
运行脚本后/etc/dnsmasq.conf文件修改源代码如下:
dhcp-option=252,"\n" # 添加监听地址(将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 # IP反查域名 bogus-priv # 添加DNS解析文件 conf-file=/etc/dnsmasq.d/fq.conf # 设定域名解析缓存池大小 cache-size=10000
运行脚本后,将会在路由器/etc/dnsmasq目录中新建文件resolv.conf内容如下:
# 上游DNS解析服务器 nameserver 127.0.0.1 # 如需根据自己的网络环境优化DNS服务器,可用ping或DNSBench测速 # 选择最快的服务器,打开文件依次按速度快慢顺序手动改写 nameserver 218.30.118.6 nameserver 8.8.4.4 nameserver 119.29.29.29 nameserver 4.2.2.2 nameserver 114.114.114.114 nameserver 1.2.4.8 nameserver 223.5.5.5 nameserver 114.114.114.119
注:此处采用的是各大公用DNS服务器,包括运行商的本地DNS、114DNS、谷歌DNS、百度DNS、阿里DNS、腾讯DNS、微软DNS、360DNS等。可根据自己的网络环境进入文件修改优化。
运行脚本后,将会在路由器计划任务中生成定时更新规则的计划任务,其添加的详细源代码如下:(其中$后面为环境变量,USER为你的用户名,Openwrt系统默认为root,HOSTNAME为你设定的路由器的名字)
[$USER@$HOSTNAME:/$USER]#cat /etc/crontabs/$USER # 每天6点28分更新dnsmasq扶墙规则 28 6 * * * /bin/sh /etc/dnsmasq/fq_update.sh > /dev/null 2>&1
运行脚本后,将会在路由器的/etc/dnsmasq.d目录中生成用户自定义规则文件,并命名为userlist,其内容如下:
# 规则格式,删除address前 # 生效,如有需要自己添加的规则,请在下面添加 # 后面的地址有两种情况,优选具体ip地址 #address=/.001union.com/127.0.0.1 #address=/telegram.org/149.154.167.99
如有有发现无法扶墙的网站,本脚本生成的规则中没有涉及,可以自行找到该网站可用的IP地址(可以在有效环境中用lookup反查域名的方式得到网站IP,或者借助一些网站工具查询)添加到该文件中,每条规则一行,格式:address=/telegram.org/149.154.167.99
此外,运行脚本后,生成的dnsmasq扶墙规则目录为/etc/dnsmasq.d目录,如果运行了包含去广告的脚本,生成的广告规则在/etc/dnsmasq目录。
脚本运行完成以上配置后,我们的上网终端设备在访问网页时的过程如下,首先会查询脚本添加的hosts规则,如果是广告页面,且该页面地址在hosts规则中包含了,就会被解析为127.0.0.1或者0.0.0.0地址,即可被屏蔽掉,如果hosts规则没有解析地址,即会即一步查询脚本生成的dnsmasq规则,如果有广告或扶墙网站,即会根据dnsmasq规则指定的地址进行解析。如果hosts和dnsmasq规则都没有解析到要访问的网站域名,则会提交到/etc/dnsmasq/resolv.conf文件中配置的上游DNS服务器进行并发查询域名解析,并返回最快的解析IP地址访问。(修改前为直接将访问的网站域名提交到运行商的DNS服务器解析返回IP地址并访问)
至此,基本能完美的解决扶墙、DNS劫持以及各种广告的问题了。这种方法的弊端就是需要有人持续维护更新,脚本中选择使用的所有规则源都是有持续维护更新的,关于广告屏蔽导致有的网站被错杀无法打开的问题,请到https://github.com/vokins/yhosts向规则维护者反馈。关于,墙外网站访问异常,可以到https://github.com/sy618/hosts向规则维护作者反馈,一般用https安全链接访问不会有问题,如果确实遇到问题,只能等待作者更新规则,找到合适的IP。此类问题需要规则源中的规则更新才能解决,与本脚本无关,以后不再对此类问题做一一解答,请见谅,谢谢!一路下来,学了不少知识,还有不完善之处,欢迎大家指正,谢谢大家一路以来的支持。
Openwrt系列固件⑥合一脚本下载:dnsmasq_open.zip备用下载地址dnsmasq_open.zip
目前已知包括但不限于Openwrt、pandorabox、LEDE、ddwrt、Newifi官方、明月、石像鬼等系列固件都可使用!
Padavan系列固件专版下载:dnsmasq_pada.zip备用下载地址dnsmasq_pada.zip
此脚本适用于padavan系列固件,包括华硕、老毛子等在内的系列固件都属于padavan固件,梅林虽然也是padavan固件,但是据说可保存文件的路径不同,其它padavan一般是storage目录,梅林不是,如果是要使用需要修改一下脚本保存文件的路径。以前很多坛友问padavan固件用的脚本,由于我没有用那个固件,所以一直没有写,也没有办法测试,现在好了,感谢坛友蓝色小小的贡献和分享,现在有了padavan可用的脚本。此脚本由坛友蓝色小小修改和测试,本人没有测试。大家测试如果遇到问题,可以直接请教坛友蓝色小小,我可以帮忙进行力所能及的分析。
一键安装脚本配置方法
将下载的压缩包解压,用winSCP上传到路由器/tmp目录(其它也可以,只要后面输入运行目录对应上就行),在putty软件登录路由器后,输入sh /tmp/dnsmasq_all.sh回车,即可运行脚本根据需要选择配置路由器dnsmasq及hosts,完成后可以选择重启路由器,脚本中已经加入了dnsmasq进程重启命令,一般无需重启路由器即可生效。运行脚本显示乱码的问题请参考2楼设置putty软件。此外,本脚本的相关文件都是放在github线上项目中的,配置过程中需要能正常访问github网站,如果不能正常配置,请检查网络环境是否可以正常访问github网站。
注意事项
注意:如果使用脚本中的软件更新以及安装功能,请确保使用官方的固件,不要用论坛上其它人编译的各种固件,经测试发现这些固件在刷新软件源时会有各种问题,导致无法正确安装软件。暂时不知道原因!优酷PC网页视频正常播放一次再启用脚本规则(/etc/dnsmasq.conf中,addn-hosts代码前面添加一个#号,保存,重启一下dnsmasq进程,就关掉脚本的host规则了,优酷就能打开了。去掉#号,保存,重启dnsmasq进程,恢复使用规则,过滤广告。),就能正常播放并去广告,不会有禁用cookie的错误提示,去广告后爱奇艺PC网页视频发现遨游5浏览器可以正常播放并能直接跳过片头广告,其它浏览器好像不行。
原文地址:https://www.right.com.cn/forum/thread-217335-1-1.html
点击链接加入群聊三群:751529538
点击链接加入群聊二群:376877156
点击链接加入群聊【路由器交流群:622891808已满】
本站附件分享,如果附件失效,可以去找找看
饿了么红包