logo
2
0
WeChat Login

DNSPod 拉平同步工具

一个用于DNSPod DNS记录智能同步的Python脚本,支持多线路智能解析拉平。

本项目基于 KincaidYang/CNAMEFlattening 二次开发,针对云原生构建场景进行了优化。

默认使用方式

本工具默认设计用于 云原生构建 环境,通过 .cnb.yml 配置文件使用:

.cnb.yml 配置示例

main: "crontab: */20 * * * *": - stages: - name: sync dns records image: docker.cnb.cool/bring/tools/flatteningdns:latest imports: - https://cnb.cool/$CNB_SLUG/secret/-/blob/main/TencentCloud.yml settings: domain: example.com subdomain: "@" cname: target.example.com secret_id: ${TENCENTCLOUD_SECRET_ID} secret_key: ${TENCENTCLOUD_SECRET_KEY} type: both threads: 20

功能特性

  • 🌐 支持 IPv4 (A) 和 IPv6 (AAAA) 记录同步
  • 🔄 智能线路拉平,确保各线路解析一致
  • 🚀 多线程并发查询,提升同步效率
  • 🎯 DoH (DNS over HTTPS) & 腾讯云 HttpDNS 查询(二选一)
  • 🔧 灵活的参数配置方式
  • 📍 支持全国各省市运营商线路
  • 🌍 包含海外线路支持

安装依赖

pip install tencentcloud-sdk-python requests

其他使用方式

1. 本地命令行运行

python main.py \ --domain "example.com" \ --subdomain "@" \ --cname "target.example.com" \ --secret-id "your-secret-id" \ --secret-key "your-secret-key"

2. 本地环境变量运行

export PLUGIN_DOMAIN="example.com" export PLUGIN_SUBDOMAIN="@" export PLUGIN_CNAME="target.example.com" export PLUGIN_SECRET_ID="your-secret-id" export PLUGIN_SECRET_KEY="your-secret-key" python main.py

3. Docker运行

docker run --rm \ -e PLUGIN_DOMAIN="example.com" \ -e PLUGIN_SUBDOMAIN="@" \ -e PLUGIN_CNAME="target.example.com" \ -e PLUGIN_SECRET_ID="your-secret-id" \ -e PLUGIN_SECRET_KEY="your-secret-key" \ docker.cnb.cool/bring/tools/flatteningdns:latest

参数配置

参数优先级:命令行参数 > PLUGIN_环境变量 > 默认值

参数CLI参数环境变量默认值说明
主域名--domainPLUGIN_DOMAIN-必填,如:example.com
子域名--subdomainPLUGIN_SUBDOMAIN-必填,如:@ 或 www
目标CNAME--cnamePLUGIN_CNAME-必填,目标域名
SecretId--secret-idPLUGIN_SECRET_ID-腾讯云SecretId
SecretKey--secret-keyPLUGIN_SECRET_KEY-腾讯云SecretKey
Token--tokenPLUGIN_TOKEN-可选,STS临时凭证
DoH地址--doh-urlPLUGIN_DOH_URLhttps://doh.pub/dns-queryDoH查询地址
HttpDNS Token--httpdns-tokenPLUGIN_HTTPDNS_TOKEN-传入即启用腾讯云HttpDNS
HttpDNS地址--httpdns-urlPLUGIN_HTTPDNS_URLhttps://119.29.29.99/dHttpDNS查询地址
线程数--threadsPLUGIN_THREADS20并发线程数
同步类型--typePLUGIN_TYPEbothA/AAAA/both
默认线路--default-linesPLUGIN_DEFAULT_LINES上海电信,北京联通,广东移动默认负载线路

支持的线路

脚本内置了全国各省市运营商的DNS线路:

  • 东北:辽宁、吉林、黑龙江(联通/电信/移动)
  • 华北:北京、天津、河北、山西、内蒙(联通/电信/移动)
  • 华东:上海、江苏、浙江、安徽、山东(联通/电信/移动)
  • 华中:河南、湖北、湖南、江西(联通/电信/移动)
  • 华南:广东、广西、福建、海南(联通/电信/移动)
  • 西南:重庆、四川、贵州、云南、西藏(联通/电信/移动)
  • 西北:陕西、甘肃、青海、宁夏、新疆(联通/电信/移动)
  • 教育网:教育网专线
  • 海外:美国、日本、新加坡、台湾等地区

工作原理

  1. 查询阶段:使用各线路DNS服务器通过 DoH 或腾讯云 HttpDNS 查询目标 CNAME(根据配置自动切换)
  2. 分析阶段:对比当前DNSPod记录与查询结果
  3. 同步阶段
    • 删除无效线路的多余记录
    • 更新存在记录的IP地址
    • 创建缺失线路的新记录
    • 为默认线路添加负载均衡

示例输出

🚀 同步 A 记录中... 🗑️ 删除 A 北京联通: 123456 🔄 更新 A 上海电信: 192.168.1.1 ➕ 添加 A 广东移动: 192.168.1.2 ✅ A 同步完成,共 45 条有效线路 🚀 同步 AAAA 记录中... ➕ 添加 AAAA 北京电信: 2001:db8::1 ✅ AAAA 同步完成,共 12 条有效线路 🏁 全部同步完成,用时 15 秒

注意事项

  1. 权限要求:需要腾讯云DNSPod API读写权限
  2. 频率限制:注意DNSPod API调用频率限制
  3. 记录类型:确保目标CNAME的解析记录类型匹配
  4. 线路映射:部分线路名称可能与DNSPod控制台显示略有差异

About

No description, topics, or website provided.
Language
Python98.5%
Dockerfile1.5%