立刻注册账号,享受更清爽的界面!
您需要 登录 才可以下载或查看,没有账号?注册
×
本帖最后由 奇迹 于 2025-3-19 23:10 编辑
问:为什么要这么干?
答:阿里云解析中时间戳有效期为1天 所以生成的链接不能一直使用

相关链接:https://help.aliyun.com/zh/dns/adguard-home-how-to-set-up-alibaba-public-dns-server
step1
进入控制台
https://dnsnext.console.aliyun.com/pubDNS
友情提示:记得设置预警金额阈值 不然 一套房没了
拿到对应的key 记得打开状态

把key填入 py脚本里 保存一下例如dns.py 如果你号多 你就自己魔改一下
#!/usr/bin/python
# -*- coding:utf-8 -*-
import hashlib
import time
# 定义常量
# 移动138
AccessKeyID_m = "填入对应key"
AccessKeySecret_m = "填入对应key"
# 移动182
AccessKeyID_y = "填入对应key填入对应key"
AccessKeySecret_y = "填入对应key"
# 电信189
AccessKeyID_t = "填入对应key"
AccessKeySecret_t = "填入对应key"
# 联通166
AccessKeyID_l = "填入对应key"
AccessKeySecret_l = "填入对应key"
# 联通166-2
AccessKeyID_l2 = "填入对应key"
AccessKeySecret_l2 = "填入对应key"
# 获取当前时间戳(秒)
ts = int(time.time())
# 计算 ts' = ts / 3600,确保定长为7个字符(前面补0)
ts_ = str(ts // 3600).zfill(7)
# 定义生成 URL 的函数
def generate_urls(AccessKeyID, AccessKeySecret):
# 计算 key = sha1(AccessKeySecret + ts' * 3600 + AccessKeyID)
key_input = AccessKeySecret + str(int(ts_) * 3600) + AccessKeyID
key = hashlib.sha1(key_input.encode()).hexdigest()[:40]
# 获取 AccessKeyID' = AccessKeyID 的前16个字符
AccessKeyID_ = AccessKeyID[:16]
# 拼接 label
label = key + ts_ + AccessKeyID_
# 拼接不同的协议格式
url_https = "https://{}.alidns.com/dns-query".format(label)
url_tls = "tls://{}.alidns.com".format(label)
url_quic = "quic://{}.alidns.com".format(label)
url_h3 = "h3://{}.alidns.com/dns-query".format(label)
return [url_https, url_tls, url_quic, url_h3]
# 生成所有提供商的 URL
urls_m = generate_urls(AccessKeyID_m, AccessKeySecret_m)
urls_y = generate_urls(AccessKeyID_y, AccessKeySecret_y)
urls_t = generate_urls(AccessKeyID_t, AccessKeySecret_t)
urls_l = generate_urls(AccessKeyID_l, AccessKeySecret_l)
urls_l2 = generate_urls(AccessKeyID_l2, AccessKeySecret_l2)
# 将生成的 URL 保存到文件
with open('dns.txt', 'w') as f:
all_urls = urls_m + urls_y + urls_t + urls_l + urls_l2
for i, url in enumerate(all_urls):
if i == len(all_urls) - 1: # 如果是最后一行
f.write(" - " + url) # 不加换行
else:
f.write(" - " + url + '\n') # 其他行加换行
print("保存成功dns.txt.")
step2
获取到了以后 找到 AdGuard Home的yaml 配置文件绝对路径
例如我的
/usr/local/bin/AdGuardHome/AdGuardHome.yaml
然后保存下列的代码为dns.sh
然后设置10个小时自动执行一次
#!/bin/bash
# 执行 /root/dns.py 脚本
python3 /root/dns.py
# 等待 5 秒钟
sleep 5
# 配置文件路径
config_file="/usr/local/bin/AdGuardHome/AdGuardHome.yaml"
# 读取 /root/dns.txt 文件的内容
dns_content=$(cat /root/dns.txt)
# 使用 awk 替换第26到第28行的内容
awk -v dns_content="$dns_content" '
BEGIN {split(dns_content, arr, "\n")}
NR==26 {$0=arr[1]}
NR==27 {$0=arr[2]}
NR==28 {$0=arr[3]}
NR==29 {$0=arr[4]}
NR==30 {$0=arr[5]}
NR==31 {$0=arr[6]}
NR==32 {$0=arr[7]}
NR==33 {$0=arr[8]}
NR==34 {$0=arr[9]}
NR==35 {$0=arr[10]}
NR==36 {$0=arr[11]}
NR==37 {$0=arr[12]}
NR==38 {$0=arr[13]}
NR==39 {$0=arr[14]}
NR==40 {$0=arr[15]}
NR==41 {$0=arr[16]}
NR==42 {$0=arr[17]}
NR==43 {$0=arr[18]}
NR==44 {$0=arr[19]}
NR==45 {$0=arr[20]}
{print}
' $config_file > temp_file && mv temp_file $config_file
echo "配置文件已更新。"
# 等待 3 秒钟
sleep 3
# 重启 AdGuardHome
sudo systemctl restart AdGuardHome
echo "AdGuardHome 已重启。"
sleep 1
echo "更新完毕"
step3
ADG HOME里设置负载均衡

问:为什么不设置并行请求
答:因为并行的话所有的请求都会经过key对应的账户,因为一个月1000W的免费配额,完全支撑不了,再者国内的阿里云的服务器响应速度都是个位数ms的,所以才选择负载均衡
效果


|