域名解析问题UnknownHostException

时间:2024-05-19 18:43:46

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为例,我们详细说明一下实际域名查询过程:

  1. 用户输入www.baidu.com,浏览器调用操作系统resolver发起域名查询,此处不考虑浏览器的域名缓存;resolver封装一个dns请求报文,并将其发给运营商分配的local dns地址(或者用户自己配置的公共dns);

  2. local dns查询缓存,如果命中则返回响应结果;否则向根服务器发起查询;

  3. 根服务器返回com地址。每一层级的DNS服务器都有缓存,实际都是先查缓存,没有缓存才返回下级域,此处不再重复;

  4. local dns查询com。com返回baidu.com地址;

  5. 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)登陆机器无法解析域名
域名解析问题UnknownHostException

2)使用第三方工具可以解析。

域名解析问题UnknownHostException

3)检查dns配置

cat /etc/reslov.conf
域名解析问题UnknownHostException

4)测试用指定dns解析域名

dig -t A openapi.xxxx.cn @10.157.16.2

域名解析问题UnknownHostException
至此可定位到是本地DNS服务器异常,引起域名无法解析问题。

5.业务方应急及后续方案

1)服务器配置本地host

2)网关支持域名与ip的解析映射关系