嫖阿里云私人安全加密接入 (HTTP(s)、DoH、DoT、DoQ) 同步进AdGuard Home ...
本帖最后由 奇迹 于 2025-3-19 23:10 编辑> 问:为什么要这么干?
答:阿里云解析中时间戳有效期为1天 所以生成的链接不能一直使用
!(https://t.jscz.de/1742395419821.png)
相关链接:https://help.aliyun.com/zh/dns/adguard-home-how-to-set-up-alibaba-public-dns-server
**step1**
进入控制台
https://dnsnext.console.aliyun.com/pubDNS
**友情提示:记得设置预警金额阈值 不然 一套房没了**
拿到对应的key 记得打开状态
!(https://t.jscz.de/1742394755007.png)
把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
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}
NR==27 {$0=arr}
NR==28 {$0=arr}
NR==29 {$0=arr}
NR==30 {$0=arr}
NR==31 {$0=arr}
NR==32 {$0=arr}
NR==33 {$0=arr}
NR==34 {$0=arr}
NR==35 {$0=arr}
NR==36 {$0=arr}
NR==37 {$0=arr}
NR==38 {$0=arr}
NR==39 {$0=arr}
NR==40 {$0=arr}
NR==41 {$0=arr}
NR==42 {$0=arr}
NR==43 {$0=arr}
NR==44 {$0=arr}
NR==45 {$0=arr}
{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里设置负载均衡
!(https://t.jscz.de/1742395504126.png)
问:为什么不设置并行请求
答:因为并行的话所有的请求都会经过key对应的账户,因为一个月1000W的免费配额,完全支撑不了,再者国内的阿里云的服务器响应速度都是个位数ms的,所以才选择负载均衡
---
效果
!(https://t.jscz.de/1742395334813.png)
!(https://t.jscz.de/1742395723063.png) 能用api获取新的label吗 其实阿里云DNS是有DoQ的,你去看看这个吧 https://help.aliyun.com/zh/dns/adguard-home-how-to-set-up-alibaba-public-dns-server
Doq比DoH更安全且更快,能用DoQ就用DoQ吧
//DNS-over-HTTPS设置如下:
https://label.alidns.com/dns-query
//DNS-over-TLS设置如下:
tls://label.alidns.com
//DNS-over-QUIC设置如下:
quic://label.alidns.com nyarime 发表于 2025-3-19 22:59
能用api获取新的label吗
可以啊
脚本都放着了
另外球球支持markdown 哈哈 本帖最后由 奇迹 于 2025-3-19 23:06 编辑
candy 发表于 2025-3-19 23:00
其实阿里云DNS是有DoQ的,你去看看这个吧 https://help.aliyun.com/zh/dns/adguard-home-how-to-set-up-ali ...
帖子里有支持DOQ 自己修改一下脚本就行了 感谢分享 感谢分享
页:
[1]