luci-app-mosdns: add custom adblock list source support

This commit is contained in:
sbwml 2022-10-13 09:27:42 +08:00
parent a2f818e433
commit d9c1f1ca62
7 changed files with 41 additions and 3 deletions

View File

@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-mosdns PKG_NAME:=luci-app-mosdns
PKG_VERSION:=1.4.2 PKG_VERSION:=1.4.2
PKG_RELEASE:=1 PKG_RELEASE:=2
LUCI_TITLE:=LuCI Support for mosdns LUCI_TITLE:=LuCI Support for mosdns
LUCI_PKGARCH:=all LUCI_PKGARCH:=all

View File

@ -88,6 +88,14 @@ adblock = s:option(Flag, "adblock", translate("Enable DNS ADblock"))
adblock:depends( "configfile", "/etc/mosdns/config.yaml") adblock:depends( "configfile", "/etc/mosdns/config.yaml")
adblock.default = false adblock.default = false
adblock = s:option(Value, "ad_source", translate("ADblock Source"))
adblock:depends("adblock", "1")
adblock.default = "https://cdn.jsdelivr.net/gh/privacy-protection-tools/anti-AD@master/anti-ad-domains.txt"
adblock:value("geosite.dat", "v2ray-geosite")
adblock:value("https://cdn.jsdelivr.net/gh/privacy-protection-tools/anti-AD@master/anti-ad-domains.txt", "anti-AD")
adblock:value("https://cdn.jsdelivr.net/gh/sjhgvr/oisd@main/dbl_basic.txt", "oisd (basic)")
adblock:value("https://cdn.jsdelivr.net/gh/QiuSimons/openwrt-mos@master/dat/serverlist.txt", "QiuSimons/openwrt-mos")
reload_service = s:option( Button, "_reload", translate("Reload Service"), translate("Reload service to take effect of new configuration")) reload_service = s:option( Button, "_reload", translate("Reload Service"), translate("Reload service to take effect of new configuration"))
reload_service.write = function() reload_service.write = function()
luci.sys.exec("/etc/init.d/mosdns reload") luci.sys.exec("/etc/init.d/mosdns reload")

View File

@ -31,6 +31,9 @@ msgstr "将 Dnsmasq 域名解析请求转发到 MosDNS 服务器"
msgid "Enable DNS ADblock" msgid "Enable DNS ADblock"
msgstr "启用 DNS 广告过滤" msgstr "启用 DNS 广告过滤"
msgid "ADblock Source"
msgstr "广告过滤来源"
msgid "Reload Service" msgid "Reload Service"
msgstr "重载服务" msgstr "重载服务"

View File

@ -118,6 +118,7 @@ start_service() {
setcron setcron
[ "${CONF}" = "/etc/mosdns/config.yaml" ] && init_yaml [ "${CONF}" = "/etc/mosdns/config.yaml" ] && init_yaml
cat /dev/null > $(/usr/share/mosdns/mosdns.sh logfile) cat /dev/null > $(/usr/share/mosdns/mosdns.sh logfile)
[ ! "$(uci -q get mosdns.mosdns.ad_source)" = "geosite.dat" ] && cat /dev/null > /etc/mosdns/rule/adlist.txt
procd_open_instance mosdns procd_open_instance mosdns
procd_set_param command $PROG start -c "$CONF" procd_set_param command $PROG start -c "$CONF"
procd_set_param user root procd_set_param user root
@ -129,6 +130,8 @@ start_service() {
restore_setting restore_setting
[ "$(uci -q get mosdns.mosdns.redirect)" -eq 1 ] && redirect_setting [ "$(uci -q get mosdns.mosdns.redirect)" -eq 1 ] && redirect_setting
reload_others reload_others
[ ! "$(uci -q get mosdns.mosdns.ad_source)" = "geosite.dat" ] && /usr/share/mosdns/mosdns.sh adlist_update &> /dev/null &
} }
stop_service() { stop_service() {

View File

@ -37,6 +37,10 @@ data_providers:
file: "/etc/mosdns/rule/local-ptr.txt" file: "/etc/mosdns/rule/local-ptr.txt"
auto_reload: true auto_reload: true
- tag: adlist
file: "/etc/mosdns/rule/adlist.txt"
auto_reload: true
plugins: plugins:
- tag: lazy_cache - tag: lazy_cache
type: cache type: cache

View File

@ -26,12 +26,30 @@ interface_dns() (
ad_block() ( ad_block() (
adblock=$(uci -q get mosdns.mosdns.adblock) adblock=$(uci -q get mosdns.mosdns.adblock)
if [ "$adblock" -eq 1 ]; then if [ "$adblock" -eq 1 ]; then
echo "provider:geosite:category-ads-all" ad_source=$(uci -q get mosdns.mosdns.ad_source)
if [ "$ad_source" = "geosite.dat" ]; then
echo "provider:geosite:category-ads-all"
else
echo "provider:adlist"
fi
else else
echo "full:disable-category-ads-all.null" echo "full:disable-category-ads-all.null"
fi fi
) )
adlist_update() (
ad_source=$(uci -q get mosdns.mosdns.ad_source)
[ $ad_source = "geosite.dat" ] && exit 0
AD_TMPDIR=$(mktemp -d) || exit 1
curl --connect-timeout 60 -m 900 --ipv4 -fSLo "$AD_TMPDIR/adlist.txt" "$ad_source"
if [ $? -ne 0 ]; then
exit 1
else
\cp $AD_TMPDIR/adlist.txt /etc/mosdns/rule/adlist.txt
rm -rf $AD_TMPDIR
fi
)
geodat_update() ( geodat_update() (
geodat_download() ( geodat_download() (
google_status=$(curl -I -4 -m 3 -o /dev/null -s -w %{http_code} http://www.google.com/generate_204) google_status=$(curl -I -4 -m 3 -o /dev/null -s -w %{http_code} http://www.google.com/generate_204)
@ -58,7 +76,9 @@ if [ "$1" == "dns" ]; then
elif [ "$1" == "ad" ]; then elif [ "$1" == "ad" ]; then
ad_block ad_block
elif [ "$1" == "geodata" ]; then elif [ "$1" == "geodata" ]; then
geodat_update geodat_update && adlist_update
elif [ "$1" == "logfile" ]; then elif [ "$1" == "logfile" ]; then
logfile_path logfile_path
elif [ "$1" == "adlist_update" ]; then
adlist_update
fi fi