Lazy loaded image
技术分享
公网IP变动后为什么动态域名解析失效了?
字数 2388阅读时长 6 分钟
2025-3-21
2025-4-18
type
status
date
slug
summary
tags
category
icon
password
💡
想做DDNS的同学们,建议不要使用Lucky的动态域名功能,Lucky的动态域名功能会在IP地址变化是,在托管服务商新增一条DNS记录,而不是更新原来的记录,造成同一名称对应多条不同IP的DNS记录,但只有其中一条IP地址有效,造成有效IP无法访问或无法及时访问。
而使用DDNS-GO则不存在这个问题,DDNS-GO时名副其实的更新DNS记录,不会产生多条同名称的记录。
前期参考多篇网上的教程设置了DDNS,域名托管在Cloudflare,并设置了DNS,在飞牛系统采用的时DDNS-G0进行动态更新IP地址,设置后很长一段时间都可以正常内网穿透。但今天发现电信服务商更新了本机的IPV6地址,造成外网无法访问NAS。

公网IPV6变化的原因

公网IPV6变化的原因是我关闭了OVS功能。后来重新尝试去开关VOS,可以复现。因为VOS开启后会给主机分配一个新的IPV6地址。

出现问题的现象

查看DDNS-GO日志显示同步失败,有以下提示:
更新域名解析失败! 异常信息: 返回内容: {"result":null,"success":false,"errors":[{"code":81058,"message":"An identical record already exists."}],"messages":[]} ,返回状态码: 400
进而尝试采用Lucky进行动态域名,提示同步失败,失败原因相同。
虽然存在,但为实现DDNS的更新。
最后在删除所有DNS记录后,在DDNS工具上更新同步,才成功访问。
原以为"An identical record already exists."的原因是DDNS同步与存量的DNS记录存在冲突,需要删除原DNS才能更新,后来才发现提示"An identical record already exists."的目的是想告诉你已经存在相同记录,无需更新。但为什么还是无法访问新的IP地址呢?主要由以下两个原因产生,一是“TTL(生存时间)”,二是客户端的 DNS 缓存。

关于TTL

TTL(Time To Live,生存时间)是 DNS 解析结果的缓存时间,它决定了 DNS 记录在解析后会被缓存多久,即客户端或 DNS 服务器在此时间内不会再次查询 Cloudflare,而是直接使用缓存的 IP。
在DNS记录里就可以设置TTL,一般默认为“自动”,看可以最短设置为1分钟,最长设置为1天(cloudflare)。
在DDNS同步工具里也可以设置DNS的TTL。但设置的TTL时间需属于托管服务商提供的可选TTL时间。比如cloudflare可设置的最短TTL时间为1分钟,你若在DDNS工具内设定的时间为30秒,则该TTL设定无效。
notion image
notion image

客户端的 DNS 缓存

即使 Cloudflare 按照轮询方式返回不同的 IP,客户端的 DNS 解析结果 可能会受到缓存影响
  • 本地 DNS 缓存ipconfig /flushdns 可以清除 Windows 的缓存)。
  • ISP(运营商)的 DNS 服务器可能缓存某个 IP 一段时间
  • 浏览器可能会有自己的 DNS 缓存(如 Chrome、Firefox)。
如果你 修改了 Cloudflare DNS 记录,但仍然解析到旧 IP,可能需要等待 TTL(生存时间)过期,或者手动清除缓存。
💡
正式基于以上两个原因,IP地址更新后,网址成功访问新IP地址的的时间会大于TTL。经过测试,TTL设置成1分钟,在5分钟之类可以成功访问新IP。

关于获取公网IP的方式

💡
建议通过接口方式获取公网IP。通过网卡获取IP的方式一旦失败,可能会终止DDNS同步(亲测),无论是DDNS-GO,还是Lucky。
notion image
在设置 DDNS(动态域名解析) 时,获取公网 IP 的方式主要有 两种
  1. 从网卡获取本机的 IP(本地方式)
  1. 通过接口获取 IP(外部查询方式,如 API)
notion image

1. 通过接口获取公网 IP(外部 API 方式)

原理

设备不会直接读取本机网卡的 IP,而是向 公网 API 发送请求,API 返回设备的 真实公网 IP
常见的 API 接口包括:
  • https://api.ipify.org
  • https://checkip.amazonaws.com
  • https://ipv6.icanhazip.com
  • https://myip.ipip.net

优点

