首页 / 资讯中心 / 文章详情

DDNS 配置 DNSPod 国际版(dnspod_com):API Token 认证、TTL/line 参数与底层实现解析

DDNS 配置 DNSPod 国际版(dnspod_com):API Token 认证、TTL/line 参数与底层实现解析 ★ FEATURED ARTICLE
网络CLI【免费下载链接】DDNS自动更新域名解析到本机IP,支持dnspod,阿里DNS,CloudFlare,华为云,DNSCOM...项目地址https://gitcode.com/gh_mirrors/dd/DDNS点击查看免费下载本文基于 DDNS 仓库中的 DNSPod 国际版配置文档讲解如何在 DDNS 中配置dnspod_com服务商包括 API Token 与邮箱密码两种认证方式的获取方法、完整 JSON 配置示例与参数说明、ttl/line的取值范围并结合 ddns/provider/dnspod_com.py 与 ddns/provider/dnspod.py 源码说明 DDNS 是如何调用 DNSPod 国际版 API 完成域名解析动态更新的。DNSPod 国际版与中国版的区别DNSPod 国际版dnspod.com是面向全球用户的权威 DNS 解析服务在海外地区广泛使用支持动态 DNS 记录的创建与更新。DDNS 通过dns: dnspod_com接入国际版 API与面向中国大陆的 DNSPod 中国版dnspod.cn是两个独立的服务商实现。从源码结构看两者的差异被收敛到了类级别常量上ddns/provider/dnspod.py 中的DnspodProvider是 DNSPod 中国版实现API 端点为https://dnsapi.cn默认解析线路为中文默认ddns/provider/dnspod_com.py 中的DnspodComProvider直接继承自DnspodProvider仅重写了两个类属性class DnspodComProvider(DnspodProvider): DNSPOD.com Provider (国际版) This class extends the DnspodProvider to use the global DNSPOD API. endpoint https://api.dnspod.com # 国际版 API 端点 DefaultLine default # 国际版默认线路英文标识也就是说国际版与国际/中国版共用同一套请求封装、记录查询、创建与更新逻辑只是 API 域名https://api.dnspod.com和默认线路标识default而非默认不同。测试用例 tests/test_provider_dnspod_com.py 也专门验证了这两个常量以及它对中国版 Provider 的继承关系。此外从 ddns/provider/init.py 的服务商映射表可以看到dnspod_global是dnspod_com的兼容别名两者等价dnspod_com: DnspodComProvider, dnspod_global: DnspodComProvider, # 兼容旧的dnspod_global建议大陆用户通常使用 DNSPod 中国版dns: dnspod参见 docs/providers/dnspod.md域名托管在 dnspod.com 账号下的用户才使用dnspod_com。认证信息获取DDNS 对dnspod_com采用idtoken双字段认证支持两种凭据形式推荐优先使用 API Token。方式一API Token 认证推荐API Token 方式安全性更高是 DNSPod 推荐的集成方法。获取步骤登录 DNSPod 国际版控制台www.dnspod.com进入 “User Center” “API Token”或访问控制台的 User Security 页面点击 “Create Token”填写描述选择域名管理权限完成创建复制ID数字和Token字符串。密钥只显示一次请妥善保存。对应配置{ dns: dnspod_com, id: 123456, // DNSPod International API Token ID token: YOUR_API_TOKEN // DNSPod International API Token Secret }方式二邮箱密码认证不推荐使用 DNSPod 账号邮箱和密码。安全性较低仅建议特殊场景使用{ dns: dnspod_com, id: your-emailexample.com, // DNSPod 账号邮箱 token: your-account-password // DNSPod 账号密码 }这两种凭据在源码层面完全等价——ddns/provider/dnspod.py 的_request方法会统一把它们拼成 DNSPod 老式 API 的login_token参数{id},{token}形式随每次 POST 请求提交params.update({login_token: {0},{1}.format(self.id, self.token), format: json}) data self._http(POST, / action, bodyparams)DDNS 基类构造时会校验id、token、endpoint均已配置ddns/provider/_base.py 的_validate缺失会直接抛出ValueError。同时日志输出中对 token 做了脱敏处理保留首尾 2 位、中间打码见_base.py中的_mask_sensitive_data方法避免密钥出现在调试日志中。完整配置示例以下是包含格式校验字段、IP 来源、域名列表、线路与 TTL 的完整配置{ $schema: https://ddns.newfuture.cc/schema/v4.1.json, // 格式验证 dns: dnspod_com, // 当前服务商 id: 123456, // DNSPod International API Token ID token: YOUR_API_TOKEN, // DNSPod International API Token Secret index4: [url:http://api.ipify.org, public], // IPv4地址来源 index6: public, // IPv6地址来源 ipv4: [ddns.newfuture.cc], // IPv4 域名 ipv6: [ddns.newfuture.cc, ipv6.ddns.newfuture.cc], // IPv6 域名 line: default, // 解析线路 ttl: 600 // DNS记录TTL秒 }其中$schema指向 schema/v4.1.json可用于编辑器的自动补全与校验仓库 docs/public/schema/ 下也存放了 v2 到 v4.1 的历史版本。参数说明参数说明类型取值范围/选项默认值参数类型dns服务商标识字符串dnspod_com无服务商参数id认证 ID字符串DNSPod API Token ID 或邮箱无服务商参数token认证密钥字符串DNSPod API Token 密钥或密码无服务商参数index4IPv4 来源数组参考JSON 配置文档default公用配置index6IPv6 来源数组参考JSON 配置文档default公用配置ipv4IPv4 域名数组域名列表无公用配置ipv6IPv6 域名数组域名列表无公用配置line解析线路字符串参考下方 line 小节default服务商参数ttlTTL 时间整数秒参考下方 ttl 小节600服务商参数proxy代理设置数组参考JSON 配置文档无公用网络sslSSL 验证方式布尔/字符串auto、true、falseauto公用网络cache缓存设置布尔/字符串true、false、filepathtrue公用配置log日志配置对象参考JSON 配置文档无公用配置参数类型说明公用配置所有支持的 DNS 服务商均适用的标准 DNS 配置参数公用网络所有支持的 DNS 服务商均适用的网络设置参数服务商参数当前服务商支持值与当前服务商相关注意ttl和line不同套餐支持的值可能不同。以index4为例[url:http://api.ipify.org, public]表示优先通过指定 URL 获取公网 IPv4失败后回退到 DDNS 内置的public渠道IP 获取规则public、url:、regex:、cmd:、shell:、网卡序号等的完整语义可参考 docs/config/json.md 的 index4/index6 小节。cache为默认true时同一 IP 未变化会跳过 API 更新请求降低对 DNSPod 频控的消耗。ttlttl参数指定 DNS 记录的生存时间TTL单位为秒。DNSPod 国际版支持的 TTL 范围为 1 到 604800 秒即 7 天。如果不设置则使用服务商默认值。不同套餐支持的下限不同套餐类型支持的 TTL 范围秒免费版600 ~ 604800专业版120 ~ 604800企业版60 ~ 604800尊享版1 ~ 604800套餐差异以 DNSPod 国际版官方 TTL 说明为准。配置超出套餐下限的 TTL 时建议在日志中观察 API 返回的status.message_request方法在status.code ! 1时会以 warning 级别记录该错误信息见 ddns/provider/dnspod.py。lineline参数指定 DNS 解析线路。DNSPod 国际版支持的线路使用英文标识线路标识说明Default默认China Telecom中国电信China Unicom中国联通China Mobile中国移动CERNET中国教育网Chinese mainland中国大陆Search engine搜索引擎更多线路以 DNSPod 国际版解析线路官方说明为准。从源码看line的处理细节有两点值得注意默认线路未配置line时创建记录会使用DefaultLine即国际版的default中国版为中文默认。大小写归一化更新记录时ddns/provider/dnspod.py 会对线路标识做replace(Default, default)处理即配置line: Default或default均可被正确识别为默认线路避免因为大小写差异导致修改失败。底层实现DDNS 如何调用 DNSPod 国际版 API理解配置参数的背后DDNS 对 DNSPod 国际版的完整调用链可以概括为四个阶段全部继承自 ddns/provider/_base.py 的BaseProvider与 ddns/provider/dnspod.py 的具体实现1. 域名拆分与 zone_id 查询BaseProvider.set_record(domain, value, ...)首先把完整域名拆分为「子域名 主域名」优先识别~/自定义分隔符如sub~example.com否则从右向左逐级尝试example.com→a.example.com…直到Domain.Info接口能查到 zone_id_query_zone_id见 ddns/provider/dnspod.py。查到的 zone_id 会缓存在实例的_zone_map中同一主域名的多个子域无需重复查询。这一步也解释了文档中「域名未找到」这一常见故障若域名未添加到 DNSPod 国际版账号Domain.Info查不到记录_split_zone_and_sub返回空 zone_idset_record会记录找不到 zone_id 或 subdomain的 critical 日志并返回失败。2. 记录查询_query_record通过Record.List接口按domain_id、sub_domain、record_type、line过滤记录。若查到多条同名记录会输出 warning 并取name精确匹配的那一条查到 0 条则返回None交由上层走创建分支。3. 更新或创建记录已存在调用Record.Modify_update_record传入旧记录的id、sub_domain、新的value与record_line记录不存在调用Record.Create_create_record传入domain_id、sub_domain、value、record_typeA/AAAA、record_line缺省取DefaultLine与ttl。所有请求均为application/x-www-form-urlencoded表单 POSTcontent_type TYPE_FORM响应统一按 JSON 解析并以status.code 1判定业务成功。4. 主流程与缓存入口逻辑在 ddns/main.pyrun()通过get_provider_class(config.dns)拿到DnspodComProvider对ipv4列表逐个域名执行update_ip(..., A)、对ipv6列表执行update_ip(..., AAAA)。update_ip先按index4/index6规则取到当前 IP再对每个域名比对缓存——IP 未变化则直接跳过 API 调用IP 变化后才调用dns.set_record(domain, address, ttlconfig.ttl, lineconfig.line, ...)完成记录变更。IPv4 与 IPv6 相互独立一族获取失败不会阻塞另一族。多服务商场景下也可以把 DNSPod 国际版作为providers数组中的一员与其他服务商并列配置参考 tests/config/multi-provider.json 的多 provider 写法各 provider 共享id/token等顶层认证字段或单独声明。运行与调试配置好config.json后使用以下命令运行--debug与-c参数定义见 ddns/config/cli.py# 使用配置文件运行一次 ddns -c config.json # 开启调试模式查看详细的请求/响应日志 ddns -c config.json --debug也可以完全用命令行参数替代配置文件--dns的可选值中包含dnspod_com见 ddns/config/cli.pyddns --dns dnspod_com --id 123456 --token YOUR_API_TOKEN \ --ipv4 ddns.newfuture.cc --index4 public \ --ttl 600 --line default --debug调试日志中可以看到每个 API 动作Domain.Info、Record.List、Record.Modify/Record.Create的请求 URL 与脱敏后的请求体、响应内容以及status.message携带的具体失败原因。常见问题排查认证失败检查 API Token 或邮箱/密码是否正确确认 Token 拥有域名管理权限HTTP 层 401/403 会由基类直接抛出认证失败 [401]/禁止访问 [403]异常ddns/provider/_base.py可在调试日志中定位。域名未找到确保域名已添加到 DNSPod 国际版账号、配置拼写无误、域名处于活跃状态此问题表现为Domain.Info查不到 zone_id 的 critical 日志。记录创建失败检查子域名是否有冲突记录、TTL 设置是否低于套餐下限、Token 是否有修改权限API 的具体错误信息会以 warning 级别输出DNSPod API error: message。请求频率限制DNSPod 有 API 调用频率限制可降低更新频率或保持cache为true让 IP 未变化时不再请求 API。地区访问限制DNSPod 国际版在某些地区可能有访问限制必要时可配置proxy参考 docs/config/json.md 的代理回退写法如[http://127.0.0.1:1080, DIRECT]。小结与参考dnspod_com是 DDNS 中为 DNSPod 国际版dnspod.com提供的服务商适配通过id/tokenAPI Token 或邮箱密码认证、line使用英文线路标识、ttl范围受套餐限制。实现上它与 DNSPod 中国版共享同一套记录管理逻辑仅端点与默认线路不同且兼容dnspod_global别名。关键参考位置配置指南本文依据docs/en/providers/dnspod_com.md、中文对照 docs/providers/dnspod_com.md国际版 Providerddns/provider/dnspod_com.py共用 API 实现ddns/provider/dnspod.py服务商注册与别名ddns/provider/init.py单元测试tests/test_provider_dnspod_com.py通用配置参数参考docs/config/json.md建议优先使用 API Token 方式认证安全性与可管理性都优于邮箱密码方式中国大陆用户若域名托管在 dnspod.cn应改用dnspod中国版服务商。赞分享网络CLI【免费下载链接】DDNS自动更新域名解析到本机IP,支持dnspod,阿里DNS,CloudFlare,华为云,DNSCOM...项目地址https://gitcode.com/gh_mirrors/dd/DDNS点击查看免费下载相关推荐DDNS 中 DNSPoddnspod.cn配置指南认证方式、完整参数与 API 实现解析DDNS 中 DNSPoddnspod.cn配置指南认证方式、完整参数与 API 实现解析 本文围绕 DDNS 仓库 https://link.gitco网络CLIDDNS 项目 Cloudflare 服务商配置指南API Token 认证、proxied 匹配逻辑与 TTL 策略DDNS 项目 Cloudflare 服务商配置指南API Token 认证、proxied 匹配逻辑与 TTL 策略 Cloudflare 是 DDNS 项网络CLIApache DolphinScheduler 集成 KYUUBI 数据源配置参数、Kerberos 认证与底层连接实现解析Apache DolphinScheduler 集成 KYUUBI 数据源配置参数、Kerberos 认证与底层连接实现解析 Apache DolphinSc任务调度大数据后端前端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?
咨询建站