-
Notifications
You must be signed in to change notification settings - Fork 1.4k
无插件广告拦截功能设置方案
Caution
本方案已停止维护,本页面仅作存档。
本页面所述的广告拦截功能已不再推荐使用。该方案可能存在兼容性问题,并且不再提供后续更新。
推荐替代方案:
建议安装 luci-app-adblock-fast(直接安装 luci-i18n-adblock-fast-zh-cn 即可)。
该插件同样基于 dnsmasq 实现拦截,但提供更完善的 GUI 管理界面和更稳定的规则更新机制。插件不常驻后台,通常不会产生持续的后台进程开销。
本项目维护者也是 adblock-fast 和 luci-app-adblock-fast 仓库的协作者之一。
使用上述插件时如遇问题,可以向本项目维护者反馈。
Caution
以下内容已归档,仅供历史参考。
本方案通过 OpenClash 的「开发者选项」,在插件启动时运行自定义 Shell 脚本。脚本会自动拉取远程广告过滤规则文件(dnsmasq 格式),并将其加载到系统的 dnsmasq 服务中,从而在不安装额外插件的情况下实现广告拦截与隐私防护。
-
稳定性风险: 脚本依赖
curl拉取远程文件,执行结果容易受到网络环境影响,可能导致拉取失败或 dnsmasq 启动异常。 - 维护责任: 如果仍要使用本方案,应具备一定的故障排查能力,例如查看日志和分析脚本错误。项目维护者不对使用本方案导致的网络故障负责。
- 效果预期: 本方案仅实现 DNS 层面的域名屏蔽。对于视频贴片广告和网页内嵌脚本广告,建议配合浏览器扩展(如 uBlock Origin),以提高拦截效果。
以下规则源仅根据维护者的个人测试和使用偏好列出。
| 规则名称 | 简介 | 特点 |
|---|---|---|
| anti-AD | 中文广告过滤列表。 | 🎯 精准: 致力于高命中率与低误杀率,兼顾隐私保护。 |
| adblockfilters | 规则合集;历史上每 8 小时更新一次。 | 📚 全面: 上游包含大量常见规则,自带去重机制。 |
| adblockfilters-modified | 本项目维护者定制的版本。 | 🐋 巨量: 集成 anti-AD、OISD、1Hosts 等,历史条目数曾超过 65 万。误杀率较高,慎用。 |
| 秋风广告规则 | 轻量化广告规则列表。 | 🍃 轻量: 专注于移动端与家用环境,流量节省效果显著。 |
Note
包含关系说明: adblockfilters-modified ⊇ adblockfilters ⊇ 秋风广告规则 anti-AD ⊇ 秋风广告规则
请根据设备性能和拦截需求,从上述广告过滤规则中选择一项,无需重复添加。
-
GitHub520: 通过
hosts改善 GitHub 访问,缓解图片加载失败等问题。
Important
关键设置:关闭 DNS 重定向
部署前,进入「网络」→「DHCP/DNS」页面,取消勾选「DNS 重定向」。
- 原因: 如果启用重定向,DNS 请求可能被重定向并绕过 dnsmasq,导致广告过滤失效。
- 注意: LEDE 源码固件可能不提供此选项,此时可以忽略该步骤。
请从 一键脚本 和 手动配置 中选择一种部署方式。
Warning
该一键脚本入口已经下线,不再提供可执行安装命令。 历史脚本仅保存在主仓库的 shell/archived/ 目录中,用于历史审阅,不应再用于新部署。
适合不习惯使用 SSH 的用户。
- 进入 OpenClash →「插件设置」→「开发者选项」。
- 在脚本编辑框中,找到
exit 0这一行。 - 将下方任一脚本完整粘贴到
exit 0之前。
点击下方标题可展开查看历史脚本代码。以下选项均已停止维护,不再推荐部署。
历史选项 1:anti-AD 与 GitHub520
# ==============以下是广告过滤规则拉取脚本=================
(
MAX_WAIT_TIME=30
WAIT_INTERVAL=2
elapsed_time=0
if /etc/init.d/openclash status | grep -q "Syntax:"; then
LOG_OUT "[广告过滤规则拉取脚本] 正在检测 OpenClash 运行状态..."
LOG_OUT "[广告过滤规则拉取脚本] 等待 10 秒以确保 OpenClash 已启动..."
sleep 10
else
LOG_OUT "[广告过滤规则拉取脚本] 正在检测 OpenClash 运行状态..."
while ! /etc/init.d/openclash status | grep -q "running"; do
if [ $elapsed_time -ge $MAX_WAIT_TIME ]; then
LOG_OUT "[广告过滤规则拉取脚本] 未能在 30 秒内检测到 OpenClash 运行状态,脚本已停止运行..."
exit 1
fi
sleep $WAIT_INTERVAL
elapsed_time=$((elapsed_time + WAIT_INTERVAL))
done
LOG_OUT "[广告过滤规则拉取脚本] 检测到 OpenClash 正在运行,10 秒后开始拉取规则..."
sleep 10
fi
LOG_OUT "[广告过滤规则拉取脚本] 开始检测 dnsmasq 规则目录..."
UCI_OUTPUT=$(uci show dhcp.@dnsmasq[0] 2>/dev/null)
if echo "$UCI_OUTPUT" | grep -qE 'cfg[0-9a-f]{6}'; then
HASH_ID=$(echo "$UCI_OUTPUT" | grep -oE 'cfg[0-9a-f]{6}' | head -1)
TARGET_DIR="/tmp/dnsmasq.${HASH_ID}.d"
LOG_OUT "[广告过滤规则拉取脚本] 当前 dnsmasq 规则目录: $TARGET_DIR"
elif echo "$UCI_OUTPUT" | grep -qE '@dnsmasq\[[0-9]+\]'; then
TARGET_DIR="/tmp/dnsmasq.d"
LOG_OUT "[广告过滤规则拉取脚本] 当前dnsmasq 规则目录: $TARGET_DIR"
else
TARGET_DIR=$(find /tmp -maxdepth 1 -type d -name "dnsmasq.*.d" | head -n 1)
if [ -z "$TARGET_DIR" ]; then
LOG_OUT "[广告过滤规则拉取脚本] 错误:未找到有效的 dnsmasq 规则目录,脚本已停止!"
exit 1
fi
LOG_OUT "[广告过滤规则拉取脚本] 检测失败,使用已存在的 dnsmasq 规则目录: $TARGET_DIR"
fi
if [ ! -d "$TARGET_DIR" ]; then
mkdir -p "$TARGET_DIR"
fi
LOG_OUT "[广告过滤规则拉取脚本] 清除已有规则…"
rm -f "$TARGET_DIR"/*ad*.conf
sed -i '/# AWAvenue-Ads-Rule Start/,/# AWAvenue-Ads-Rule End/d' /etc/hosts
sed -i '/# GitHub520 Host Start/,/# GitHub520 Host End/d' /etc/hosts
LOG_OUT "[广告过滤规则拉取脚本] 拉取最新的 anti-AD 广告过滤规则,规则体积较大,请耐心等候…"
curl -sS -L -4 --retry 5 --retry-delay 1 "https://testingcf.jsdelivr.net/gh/privacy-protection-tools/anti-AD@refs/heads/master/adblock-for-dnsmasq.conf" -o "$TARGET_DIR/anti-ad-for-dnsmasq.conf" >/dev/null 2>/tmp/anti-ad-curl.log
CURL_EXIT=$?
if [ $CURL_EXIT -eq 0 ]; then
LOG_OUT "[广告过滤规则拉取脚本] anti-AD 规则拉取成功!保存路径:${TARGET_DIR}/anti-ad-for-dnsmasq.conf"
else
LOG_OUT "[广告过滤规则拉取脚本] anti-AD 规则拉取失败 (错误码:$CURL_EXIT),查看 /tmp/anti-ad-curl.log 获取详细信息。"
echo "CURL Exit Code: $CURL_EXIT" >> /tmp/anti-ad-curl.log
fi
LOG_OUT "[广告过滤规则拉取脚本] 拉取最新的 GitHub520 加速规则…"
curl -sSL -4 --retry 5 --retry-delay 1 "https://raw.hellogithub.qkg1.top/hosts" >> /etc/hosts 2> /tmp/github520-curl.log
CURL_EXIT_GH=$?
if [ $CURL_EXIT_GH -eq 0 ]; then
LOG_OUT "[广告过滤规则拉取脚本] GitHub520 加速规则拉取成功!已追加到 /etc/hosts 文件中。"
else
LOG_OUT "[广告过滤规则拉取脚本] GitHub520 加速规则拉取失败 (错误码:$CURL_EXIT_GH),查看 /tmp/github520-curl.log 获取详细信息。"
echo "CURL Exit Code: $CURL_EXIT_GH" >> /tmp/github520-curl.log
fi
sed -i '/^$/d' /etc/hosts
sed -i '/!/d' /etc/hosts
LOG_OUT "[广告过滤规则拉取脚本] 重新加载 dnsmasq 服务以应用规则…"
/etc/init.d/dnsmasq stop
/etc/init.d/dnsmasq start
LOG_OUT "[广告过滤规则拉取脚本] 脚本运行完毕!"
) &
# ==============广告过滤规则拉取脚本结束==============历史选项 2:原版 adblockfilters 与 GitHub520
# ==============以下是广告过滤规则拉取脚本=================
(
MAX_WAIT_TIME=30
WAIT_INTERVAL=2
elapsed_time=0
if /etc/init.d/openclash status | grep -q "Syntax:"; then
LOG_OUT "[广告过滤规则拉取脚本] 正在检测 OpenClash 运行状态..."
LOG_OUT "[广告过滤规则拉取脚本] 等待 10 秒以确保 OpenClash 已启动..."
sleep 10
else
LOG_OUT "[广告过滤规则拉取脚本] 正在检测 OpenClash 运行状态..."
while ! /etc/init.d/openclash status | grep -q "running"; do
if [ $elapsed_time -ge $MAX_WAIT_TIME ]; then
LOG_OUT "[广告过滤规则拉取脚本] 未能在 30 秒内检测到 OpenClash 运行状态,脚本已停止运行..."
exit 1
fi
sleep $WAIT_INTERVAL
elapsed_time=$((elapsed_time + WAIT_INTERVAL))
done
LOG_OUT "[广告过滤规则拉取脚本] 检测到 OpenClash 正在运行,10 秒后开始拉取规则..."
sleep 10
fi
LOG_OUT "[广告过滤规则拉取脚本] 开始检测 dnsmasq 规则目录..."
UCI_OUTPUT=$(uci show dhcp.@dnsmasq[0] 2>/dev/null)
if echo "$UCI_OUTPUT" | grep -qE 'cfg[0-9a-f]{6}'; then
HASH_ID=$(echo "$UCI_OUTPUT" | grep -oE 'cfg[0-9a-f]{6}' | head -1)
TARGET_DIR="/tmp/dnsmasq.${HASH_ID}.d"
LOG_OUT "[广告过滤规则拉取脚本] 当前 dnsmasq 规则目录: $TARGET_DIR"
elif echo "$UCI_OUTPUT" | grep -qE '@dnsmasq\[[0-9]+\]'; then
TARGET_DIR="/tmp/dnsmasq.d"
LOG_OUT "[广告过滤规则拉取脚本] 当前dnsmasq 规则目录: $TARGET_DIR"
else
TARGET_DIR=$(find /tmp -maxdepth 1 -type d -name "dnsmasq.*.d" | head -n 1)
if [ -z "$TARGET_DIR" ]; then
LOG_OUT "[广告过滤规则拉取脚本] 错误:未找到有效的 dnsmasq 规则目录,脚本已停止!"
exit 1
fi
LOG_OUT "[广告过滤规则拉取脚本] 检测失败,使用已存在的 dnsmasq 规则目录: $TARGET_DIR"
fi
if [ ! -d "$TARGET_DIR" ]; then
mkdir -p "$TARGET_DIR"
fi
LOG_OUT "[广告过滤规则拉取脚本] 清除已有规则…"
rm -f "$TARGET_DIR"/*ad*.conf
sed -i '/# AWAvenue-Ads-Rule Start/,/# AWAvenue-Ads-Rule End/d' /etc/hosts
sed -i '/# GitHub520 Host Start/,/# GitHub520 Host End/d' /etc/hosts
LOG_OUT "[广告过滤规则拉取脚本] 拉取最新的 adblockfilters 广告过滤规则,规则体积较大,请耐心等候…"
curl -sS -L -4 --retry 5 --retry-delay 1 "https://testingcf.jsdelivr.net/gh/217heidai/adblockfilters@refs/heads/main/rules/adblockdnsmasq.txt" -o "$TARGET_DIR/adblockfilters-for-dnsmasq.conf" >/dev/null 2>/tmp/adblockfilters-curl.log
CURL_EXIT=$?
if [ $CURL_EXIT -eq 0 ]; then
LOG_OUT "[广告过滤规则拉取脚本] adblockfilters 规则拉取成功!保存路径:${TARGET_DIR}/adblockfilters-for-dnsmasq.conf"
else
LOG_OUT "[广告过滤规则拉取脚本] adblockfilters 规则拉取失败 (错误码:$CURL_EXIT),查看 /tmp/adblockfilters-curl.log 获取详细信息。"
echo "CURL Exit Code: $CURL_EXIT" >> /tmp/adblockfilters-curl.log
fi
LOG_OUT "[广告过滤规则拉取脚本] 拉取最新的 GitHub520 加速规则…"
curl -sS -L -4 --retry 5 --retry-delay 1 "https://raw.hellogithub.qkg1.top/hosts" >> /etc/hosts >/dev/null 2>/tmp/github520-curl.log
CURL_EXIT_GH=$?
if [ $CURL_EXIT_GH -eq 0 ]; then
LOG_OUT "[广告过滤规则拉取脚本] GitHub520 加速规则拉取成功!已追加到 /etc/hosts 文件中。"
else
LOG_OUT "[广告过滤规则拉取脚本] GitHub520 加速规则拉取失败 (错误码:$CURL_EXIT_GH),查看 /tmp/github520-curl.log 获取详细信息。"
echo "CURL Exit Code: $CURL_EXIT_GH" >> /tmp/github520-curl.log
fi
sed -i '/^$/d' /etc/hosts
sed -i '/!/d' /etc/hosts
LOG_OUT "[广告过滤规则拉取脚本] 重新加载 dnsmasq 服务以应用规则…"
/etc/init.d/dnsmasq stop
/etc/init.d/dnsmasq start
LOG_OUT "[广告过滤规则拉取脚本] 脚本运行完毕!"
) &
# ==============广告过滤规则拉取脚本结束==============历史选项 3:adblockfilters-modified 与 GitHub520
# ==============以下是广告过滤规则拉取脚本=================
(
MAX_WAIT_TIME=30
WAIT_INTERVAL=2
elapsed_time=0
if /etc/init.d/openclash status | grep -q "Syntax:"; then
LOG_OUT "[广告过滤规则拉取脚本] 正在检测 OpenClash 运行状态..."
LOG_OUT "[广告过滤规则拉取脚本] 等待 10 秒以确保 OpenClash 已启动..."
sleep 10
else
LOG_OUT "[广告过滤规则拉取脚本] 正在检测 OpenClash 运行状态..."
while ! /etc/init.d/openclash status | grep -q "running"; do
if [ $elapsed_time -ge $MAX_WAIT_TIME ]; then
LOG_OUT "[广告过滤规则拉取脚本] 未能在 30 秒内检测到 OpenClash 运行状态,脚本已停止运行..."
exit 1
fi
sleep $WAIT_INTERVAL
elapsed_time=$((elapsed_time + WAIT_INTERVAL))
done
LOG_OUT "[广告过滤规则拉取脚本] 检测到 OpenClash 正在运行,10 秒后开始拉取规则..."
sleep 10
fi
LOG_OUT "[广告过滤规则拉取脚本] 开始检测 dnsmasq 规则目录..."
UCI_OUTPUT=$(uci show dhcp.@dnsmasq[0] 2>/dev/null)
if echo "$UCI_OUTPUT" | grep -qE 'cfg[0-9a-f]{6}'; then
HASH_ID=$(echo "$UCI_OUTPUT" | grep -oE 'cfg[0-9a-f]{6}' | head -1) # 添加 head -1 确保只获取第一个匹配项
TARGET_DIR="/tmp/dnsmasq.${HASH_ID}.d"
LOG_OUT "[广告过滤规则拉取脚本] 当前 dnsmasq 规则目录: $TARGET_DIR"
elif echo "$UCI_OUTPUT" | grep -qE '@dnsmasq\[[0-9]+\]'; then
TARGET_DIR="/tmp/dnsmasq.d"
LOG_OUT "[广告过滤规则拉取脚本] 当前dnsmasq 规则目录: $TARGET_DIR"
else
TARGET_DIR=$(find /tmp -maxdepth 1 -type d -name "dnsmasq.*.d" | head -n 1)
if [ -z "$TARGET_DIR" ]; then
LOG_OUT "[广告过滤规则拉取脚本] 错误:未找到有效的 dnsmasq 规则目录,脚本已停止!"
exit 1
fi
LOG_OUT "[广告过滤规则拉取脚本] 检测失败,使用已存在的 dnsmasq 规则目录: $TARGET_DIR"
fi
if [ ! -d "$TARGET_DIR" ]; then
mkdir -p "$TARGET_DIR"
fi
LOG_OUT "[广告过滤规则拉取脚本] 清除已有规则…"
rm -f "$TARGET_DIR"/*ad*.conf
sed -i '/# AWAvenue-Ads-Rule Start/,/# AWAvenue-Ads-Rule End/d' /etc/hosts
sed -i '/# GitHub520 Host Start/,/# GitHub520 Host End/d' /etc/hosts
LOG_OUT "[广告过滤规则拉取脚本] 拉取最新的 adblockfilters-modified 广告过滤规则,规则体积较大,请耐心等候…"
curl -sS -4 -L --retry 5 --retry-delay 1 "https://testingcf.jsdelivr.net/gh/Aethersailor/adblockfilters-modified@refs/heads/main/rules/adblockdnsmasq.txt" -o "$TARGET_DIR/adblockfilters-modified-for-dnsmasq.conf" >/dev/null 2>/tmp/adblockfilters-modified-curl.log
CURL_EXIT=$?
if [ $CURL_EXIT -eq 0 ]; then
LOG_OUT "[广告过滤规则拉取脚本] adblockfilters-modified 规则拉取成功!保存路径:${TARGET_DIR}/adblockfilters-modified-for-dnsmasq.conf"
else
LOG_OUT "[广告过滤规则拉取脚本] adblockfilters-modified 规则拉取失败 (错误码:$CURL_EXIT),查看 /tmp/adblockfilters-modified-curl.log 获取详细信息。"
echo "CURL Exit Code: $CURL_EXIT" >> /tmp/adblockfilters-modified-curl.log
fi
LOG_OUT "[广告过滤规则拉取脚本] 拉取最新的 GitHub520 加速规则…"
curl -sSL -4 --retry 5 --retry-delay 1 "https://raw.hellogithub.qkg1.top/hosts" >> /etc/hosts 2> /tmp/github520-curl.log
CURL_EXIT_GH=$?
if [ $CURL_EXIT_GH -eq 0 ]; then
LOG_OUT "[广告过滤规则拉取脚本] GitHub520 加速规则拉取成功!已追加到 /etc/hosts 文件中。"
else
LOG_OUT "[广告过滤规则拉取脚本] GitHub520 加速规则拉取失败 (错误码:$CURL_EXIT_GH),查看 /tmp/github520-curl.log 获取详细信息。"
echo "CURL Exit Code: $CURL_EXIT_GH" >> /tmp/github520-curl.log
fi
sed -i '/^$/d' /etc/hosts
sed -i '/!/d' /etc/hosts
LOG_OUT "[广告过滤规则拉取脚本] 重新加载 dnsmasq 服务以应用规则…"
/etc/init.d/dnsmasq stop
/etc/init.d/dnsmasq start
LOG_OUT "[广告过滤规则拉取脚本] 脚本运行完毕!"
) &
# ==============广告过滤规则拉取脚本结束==============历史选项 4:秋风广告规则与 GitHub520
# ==============以下是广告过滤规则拉取脚本=================
(
MAX_WAIT_TIME=30
WAIT_INTERVAL=2
elapsed_time=0
if /etc/init.d/openclash status | grep -q "Syntax:"; then
LOG_OUT "[广告过滤规则拉取脚本] 正在检测 OpenClash 运行状态..."
LOG_OUT "[广告过滤规则拉取脚本] 等待 10 秒以确保 OpenClash 已启动..."
sleep 10
else
LOG_OUT "[广告过滤规则拉取脚本] 正在检测 OpenClash 运行状态..."
while ! /etc/init.d/openclash status | grep -q "running"; do
if [ $elapsed_time -ge $MAX_WAIT_TIME ]; then
LOG_OUT "[广告过滤规则拉取脚本] 未能在 30 秒内检测到 OpenClash 运行状态,脚本已停止运行..."
exit 1
fi
sleep $WAIT_INTERVAL
elapsed_time=$((elapsed_time + WAIT_INTERVAL))
done
LOG_OUT "[广告过滤规则拉取脚本] 检测到 OpenClash 正在运行,10 秒后开始拉取规则..."
sleep 10
fi
LOG_OUT "[广告过滤规则拉取脚本] 开始检测 dnsmasq 规则目录..."
UCI_OUTPUT=$(uci show dhcp.@dnsmasq[0] 2>/dev/null)
if echo "$UCI_OUTPUT" | grep -qE 'cfg[0-9a-f]{6}'; then
HASH_ID=$(echo "$UCI_OUTPUT" | grep -oE 'cfg[0-9a-f]{6}' | head -1)
TARGET_DIR="/tmp/dnsmasq.${HASH_ID}.d"
LOG_OUT "[广告过滤规则拉取脚本] 当前 dnsmasq 规则目录: $TARGET_DIR"
elif echo "$UCI_OUTPUT" | grep -qE '@dnsmasq\[[0-9]+\]'; then
TARGET_DIR="/tmp/dnsmasq.d"
LOG_OUT "[广告过滤规则拉取脚本] 当前dnsmasq 规则目录: $TARGET_DIR"
else
TARGET_DIR=$(find /tmp -maxdepth 1 -type d -name "dnsmasq.*.d" | head -n 1)
if [ -z "$TARGET_DIR" ]; then
LOG_OUT "[广告过滤规则拉取脚本] 错误:未找到有效的 dnsmasq 规则目录,脚本已停止!"
exit 1
fi
LOG_OUT "[广告过滤规则拉取脚本] 检测失败,使用已存在的 dnsmasq 规则目录: $TARGET_DIR"
fi
if [ ! -d "$TARGET_DIR" ]; then
mkdir -p "$TARGET_DIR"
fi
LOG_OUT "[广告过滤规则拉取脚本] 清除已有规则…"
rm -f "$TARGET_DIR"/*ad*.conf
sed -i '/# AWAvenue-Ads-Rule Start/,/# AWAvenue-Ads-Rule End/d' /etc/hosts
sed -i '/# GitHub520 Host Start/,/# GitHub520 Host End/d' /etc/hosts
LOG_OUT "[广告过滤规则拉取脚本] 拉取最新的 秋风广告规则…"
curl -sSL -4 --retry 5 --retry-delay 1 https://testingcf.jsdelivr.net/gh/TG-Twilight/AWAvenue-Ads-Rule@main/Filters/AWAvenue-Ads-Rule-hosts.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
LOG_OUT "[广告过滤规则拉取脚本] 清除已有的 GitHub520 加速规则…"
sed -i '/# GitHub520 Host Start/,/# GitHub520 Host End/d' /etc/hosts
LOG_OUT "[广告过滤规则拉取脚本] 拉取最新的 GitHub520 加速规则…"
curl -sSL -4 --retry 5 --retry-delay 1 "https://raw.hellogithub.qkg1.top/hosts" >> /etc/hosts 2> /tmp/github520-curl.log
if [ $? -eq 0 ]; then
LOG_OUT "[广告过滤规则拉取脚本] GitHub520 加速规则拉取成功!"
else
LOG_OUT "[广告过滤规则拉取脚本] GitHub520 加速规则拉取失败,查看 /tmp/github520-curl.log 获取详细信息。"
fi
sed -i '/^$/d' /etc/hosts
sed -i '/!/d' /etc/hosts
LOG_OUT "[广告过滤规则拉取脚本] 重新加载 dnsmasq 服务以应用规则…"
/etc/init.d/dnsmasq stop
/etc/init.d/dnsmasq start
LOG_OUT "[广告过滤规则拉取脚本] 脚本运行完毕!"
) &
# ==============广告过滤规则拉取脚本结束==============历史选项 5:仅添加 GitHub520 加速规则
# ==============以下是广告过滤规则拉取脚本=================
(
MAX_WAIT_TIME=30
WAIT_INTERVAL=2
elapsed_time=0
if /etc/init.d/openclash status | grep -q "Syntax:"; then
LOG_OUT "[广告过滤规则拉取脚本] 正在检测 OpenClash 运行状态..."
LOG_OUT "[广告过滤规则拉取脚本] 等待 10 秒以确保 OpenClash 已启动..."
sleep 10
else
LOG_OUT "[广告过滤规则拉取脚本] 正在检测 OpenClash 运行状态..."
while ! /etc/init.d/openclash status | grep -q "running"; do
if [ $elapsed_time -ge $MAX_WAIT_TIME ]; then
LOG_OUT "[广告过滤规则拉取脚本] 未能在 30 秒内检测到 OpenClash 运行状态,脚本已停止运行..."
exit 1
fi
sleep $WAIT_INTERVAL
elapsed_time=$((elapsed_time + WAIT_INTERVAL))
done
LOG_OUT "[广告过滤规则拉取脚本] 检测到 OpenClash 正在运行,10 秒后开始拉取规则..."
sleep 10
fi
LOG_OUT "[广告过滤规则拉取脚本] 开始检测 dnsmasq 规则目录..."
# 通过 uci 命令获取配置标识符
UCI_OUTPUT=$(uci show dhcp.@dnsmasq[0] 2>/dev/null)
if echo "$UCI_OUTPUT" | grep -qE 'cfg[0-9a-f]{6}'; then
HASH_ID=$(echo "$UCI_OUTPUT" | grep -oE 'cfg[0-9a-f]{6}' | head -1)
TARGET_DIR="/tmp/dnsmasq.${HASH_ID}.d"
LOG_OUT "[广告过滤规则拉取脚本] 当前 dnsmasq 规则目录: $TARGET_DIR"
elif echo "$UCI_OUTPUT" | grep -qE '@dnsmasq\[[0-9]+\]'; then
TARGET_DIR="/tmp/dnsmasq.d"
LOG_OUT "[广告过滤规则拉取脚本] 当前dnsmasq 规则目录: $TARGET_DIR"
else
TARGET_DIR=$(find /tmp -maxdepth 1 -type d -name "dnsmasq.*.d" | head -n 1)
if [ -z "$TARGET_DIR" ]; then
LOG_OUT "[广告过滤规则拉取脚本] 错误:未找到有效的 dnsmasq 规则目录,脚本已停止!"
exit 1
fi
LOG_OUT "[广告过滤规则拉取脚本] 检测失败,使用已存在的 dnsmasq 规则目录: $TARGET_DIR"
fi
if [ ! -d "$TARGET_DIR" ]; then
mkdir -p "$TARGET_DIR"
fi
LOG_OUT "[广告过滤规则拉取脚本] 清除已有规则…"
rm -f "$TARGET_DIR"/*ad*.conf
sed -i '/# AWAvenue-Ads-Rule Start/,/# AWAvenue-Ads-Rule End/d' /etc/hosts
sed -i '/# GitHub520 Host Start/,/# GitHub520 Host End/d' /etc/hosts
LOG_OUT "[广告过滤规则拉取脚本] 拉取最新的 GitHub520 加速规则…"
curl -sSL -4 --retry 5 --retry-delay 1 "https://raw.hellogithub.qkg1.top/hosts" >> /etc/hosts 2> /tmp/github520-curl.log
CURL_EXIT_GH=$?
if [ $CURL_EXIT_GH -eq 0 ]; then
LOG_OUT "[广告过滤规则拉取脚本] GitHub520 加速规则拉取成功!已追加到 /etc/hosts 文件中。"
else
LOG_OUT "[广告过滤规则拉取脚本] GitHub520 加速规则拉取失败 (错误码:$CURL_EXIT_GH),查看 /tmp/github520-curl.log 获取详细信息。"
echo "CURL Exit Code: $CURL_EXIT_GH" >> /tmp/github520-curl.log
fi
sed -i '/^$/d' /etc/hosts
sed -i '/!/d' /etc/hosts
LOG_OUT "[广告过滤规则拉取脚本] 重新加载 dnsmasq 服务以应用规则…"
/etc/init.d/dnsmasq stop
/etc/init.d/dnsmasq start
LOG_OUT "[广告过滤规则拉取脚本] 脚本运行完毕!"
) &
# ==============广告过滤规则拉取脚本结束==============如果功能异常或不再需要,请进入 OpenClash 的「开发者选项」,删除前述添加的代码,并保留默认内容。
以下为默认代码示例,仅供参考:
#!/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..."
exit 0