OpenWrt自动更新设置和屏蔽广告

OpenWrt路由器自动更新国内重要网站名单

登录路由器后:

root@OpenWrt:~# cd /usr/bin
root@OpenWrt:~# touch chinalist
root@OpenWrt:~# chmod +x chinalist
root@OpenWrt:~# vi chinalist

/usr/bin/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

/usr/bin/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

相关资源: