OpenWrt自动更新设置和屏蔽广告
OpenWrt路由器自动更新国内重要网站名单
登录路由器后:
root@OpenWrt:~# cd /usr/bin
root@OpenWrt:~# touch chinalist
root@OpenWrt:~# chmod +x chinalist
root@OpenWrt:~# vi chinalist
#!/bin/sh
wget -4 --no-check-certificate -O /etc/dnsmasq.d/accelerated-domains.china.conf https://github.com/felixonmars/dnsmasq-china-list/raw/master/accelerated-domains.china.conf
wget -4 --no-check-certificate -O /etc/dnsmasq.d/bogus-nxdomain.china.conf https://github.com/felixonmars/dnsmasq-china-list/raw/master/bogus-nxdomain.china.conf
wget -4 --no-check-certificate -O /etc/dnsmasq.d/apple.china.conf https://github.com/felixonmars/dnsmasq-china-list/raw/master/apple.china.conf
wget -4 --no-check-certificate -O /etc/dnsmasq.d/google.china.conf https://github.com/felixonmars/dnsmasq-china-list/raw/master/google.china.conf
accelerated-domains.china.conf 内容越来越多了,可能会影响路由器的运行速度。这个文件其实应该分拆成二个:
- accelerated-domains.china.master.conf - accelerated-domains.china.slave.conf
master.conf 包含国内权重最高的个几千个网站,每个路由器可以使用这个文件 slave.cof 包含国内权重不太高的网站,性能不高的路由器可以不使用这个文件
如果你的路由器性能不高,建议不要经常更新accelerated-domains.china.conf 以免路由器速度越来越慢。默认配置不再更新此文件,如果你的路由器性能较好,你可以手动更新
非特殊情况,可以不用 accelerated-domains.china.conf ,有的国内 DNS 可以同时解析国内外网站。路由器里只要保留广告屏蔽就行了
OpenWrt路由器自动屏蔽广告
/etc/dnsmasq.d下有个 ad-cn.conf 文件,内容类似如下:
server=/.mobads.baidu.com/127.0.0.0
server=/.mobads-logs.baidu.com/127.0.0.0
server=/.media.admob.com/127.0.0.0
...
意思是.mobads.baidu.com的域名解析转发到 127.0.0.0,这个地址不具备域名解析的功能,于是就达到了屏蔽广告的功能
运行命令:
root@OpenWrt:~# cd /usr/bin
root@OpenWrt:~# touch blockad-cn
root@OpenWrt:~# chmod +x blockad-cn
root@OpenWrt:~# vi blockad-cn
#!/bin/sh
# Author: https://github.com/softwaredownload/openwrt-fanqiang
# last update: 2018-10
TMP_HOSTS=/tmp/block.hosts.unsorted
HOSTS=/etc/dnsmasq.d/ad-cn.conf
# remove any old TMP_HOSTS that might have stuck around
rm ${TMP_HOSTS} 2> /dev/null
for URL in \
"https://github.com/softwaredownload/cnhosts/raw/data/_build/tmp/full/hosts" \
"https://github.com/e32ubhds/Hosts/raw/master/Hosts"
do
# filter out comment lines, empty lines, localhost...
# remove trailing comments, space( ,tab), empty line
# replace line to dnsmasq format
# remove carriage returns
# append the results to TMP_HOSTS
wget -4 --no-check-certificate -qO- "${URL}" | grep -v -e "^#" -e "^\s*$" -e "localhost" -e "broadcasthost" -e "ip6" -e "^;" -e "^@" -e "^:" -e "^[a-zA-Z]" \
| sed -E -e "s/#.*$//" -e "s/[[:space:]]*//g" -e "/^$/d" \
-e "s/^127.0.0.1/server=\/./" -e "s/0.0.0.0/server=\/./" -e "/^[0-9].*$/d" -e "s/$/\/127.0.0.0/" \
| tr -d "\r" >> ${TMP_HOSTS}
done
# remove duplicate hosts and save the real hosts file
sort ${TMP_HOSTS} | uniq > ${HOSTS}
rm ${TMP_HOSTS} 2> /dev/null
OpenWrt自动生成广告屏蔽列表说明:
-
2018-10起,blockad分成 blockad-cn 和 blockad-en 分别用于是屏蔽国内外广告
-
运行上面命令产生的广告屏蔽列表比较长,如果路由器性能比较低,dnsmasq匹配域名负荷会太大
-
如果dnsmasq超负荷工作,可能会失去响应,导致打不开网页,这时需要登录路由器运行命令: /etc/init.d/dnsmasq restart
-
所以,还是尽量用性能好点的路由器吧
路由器性能比电脑差很多,如果屏蔽列表很长,那么短时间内快速打开数个网页就可能导致dnsmasq失去响应。最好是看完一个网页就关闭一个,再打开新的网页
我认为在多数情况下,屏蔽广告可以在电脑里操作,移动设备可以用专门的广告屏蔽软件。当然,如果路由器性能很是强悍,在路由器里屏蔽广告是最爽的事情
通常的做法,在路由器里屏蔽部分域名,然后在电脑里设置更广泛、精确的屏蔽,主要是设置host文件屏蔽和浏览器插件屏蔽
浏览器插件屏蔽,可以装这些Chrome浏览器插件:uBlock Origin,ADfree.Player.Online。其中uBlock Origin的作用和Adblock Plus类似,但是设置更加丰富
计划任务:定时更新dnsmasq配置文件和自动重启shadowsocks
root@OpenWrt:~# crontab -e
输入以下内容:
*/30 * * * * isfound=$(ps | grep "ss-redir" | grep -v "grep"); if [ -z "$isfound" ]; then echo "$(date): restart ss-redir...">>/tmp/log/ss-monitor.log && /etc/init.d/shadowsocks restart; fi
* 12 * * * /usr/bin/chinalist
* 12 * * * /usr/bin/blockad-cn
OpenWrt计划任务说明:
- 每半小时检查shadowsocks-libev 客户端,如果退出就自动重启
- 每天中午12点运行chinalist
- 每天中午12点运行blockad-cn
2014-09-24版的dir505, wr2543预编译固件是启用了计划任务的,这会有潜在的不确定性,如果更新时下载的文件如accelerated-domains.china.conf存在错误,导致dnsmasq无法启动,翻墙功能自然失效
如果你启用了上面的计划任务,某一天突然不能翻墙了,这时设置客户端的IP地址为和路由器同网段,登录路由器,用ps命令查看dnsmasq进程是否启动了,如果没有启动,就重刷固件或者用 https://github.com/softwaredownload/openwrt-fanqiang/tree/master/openwrt/default/etc/dnsmasq.d 下面的文件代替路由器里/etc/dnsmasq.d/下的文件
一般不建议自动更新 /etc/dnsmasq.d/的文件 , 以免给翻墙失败时排查原因增加难度。可以手动运行命令更新,更新后立即重启 dnsmasq 测试一下上网是否正常
附录:计划任务定时关闭路由器OpenWrt:
人类的本性是目光短浅,玩得一时兴趣就会忘记定时休息的重要性。解决办法是在路由器里设置计划任务,禁止夜里某个时间段里使用路由器。下面的例子中,每20分钟检测一次,如果迟于20点10分或者早于7点就自动关闭OpenWrt路由器。这对小孩子特别有用,现在很多孩子使用电子设备上瘾,一个人睡的话甚至半夜在被窝里偷偷上网,现在好了,除非孩子强大到会登陆路由器修改设置,否则半夜重启路由器都无法通过路由器上网了
不过现在移动流量越来越便宜了,路由器自动关机控制的主要是我们自己使用电脑的时间,而不是控制小孩玩移动设备了
*/20 * * * * TIME=$(date +"%H%M"); if [ $TIME -ge 2010 ] || [ $TIME -le 700 ]; then poweroff; fi
相关资源: