Skip to content

无插件广告拦截功能设置方案

Aethersailor edited this page Dec 17, 2024 · 18 revisions

介绍

按照本项目的方案,只使用 OpenClash 一个插件,且中国大陆域名均绕过了 OpenClash 内核,因此无法依靠 OpenClash 的规则来完成广告拦截
利用 OpenClash 的“插件设置”>“开发者选项”功能,让 OpenClash 每次启动时,为 Dnsmasq 拉取相应的规则文件,并清理 DNS 缓存使广告拦截功能生效。

以下内容均以 OpenClash 最新 Dev 版本为示例,旧版本可能有所不同,不保证可用。
v0.46.043 之前版本的 OpenClash 无需在结尾处添加清理 DNS 缓存步骤。

已验证 v0.46.059 版本仍然可以使用以下代码

“开发者选项”内容示例:
注意:注意:/tmp/dnsmasq.d 文件夹命名可能和代码中的不一致,一切以你本机实际情况为准,请自行修改代码中的 dnsmasq.d 文件夹名称

#!/bin/sh
. /usr/share/openclash/log.sh
. /lib/functions.sh
# This script is called by /etc/init.d/openclash
# Add your custom firewall rules here, they will be added after the end of the OpenClash iptables rules
LOG_OUT "Tip: Start Add Custom Firewall Rules..."

# ==========================================
# 以下是广告过滤规则拉取脚本
LOG_OUT "拉取 anti-AD 广告过滤规则…"  
# 注意自行核实 /tmp 下的 dnsmasq.d 文件夹名称,并修改对应代码  
curl -s https://anti-ad.net/anti-ad-for-dnsmasq.conf -o /tmp/dnsmasq.cfg01411c.d/anti-ad-for-dnsmasq.conf
# 广告过滤规则拉取脚本结束

# 以下是 GitHub520 加速规则拉取脚本
LOG_OUT "拉取 GitHub520 加速规则…"
sed -i '/# GitHub520 Host Start/,/# GitHub520 Host End/d' /etc/hosts
curl https://raw.hellogithub.com/hosts >> /etc/hosts
sed -i '/^$/d' /etc/hosts
sed -i '/!/d' /etc/hosts
# GitHub520 加速规则拉取脚本结束

# 清理 DNS 缓存,v0.46.043 之前版本无需此步骤
LOG_OUT "清理 DNS 缓存…"
/etc/init.d/dnsmasq reload
# ==========================================

exit 0

图片仅供示意

设置前提

必须关闭 Dnsmasq 自带的 DNS 重定向功能
该功能位于 网络 > DHCP/DNS 页面中,务必关闭
若不关闭,有可能会引起 DNS 解析问题,并会导致本方案的广告拦截设置无法拦截国外域名

根据个人需求手工修改开发者选项的说明如下:
注意“开发者选项”中自带的内容,不要删除!以下内容需要添加在原有的“exit 0”之前

添加广告拦截规则

以下代码内容中,#符号开头的是注释,你可以自己修改。LOG_OUT 开头的命令则可以在 OpenClash 的运行日志中输出相应的内容,以便于观察状态。

dnsmasq 格式规则

你可以使用任意支持 dnsmasq 格式的广告拦截规则文件,此处以 anti-AD 广告拦截规则为例。
利用相关的命令,使 OpenClash 启动时拉取 anti-ad-for-dnsmasq.conf 文件至 /tmp/dnsmasq.d/ 目录下,从而实现广告拦截功能
注意:/tmp/dnsmasq.d 文件夹命名可能和代码中的不一致,一切以你本机实际情况为准,请自行修改代码中的 dnsmasq.d 文件夹名称

在 OpenClash 的开发者选项中添加如下指令,即可令 OpenClash 在每次启动时拉取为 Dnsmasq 拉取最新的 anti-AD 规则:

# 以下是广告过滤规则拉取脚本
LOG_OUT "拉取 anti-AD 广告过滤规则…"
# 注意自行核实 /tmp 下的 dnsmasq.d 文件夹名称,并修改对应代码
curl -s https://anti-ad.net/anti-ad-for-dnsmasq.conf -o /tmp/dnsmasq.cfg01411c.d/anti-ad-for-dnsmasq.conf
# 广告过滤规则拉取脚本结束

你也可以将 anti-AD 规则替换成任何支持 Dnsmasq 格式的广告规则,替换下载链接和文件名即可

hosts 格式规则

有些人可能对 anti-AD 规则比较反感
可以使用 秋风广告规则,一款优秀的轻量广告拦截规则
该规则是 hosts 文件,因此需要相应的命令来修改 hosts 文件,清除旧规则再添加新规则

以下内容仅做示例,如果命令中的广告拦截规则文件下载失败,请自行更换为你的网络环境下可以访问的规则下载 CDN 地址!

在开发者选项中添加如下指令即可在每次启动时为 Dnsmasq 加载最新的秋风广告规则:

sed -i '/# AWAvenue-Ads-Rule Start/,/# AWAvenue-Ads-Rule End/d' /etc/hosts
curl https://github.tmby.shop/https://raw.githubusercontent.com/TG-Twilight/AWAvenue-Ads-Rule/main/AWAvenue-Ads-Rule.txt | \
    sed '/127.0.0.1 localhost/d; /::1 localhost/d; 1s/^/# AWAvenue-Ads-Rule Start\n/; $s/$/\n# AWAvenue-Ads-Rule End/' >> /etc/hosts
sed -i '/^$/d' /etc/hosts
sed -i '/!/d' /etc/hosts

