动态 DNS (DDNS)
了解动态 DNS (Dynamic DNS) 以及如何使用动态 DNS API 更新 DNS 记录。
请注意,DynDNS 仅适用于使用 CloudDNS 的域名。对于尚未迁移至 CloudDNS 的域名,您可以在此处找到客户端列表: DynDNS 客户端
1. 什么是动态 DNS?
动态 DNS(DynDNS、DDNS)是一项可以在 IP 地址发生变化时自动更新 DNS 记录的服务。例如,当您希望让位于家中的服务器可以从外部访问,但家庭宽带服务商分配的 IP 地址又会定期变化时,通常会使用 DynDNS。借助 DynDNS API,您可以自动更新 netcup 账户中某个域名或子域名的 A 记录 (IPv4) 和/或 AAAA 记录 (IPv6)。使用 DynDNS 时,您的路由器或脚本会定期访问特定 URL,并自动将当前 IP 地址写入您的 CloudDNS 区域中。
前提条件
要使用 DynDNS API,您需要满足以下条件:
- 该域名必须通过 CloudDNS 进行管理。
- 您拥有用于向 netcup API 进行身份验证的有效令牌 (Token)。
- 至少传递一个 IP 地址(IPv4 或 IPv6),例如:https://customercontrolpanel.de/wsDynDns.php?action=update&token=YOUR_TOKEN&fqdn=home.example.com&ipv4Address=203.0.113.10
- 对于 IPv6,您还必须指定 ipv6Address,或者将其作为替代参数使用:https://customercontrolpanel.de/wsDynDns.php?action=update&token=YOUR_TOKEN&fqdn=home.example.com&ipv4Address=203.0.113.10&ipv6Address=2001:db8::10
参数可以通过 HTTP GET (URL)或 POST 请求进行传递。
参数
以下是所用参数的概览:
参数
是否必填
类型
描述
Action
是
字符串 (String)
必须设置为 Update,其他值将被拒绝并返回 HTTP 错误代码 404
Token
是
字符串 (String)
用于将请求与相应客户账户关联的身份验证令牌;无效或未知的令牌将被拒绝并返回 HTTP 错误代码 401
FQDN(完全限定域名)
是
字符串 (String)
要更新的条目的完全限定域名,例如 "example.com" 或 "home.example.com";必须是有效的域名,且属于该令牌对应账户中存在的域名
ipv4Address
可选
字符串 (String)
A 记录的新 IPv4 地址,必须是有效的 IPv4 地址
ipv6Address
可选
字符串 (String)
AAAA 记录的新 IPv6 地址,必须是有效的 IPv6 地址
请注意, 至少一个 (在以下两个参数中: ipv4Address 或 ipv6Address)必须被设置。如果未设置,请求将被拒绝并返回 HTTP 错误代码 400。
各参数详细说明
FQDN
- DynDNS 会自动判断 FQDN 中的哪一部分是与账户关联的主域名,哪一部分是主机名 (Host)。对于多段式顶级域名 (TLD),如 ".co.uk",系统也能自动识别。
- "home.example.com" → 域名 (domain):"example.com",主机名 (host):"home"
- "example.com" → 域名 (domain):"example.com",主机名 (host):"@"(区域根域名 / Zone root)
- 国际化域名 (IDN) 在内部会自动转换为 Punycode 编码。
- 如果在账户中未找到匹配的域名,请求将被拒绝并返回 HTTP 错误代码 404。
- 如果该域名未通过 CloudDNS 进行管理,请求将被拒绝并返回 HTTP 错误代码 400。
ipv4Address / ipv6Address
- 新条目将使用默认生存时间 (TTL) 和默认区域创建。
- 可以在单次调用中同时更新 A 记录和 AAAA 记录。
2. 设置 DynDNS
您可以在此处找到在 FRITZ!Box 路由器上设置 DynDNS 的说明:
在设置过程中,请在提供的字段中输入以下信息:
- 更新 URL (Update URL): https://customercontrolpanel.de/wsDynDns.php?action=update&token=<pass>&fqdn=<domain>&ipv4Address=ipaddr>&ipv6Address=<ip6addr>
- 域名 (Domain Name): <sub.domain.tld>
- 用户名 (Username): 客户编号 (Customer Number)
- 密码 (Password)
更新行为
系统会检查所识别主机的现有 A 记录或 AAAA 记录:
- 记录已存在,且 IP 地址完全相同。
- 无需进行任何更改。
- 记录已存在,但 IP 地址不同。
- 使用提供的 IP 地址更新该记录。
- 记录尚不存在。
- 创建一条新记录。如果这导致了实际的更改,这些更改将保存在 CloudDNS 区域中。如果所提供的所有值均已设置且一致,则不会进行任何更改。
响应格式
响应以 JSON 格式返回 (Content Type: text/json; charset=utf-8):
{ "status": "success", "message": "Record(s) have been saved." }
字段说明
字段
描述
状态
Success (如果成功),否则为 Error
Message
可读的状态消息
成功时可能的 Message 值
- "Record(s) have been saved."
- "No record update needed."
HTTP 状态码与错误代码
HTTP 代码
Message
状态/错误说明
200
"Record(s) have been saved." / "No record update needed."
处理成功
400
"At least one of the two fields need to be specified: ipv4Address, ipv6Address."
既未传递 IPv4 地址,也未传递 IPv6 地址
400
"At least one of the two fields need to be specified: ipv4Address, ipv6Address."
参数格式无效
400
"This domain is not managed through CloudDNS, for this reason this service will not work."
域名未通过 CloudDNS 进行管理
401
"Unable to authenticate with provided token."
令牌无效或未知
404
"No matching domain for the given fqdn was found in your account."
账户中没有匹配的域名
404
"Requested action is not known or not implemented."
Action 缺失或不等于 Update
500
“尝试……时发生错误。请联系我们的技术支持。”
访问 CloudDNS 区域/记录时发生内部错误
400
"<字段> 为必填字段。”
必需的参数(token, fqdn)缺失