域名与DNS解析

域名的组成

域名用点(.)来进行分隔,形成多层结构。位置越靠后,层级越高

所有域名都以.结束

域名层级示意图

Linux 域名与DNS解析_dns服务器 图片.png


域名主要是为了方便记忆,IP地址才是机器间通信的真正机制

域名解析服务

域名解析服务(DNS)就是把域名转换成IP地址的服务。对应的服务器是域名服务器,网络协议是DNS协议

DNS协议属于TCP/IP栈中对应的应用层,但是实际传输还是基于UDP或者TCP协议,域名服务一般监听在端口53上

域名解析过程

通常来讲,每级DNS服务器,都有最近解析记录的缓存,当缓冲命中时,直接用缓存中的记录应答。如果缓存过期过不存在,域名解析以递归的方式执行,从顶级开始,发送给每个层级的域名服务器,直到得到解析结果

示例图


Linux 域名与DNS解析_域名服务器_02 图片.png

配置DNS服务器

vi /etc/resolv.conf
nameserver 114.114.114.114

DNS服务管理数据方式

DNS服务通过资源记录的方式,再来管理所有数据

支持以下等多种类型的记录

  • A
    用来把域名转换成IP地址
  • CNAME
    用来创建别名
  • NS
    表示域名对应的域名服务器地址
  • MX
    记录邮件服务器地址
  • PTR

解析DNS

命令

​nslookup www.baidu.com​

结果解析

Server:域名服务器

Address:域名服务器及端口号

No-authoritative answer:

非权威查询结果 由于服务区上设置的域名服务器不是直接管理要查询的域名的服务器,所以查询结果是非权威的

查看DNS解析过程

命令

dig +trace +nodnssec www.baidu.com
# +trace 表示开启跟踪查询
# +nodnssec 表示禁止 DNS 安全扩展

结果解析

结果分为4个部分

  1. 第一部分,从DNS服务器查到的根域名服务器(.)的NS记录
  2. 第二部分,从NS记录中选一个,并查询顶级域名(com.)的NS记录
  3. 第三部分,是从com.的NS记录中选择一个,并查询二级域名baidu.com 的NS服务器
  4. 第四部分,从baidu.com.的NS服务器查询最终主机的A记录

设置本地DNS解析

可以把主机名和IP地址的映射关机,写入本机的/etc/hosts文件中

cat /etc/hosts
127.0.0.1 localhost localhost.localdomain
::1 localhost6 localhost6.localdomain6
192.168.0.100 domain.com

也可以在内网中,搭建自定义的DNS服务器,专门用来解析内网中的域名。

内网DNS服务器,一般还会设置一个或多个上游DNS服务器,用来解析外网的域名

域名解析常见问题处理

DNS解析失败

现象

# nslookup time.geekbang.org
;; connection timed out; no servers could be reached

检查方法

  • 测试网络是否连通
    ​ping 114.114.114.114​
  • 查看nslookup失败的原因
nslookup -debug time.geekbang.org
/# nslookup -debug time.geekbang.org
;; Connection to 127.0.0.1#53(127.0.0.1) for time.geekbang.org failed: connection refused.
;; Connection to ::1#53(::1) for time.geekbang.org failed: address not available.

结果显示连接环回地址失败的53端口失败

  • 检查DNS服务器设置
    ​cat /etc/resov.conf​

DNS解析不稳定

现象

解析慢

/# time nslookup time.geekbang.org
Server: 8.8.8.8
Address: 8.8.8.8#53

Non-authoritative answer:
Name: time.geekbang.org
Address: 39.106.233.176

real 0m10.349s
user 0m0.004s
sys 0m0.0

偶尔解析失败

/# time nslookup time.geekbang.org
;; connection timed out; no servers could be reached

real 0m15.011s
user 0m0.006s
sys 0m0.006s

可能原因

  • DNS服务器有问题,响应慢并且不稳定
  • 客户端到DNS服务器的网络延迟比较大
  • DNS请求或响应包,在某些情况下被链路中的网络 设备弄丢了

检查方法

  • 检查到DNS服务器的网络延迟
    ​ping 114.114.114.114​​ 如果延迟较高,更换成延迟较小的服务器
  • 使用DNS缓存
    启用缓存
/# /etc/init.d/dnsmasq start
* Starting DNS forwarder and DHCP server dnsmasq [ OK ]

将DNS服务器更改为dnsmasq的监听地址

​/# echo nameserver 127.0.0.1 >...​