AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1163241
Accepted
user2690527
user2690527
Asked: 2024-07-30 05:09:56 +0800 CST2024-07-30 05:09:56 +0800 CST 2024-07-30 05:09:56 +0800 CST

如何顺利地更改 DNS 托管商而不会导致数小时的服务中断?

  • 772

我最近又更换了我的 DNS 托管商,因为我需要一些以前的 DNS 托管商不提供的功能。每次我更换 DNS 托管商时,我的服务器都会不可用几个小时,直到 DNS 再次恢复正常。我知道 DNS 是一个分布式系统,会缓存几个小时的条目,但一定有一种方法可以在不中断服务的情况下更换提供商。

以下是我采取的主要步骤:

  1. 将所有 DNS 记录从之前的 DNS 托管商复制到新的 DNS 托管商。
  2. 通过明确查询两个托管商的主 DNS 服务器,dig @<...>以确保两者的配置相同
  3. 将新的 DNS 名称服务器告知我的注册商,并向他们提供新的 NS、DNSKEY 和 DS 设置;我的注册商将这些信息转发给 TLD 注册中心(在我的情况下.de是 -zone,即 DENIC)

在我执行第 3 步后大约一小时,我的服务器无法通过 DNS 访问。我的域名的 DNS 解析停止。大约又过了六个小时,一切才恢复正常。

如果我没记错的话,在这个特定案例中,中断是由于 NS 和 DNSKEY 记录与 DS 记录在那六个小时内不匹配造成的。NS 和 DNSKEY 记录已经更新并指向新的 DNS 托管商,而 DS 记录在接下来的六个小时内仍保持旧记录。

避免此类问题的正确方法是什么?


附录(2024-07-30)

今天,我想将我的第二个域名从以前的 DNS 托管商迁移到新的 DNS 托管商,我认为我很聪明。

我提前 48 小时禁用了 DNSSEC,以避免任何签名错误。(最好根本没有 DNSSEC,而不是 DNSSEC 失败。)但后来我又陷入了另一个陷阱。

我首先在新的 DNS 托管商处配置了 DNS 区域信息,然后告诉我的注册商将记录NS从旧 DNS 托管商更改为新 DNS 托管商。但是,更改不是原子性的。他们没有将记录NS从旧更改为新,而是将NS记录从旧值更改为“占位符” f.nic.de.,然后从更改f.nic.de.为实际的新值。这两个步骤相隔 5 分钟。不幸的是,这 5 分钟的时间窗口足以让 Google DNS (8.8.8.8) 拾取错误的中间值,f.nic.de.并且它的 TTL 为 14400,即 4 小时。

当然,f.nic.de.没有关于我实际域名的信息。因此,虽然错误只存在了 5 分钟,但它导致我的域名上某些用户的 DNS 解析中断了另外 4 小时,具体取决于他们查询的 DNS 服务器。

到目前为止,我认为我的虚拟专用服务器的托管商(它还“拥有”我的 IP 地址,也是我的域名的注册商(但不是我的 DNS 托管商))简直是愚蠢的。他们只提供了一个允许输入NS和DNSKEY记录的 Web 表单。(DS记录是从隐式计算的DNSKEY)。但是,没有添加(或删除)记录的选项。只能替换现有记录(每种类型一个)。但是,即使正确且一致地更改这两个值,然后提交 Web 表单,上游更改(在我的注册商和注册表之间)也是不可预测且无序的。鉴于以下答案,我想我除了与我的注册商讨论他们必须让他们的流程井然有序之外别无他法。

domain-name-system
  • 1 1 个回答
  • 61 Views

1 个回答

  • Voted
  1. Best Answer
    Esa Jokinen
    2024-07-30T15:18:42+08:002024-07-30T15:18:42+08:00

    如果您只告诉注册商您需要更改 DS 记录,他们可能会这样做。NS和DS记录都是独立缓存的。无论解析器上哪个先更新,都会导致DS父区域中的 和在权威名称服务器DNSKEY上签署记录的之间暂时不匹配。

    迁移期间多个 DS 记录可以共存,因此您应该要求您的注册商添加新记录DS(而不删除旧记录)并等待缓存过期后再更改记录NS。


    良好的 DNSSEC 迁移说明,不会造成我之前的一个或两个答案中的中断:

    DNSSEC 迁移

    通常情况下,您只需在新的名称服务器上配置 DNSSEC 并更新DS记录即可。使用 DNSSEC,正确的顺序非常重要!从Junior Payne的DNSSEC 和 DNS 迁移:如何在不中断 DNSSEC 的情况下迁移 DNS 中略作缩减和修改:

    1. 在新提供商上准备 DNSSEC:配置区域并对其进行签名。

    2. 添加获得 DNS 服务提供商的 DS 记录并等待 TTL。
      此当前状态将验证丢失和获得 DNS 服务提供商的 ZSK。此时,对新名称服务器的委托尚未更改。在此配置中,需要使用获得 DNS 服务提供商重新签署区域并等待缓存过期(DS 记录的 TTL)。

    3. 将区域的委派更改为获取 DNS 服务提供商。

    4. 删除丢失的 DNS 服务提供商的 DS 记录
      一旦您确定不再有任何引用丢失的 DNS 服务提供商的缓存 DS 记录,就可以从注册表中删除丢失的 DNS 服务提供商的 DS 记录。

    Erlend Eide没有意识到这种可能性,他提供了另一种方法,即如何在启用 DNSSEC 的情况下迁移 DNS 区域的名称服务器。尽管 Junior Payne 的说法更正确,但如果新提供商不支持在委派之前配置 DNSSEC,则此替代方案可能是唯一的可能性:

    1. 在注册商处禁用 DNSSEC
    2. 等待 24 小时
    3. 在名称服务器上禁用 DNSSEC(删除 DS 记录)
    4. 切换名称服务器
    5. 等待 24 小时
    6. 重新启用 DNSSEC
    • 5

相关问题

  • Solaris DNS

  • resolv.conf 在经过一段时间后被更改

  • 为什么有些网站的网址中没有“www”就无法显示?[关闭]

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve