一、前言
域名解析不生效产生的原因很多,除了网络不可用, 域名劫持(已有成熟解决办法)等因素之外, 按照排查链路先后顺序列举如下:
1.1 域名状态是否正常
先检查域名的状态,可以查看注册服务商提供的 whois 域名信息,如果域名状态为 clienthold 或 serverhold 状态,说明域名是被禁止解析的。这种状态下,即使设置了域名解析,也无法生效,域名无法被访问到,需要联系域名注册商取消这个状态。
1.2 权威修改是否已经修改生效
请确认权威DNS的域名解析记录已修改成功。
1.3 递归DNS缓存记录是否已更新
修改域名解析后,还取决于各运营商递归DNS的缓存是否生效。
1.4 客户端DNS缓存记录是否已更新
客户端在老的解析记录TTL过期前无法更新。
其中1.3,1.4是常见不生效原因,长时间无法生效大多由于1.3导致。
二、域名解析不生效解决办法
2.1 通过递归DNS解决
2.1.1 方法一:使用HTTPDNS
(1) HTTPDNS简介
HTTPDNS使用HTTP协议进行域名解析,代替现有基于UDP的DNS协议,域名解析请求直接发送到HTTPDNS服务器,从而绕过运营商的Local DNS,能够解决Local DNS造成的域名劫持、调度不准确、域名解析不生效三方面问题,并且能够提升域名解析效率。
(2) HTTPDNS原理
HTTPDNS与传统的域名解析流程对比如下图所示。
图一 HTTPDNS与传统DNS对比图
(3) HTTPDNS如何使用
参见文档如何使用HTTPDNS
(4)使用HTTPDNS有什么限制?
HTTPDNS需要修改应用的DNS解析过程,因此主要适用于C/S架构的场景。
对于无法修改域名解析过程的场景,如PC浏览器访问、微信H5页面访问都无法使用HTTPDNS。
2.1.2 方法二:使用公共DNS
上面提到,由于ISP提供的递归域名服务器质量参差不齐,导致比较容易出现解析失败、解析不生效等问题,因此部分厂商提供了公共DNS解决这个问题。
常见的公共dns有:
DNS 服务器 IP | 提供方名称 | 提供方国家 |
---|---|---|
8.8.8.8 | 美国 | |
4.4.4.4 | 美国 | |
223.5.5.5 | 阿里巴巴 | 中国 |
223.6.6.6 | 阿里巴巴 | 中国 |
114.114.114.114 | 114dns | 中国 |
114.114.115.115 | 114dns | 中国 |
2.1.3 两种方法优劣对比
方法名 | 实现简便程度 | 通用性 | 合计 |
---|---|---|---|
HTTPDNS | 7 | 7 | 14 |
公共DNS | 9 | 1 | 10 |
备注:满分10分,分数越高说明方法优势越大
对上面对比做一个说明:
(1)HTTPDNS使用时需要开发者修改DNS解析流程,因此只适用于C/S架构的应用,对于PC浏览器、微信H5等场景不适用,程序编写也有一定的工作量,好在国内的HTTPDNS厂商都提供了封装好的SDK和示例代码供开发者使用和参考,大大降低了实现难度。
(2)使用public dns的方法通用性很低,因为需要每个客户都对自己终端的DNS服务器配置进行修改,由于需要面向庞大的、水平参差不齐的终端用户,这种方式对于开发者而言实施难度非常大。
2.2 通过客户端自身解决
对于客户端缓存结果不能更新的问题,可以通过强制刷新系统DNS缓存来删除老的解析结果。以windows系统为例,方法如下:
打开windows命令行,执行ipconfig/flushdns命令清空DNS缓存
图二 Windows系统情况DNS缓存方法示意图
三、悲催的域名解析不生效问题
尽管权威DNS系统属于变更相对较少的一个底层服务,但系统管理员可能还会在以下几种情况下变更DNS服务器的域名解析记录:
(1)域名对应IP变更(替换、增加、减少等情况)
(2)接入CDN系统,增加域名的CNAME记录
(3)系统受到攻击时切换IP躲避攻击!!!
(4)其他需要变更的情形
修改解析记录后常见难题是:不生效
图三 域名解析不生效示意图
下面首先看看域名解析的流程。
四、域名解析过程分析
以常见的递归解析方式为例,说明解析流程
图四 域名解析流程示意图
上图是相对完整的域名解析流程(假设各个环节的缓存没有命中):
1) 用户终端发起域名解析请求www.abc.com
2)本地递归域名服务器向根域名服务器(.)请求并得到.com域名服务器的IP地址
3)本地递归域名服务器向.com域名服务器请求并得到abc.com权威域名服务器的地址
4)本地递归域名服务器向abc.com发出www.abc.com的解析请求并得到返回结果
5)用户终端从本地递归域名服务器得到最终的解析结果
五、域名解析不生效根源
5.1 域名结果缓存环节分析
域名解析不生效(生效慢)是由于域名解析结果被缓存住,并且缓存结果短时间无法更新导致的。
域名解析可能在访问终端系统、本地递归域名解析服务器两个环节被缓存住,如下图所示。
图五 域名解析结果缓存环节分析示意图
5.2 终端缓存特征
终端的缓存是由终端应用(如PC浏览器)控制的,一般情况下会遵循域名解析结果的TTL规范,也就是在域名有效期过期后会自动重新请求,因此这个时间是可预期的,也是可控的(通过修改权威TTL)。
5.3 递归域名服务器缓存特征
本地递归域名服务器一般由提供服务的ISP设置,服务器自身也是由ISP维护,公网上存在大量的递归域名服务器不遵循权威的TTL,导致我们的域名解析修改不生效(全球生效时间最长可能有72小时之久)。
由上面的分析可以知道,域名解析不生效最重要的诱因是递归域名服务器不能及时更新解析结果。
六: TIPS
耐心看到这里的读者必须予以奖励,这里提供几个域名解析的几个TIPS。
6.1 域名解析从入门到中级
看完这篇https://yq.aliyun.com/articles/58967就欧了。
6.2 无线场景下的域名服务器设置
Android/iOS在wifi接入场景下可以通过在系统的设置中找到修改DNS服务器的入口,但非wifi的网络制式接入(如2/3/4G网络)无法修改DNS服务器配置,因此当ISP为我们配置的默认递归域名服务器不合理时,就会碰到调度精确性的问题,这个问题可以参考移动场景下如何实现就近接入?
6.3 黑科技:解析实时生效方法
上面通过改进递归DNS设置(使用HTTPDNS或者配置公共DNS),可以确保域名解析结果在TTL过期后生效,但如果TTL设置时间较长(如10分钟),这时候我们仍然需要等待比较久的时间才能看到解析结果生效。
有没有更好的办法? 从第五节的分析来看,域名解析不生效的关键环节之一是递归DNS服务器缓存的域名解析结果需要等待TTL过期才会去权威更新,这个等待时间能否消除掉?
答案是肯定的。如果权威解析记录修改后,能够同步更新递归DNS的缓存记录,就可以实现解析记录的实时生效。
这种特性只能通过递归DNS和权威DNS配合才能实现,阿里云云解析即将发布支持解析记录修改实时生效的版本,敬请期待。