适用于 NAT 网络(如双重路由)
如果你的设备在 内网(NAT)后面,本机网卡只能获取 局域网 IP(如 192.168.x.x10.x.x.x,但 公网 API 能返回真实外网 IP
更准确
  • 部分运营商(如移动宽带)可能会使用 CG-NAT(共享公网 IP),本机网卡无法正确识别自己的公网 IP,而 API 可以返回真实 IP。
  • 适用于 IPv6:有些 ISP 会给每个设备分配多个 IPv6 地址,从网卡获取可能无法区分公网/内网 IP,API 能返回正确的公网 IPv6。
支持 IPv4 / IPv6 识别
  • 可以选择不同 API 获取 IPv4 或 IPv6。
  • 例如:https://ipv4.icanhazip.com(只返回 IPv4)或 https://ipv6.icanhazip.com(只返回 IPv6)。
适用于 DDNS 自动更新
如果你的网络会动态更换公网 IP(如 PPPoE 拨号),外部 API 能实时返回最新的公网 IP。

缺点

依赖外部服务:如果 API 服务器故障或访问受限,DDNS 可能无法正确获取 IP。
响应速度比本机查询稍慢:需要网络请求,可能比直接从网卡读取稍慢 几十毫秒

2. 从网卡获取 IP(本地方式)

原理

直接读取本机的 网卡(Network Interface) 配置,获取当前绑定的 IPv4/IPv6 地址。

优点

本地查询,速度快:不依赖外部 API,直接读取网卡,查询速度更快。
无需联网:如果服务器无 Internet 访问权限,但仍需获取本机 IP(用于内网 DDNS),可以使用此方法。
适用于静态公网 IP:如果 ISP 分配的是 固定公网 IP,那么从网卡读取是最可靠的方法。

缺点

无法识别 NAT 后的公网 IP:如果设备在 内网(NAT) 后,读取的只是内网 IP(如 192.168.1.x),无法用于 DDNS 更新。
可能获取错误的 IP
  • 多个网卡(如 VPN、Docker 网络)可能导致获取到 错误的 IP(例如虚拟网卡的 IP)。
  • IPv6 下,网卡可能同时有多个地址(临时地址、私有地址、公网地址),DDNS 可能会获取到错误的地址。

3. 选择哪种方式?

方式
适用场景
不适用场景
接口获取公网 IP(外部 API)
- 动态公网 IP(PPPoE 拨号)- NAT 网络(内网穿透)- 双重路由(多个路由器)- IPv6 识别(公网/内网)
- 无公网 IP(ISP 限制)- API 访问受限
从网卡获取本机 IP
- 静态公网 IP(ISP 固定 IP)- 本地局域网 DDNS(如内网 DNS)- 无 Internet 访问权限
- NAT/多级路由(可能获取不到公网 IP)- IPv6 可能获取到错误地址

推荐使用方式

  • 如果设备有公网 IP,并且不是 NAT 环境 → 从网卡获取 IP(更快、更稳定)。
  • 如果设备在 NAT 后(如双重路由、运营商 NAT) → 通过接口获取公网 IP(更准确)。
  • 如果 DDNS 需要更新 IPv6 → 通过接口获取公网 IPv6 地址,确保获取的是 公网 IPv6

结论

🚀 如果你的设备在 NAT 后,或者你使用的是 IPv6,推荐用“接口获取公网 IP”的方式,因为这样可以确保获取的是 真实的公网地址,而不是本地网卡的局域网地址。

 

Lucy的DDNS同步更新IP是新增而非修改DNS记录

DDNS工具更新IP地址时,并不是修改DNS记录,而是新增一条记录。而DNS服务器仍然有可能将解析成旧的地址,造成网址无法访问到最新IP地址,因为旧的DNS记录具有TTL,

Cloudflare的轮询(Round Robin)机制

如果 Cloudflare DNS 里 存在多个相同名称的 A / AAAA 记录(即 同一子域名对应多个 IP 地址),Cloudflare 默认使用轮询(Round Robin)方式返回 IP
🔹 工作方式:
  • 每次查询时,Cloudflare 可能会随机返回不同的 IP 地址
  • 例如,你有以下 DNS 记录: 当客户端 ping example.com,DNS 可能:
    • 第一次返回 192.168.1.1
    • 第二次返回 192.168.1.2
    • 第三次返回 192.168.1.3
    • 然后循环……
🟢 优点
  • 适用于 负载均衡,可以让流量分散到多个 IP 上。
  • 对于多服务器部署的网站,能 提高可用性
🔴 缺点
  • 轮询是无状态的,如果某个 IP 失效,Cloudflare 仍然可能返回它(除非 Cloudflare 代理检测到它不可用)。
  • 某些客户端(如 ping)可能缓存 DNS 结果,因此短时间内可能会使用相同的 IP。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
上一篇
飞牛影视访问架构
下一篇
NAS的IP冲突扰乱整个家庭网络

评论
Loading...