1.异常突现
java.net.UnknownHostException: openapi.xxxxx.cn
查看日志访问openapi.xxxxx.cn的请求全部报错,紧急联系对方,对方反馈域名解析正常,其他机构均不受影响,线上一直在持续报警,最终联系op,调整dns服务器,业务才全部恢复正常。
2.提出了疑问
3.初探dns
3.1dns基础知识
DNS是什么?
DNS是域名系统(Domain Name System)的缩写,它是由解析器和域名服务器组成的。域名系统为Internet上的主机分配域名地址和IP地址。用户使用域名地址,该系统就会自动 把域名地址转为IP地址。域名服务是运行域名系统的Internet工具。执行域名服务的服务器称之为DNS服务器,通过DNS服的务器来应答域名服务的查询
什么是A记录?
A (Address) 记录是用来指定主机名(或域名)对应的IP地址记录
什么是CNAME记录?
CName( CanonicalName)记录,cname记录允许您将多个名字映射到同一台计算机
什么是TTL值?
TTL值全称是"生存时间(Time To Live)",简单的说它表示DNS记录在DNS服务器上缓存时间
什么是DNS RR?
RR 就是 Roud Robin.同一个域名 ,同一种类型,但上具有多种记录。目前多用于A记录的RR。
目前baidu DNS用品的RR方式是按照循环的顺序的返回多个记录。
正向解析
查找域名对应IP的过程。
反向解析
查找IP对应域名的过程。
解析器
即resolver,处于DNS客户端的一套系统,用于实现正向解析或者反向解析。
权威DNS
处于DNS服务端的一套系统,该系统保存了相应域名的权威信息。权威DNS即通俗上“这个域名我说了算”的服务器。
递归DNS
又叫local dns。递归DNS可以理解为是一种功能复杂些的resolver,其核心功能一个是缓存、一个是递归查询。收到域名查询请求后其首先看本地缓存是否有记录,如果没有则一级一级的查询根、*域、二级域……直到获取到结果然后返回给用户。日常上网中运营商分配的DNS即这里所说的递归DNS。
转发DNS
转发DNS是一种特殊的递归。如果本地的缓存记录中没有相应域名结果时,其将查询请求转发给另外一台DNS服务器,由另外一台DNS服务器来完成查询请求。
公共DNS
公共DNS属于递归DNS。其典型特征为对外一个IP,为所有用户提供公共的递归查询服务。
3.2域名查询过程
以用户在浏览器输入www.baidu.com为例,我们详细说明一下实际域名查询过程:
-
用户输入www.baidu.com,浏览器调用操作系统resolver发起域名查询,此处不考虑浏览器的域名缓存;resolver封装一个dns请求报文,并将其发给运营商分配的local dns地址(或者用户自己配置的公共dns);
-
local dns查询缓存,如果命中则返回响应结果;否则向根服务器发起查询;
-
根服务器返回com地址。每一层级的DNS服务器都有缓存,实际都是先查缓存,没有缓存才返回下级域,此处不再重复;
-
local dns查询com。com返回baidu.com地址;
-
local dns查询baidu.com,baidu.com返回www.baidu.com对应记录结果。
理论上讲域名查询有两种方式:
迭代查询 A问B一个问题,B不知道答案说你可以问C,然后A再去问C,C推荐D,然后A继续问D,如此迭代…
递归查询 A问B一个问题,B问C,C问D… 然后D告诉C,C告诉B,B告诉A
4.定位问题
1)登陆机器无法解析域名
2)使用第三方工具可以解析。
3)检查dns配置
cat /etc/reslov.conf
4)测试用指定dns解析域名
dig -t A openapi.xxxx.cn @10.157.16.2
至此可定位到是本地DNS服务器异常,引起域名无法解析问题。
5.业务方应急及后续方案
1)服务器配置本地host
2)网关支持域名与ip的解析映射关系