需要注意的是,hosts 规则必须清楚旧内容再添加新内容
如果你换用了其他的 hsots 规则,请自行修改 sed 有关的命令以使其可以正确的修改 hosts 文件的内容,千万不能直接复制! 以上广告拦截规则请二选一,因为 anti-AD 已经包含了秋风广告规则

Github 加速规则

可以顺带添加 GitHub520 的加速规则,该规则是 hosts 文件,因此同样需要相应的命令来清除旧规则再添加新规则
在开发者选项中添加以下内容,实现每次启动时清空旧的 Github520 加速规则再合并新规则:

sed -i '/# GitHub520 Host Start/,/# GitHub520 Host End/d' /etc/hosts
curl https://raw.hellogithub.com/hosts >> /etc/hosts
sed -i '/^$/d' /etc/hosts
sed -i '/!/d' /etc/hosts

如果你的网络环境过于奇葩,无法访问任何 Github 相关的 CDN,但是可以通过 Github520 访问 Github,那么请将 Github520 规则的拉取指令放在前,广告拦截规则的拉取指令放在后,并且在中间加上重启 Dnsmasq 的命令,使 Github520 规则生效后再执行广告拦截规则的拉取。(感谢 AKA-Cigma 提供)
具体命令见下方示例:

# 以下是 GitHub520 加速规则拉取脚本
LOG_OUT "拉取GitHub520加速规则…"
sed -i '/# GitHub520 Host Start/,/# GitHub520 Host End/d' /etc/hosts
curl https://raw.hellogithub.com/hosts >> /etc/hosts
sed -i '/^$/d' /etc/hosts
sed -i '/!/d' /etc/hosts
# GitHub520 加速规则拉取脚本结束
# 清理 DNS 缓存
LOG_OUT "清理 DNS 缓存…"
/etc/init.d/dnsmasq reload
# 以下是广告过滤规则拉取脚本
LOG_OUT "拉取秋风广告过滤规则…"
sed -i '/# AWAvenue-Ads-Rule Start/,/# AWAvenue-Ads-Rule End/d' /etc/hosts
curl https://github.tmby.shop/https://raw.githubusercontent.com/TG-Twilight/AWAvenue-Ads-Rule/main/AWAvenue-Ads-Rule.txt | \
    sed '/127.0.0.1 localhost/d; /::1 localhost/d; 1s/^/# AWAvenue-Ads-Rule Start\n/; $s/$/\n# AWAvenue-Ads-Rule End/' >> /etc/hosts
sed -i '/^$/d' /etc/hosts
sed -i '/!/d' /etc/hosts
# 广告过滤规则拉取脚本结束
# 清理 DNS 缓存
LOG_OUT "清理 DNS 缓存…"
/etc/init.d/dnsmasq reload

注意以上所有的命令都是示例,请根据自身网络环境修改。如果你是纯小白,无法确定自己的网络环境能否访问以上内容,也不了解各种广告拦截规则的差异,那么请直接按照下方“最终效果”中的内容修改你的“开发者选项”即可。

最终效果

添加完 anti-AD 和 Github520 规则后,开发者选项中的内容应当如下:

#!/bin/sh
. /usr/share/openclash/log.sh
. /lib/functions.sh
# This script is called by /etc/init.d/openclash
# Add your custom firewall rules here, they will be added after the end of the OpenClash iptables rules
LOG_OUT "Tip: Start Add Custom Firewall Rules..."

# 以下是广告过滤规则拉取脚本
LOG_OUT "拉取 anti-AD 广告过滤规则…"
# 注意自行核实 /tmp 下的 dnsmasq.d 文件夹名称,并修改对应代码  
curl -s https://anti-ad.net/anti-ad-for-dnsmasq.conf -o /tmp/dnsmasq.cfg01411c.d/anti-ad-for-dnsmasq.conf
# 广告过滤规则拉取脚本结束

# 以下是 GitHub520 加速规则拉取脚本
LOG_OUT "拉取 GitHub520 加速规则…"
sed -i '/# GitHub520 Host Start/,/# GitHub520 Host End/d' /etc/hosts
curl https://raw.hellogithub.com/hosts >> /etc/hosts
sed -i '/^$/d' /etc/hosts
sed -i '/!/d' /etc/hosts
# GitHub520 加速规则拉取脚本结束

# 清理 DNS 缓存
LOG_OUT "清理 DNS 缓存…"
/etc/init.d/dnsmasq reload

exit 0

抛砖引玉

以上方法其实本质上就是利用 dnsmasq 实现去广告,你也可以不使用 OpenClash 的开发者选项,而使用其他方法(例如计划任务)通过指令拉取去广告规则并调用 dnsmasq 实现去广告。

声明

本项目之方案编写于2024年4月
项目维护者允许转载本方案内容和以本方案内容进行二次创作,比如以本项目内容制作视频等。
Youtube 已经有上不止一个 UP 主搬运了本方案内容,当然肯定会有人说“OpenClash 设置就摆在那里都是巧合雷同罢了”
内容相同我无所谓,但是连原理解释和示例操作也雷同,甚至重点强调部分都相同,开发者选项也照抄,就差照着读了。
虽然如此,但是这些形式我都不反对,毕竟任何搬运行为都是有利于小白的,制作视频盈利我也不反对,毕竟这也是要花时间的,也是付出时间的劳动。
你可以以任何形式,利用本项目的内容,但是
请注明本项目的地址,请注明本项目的地址,请注明本项目的地址!
感谢合作!