基本概念
DNS 是域名系统 (Domain Name System) 的缩写,是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。
分层结构
域名是分层结构,域名DNS服务器也是对应的层级结构。有了域名结构,还需要有域名DNS服务
器去解析域名,且是需要由遍及全世界的域名DNS服务器去解析,域名DNS服务器实际上就是装
有域名系统的主机。域名解析过程涉及4个DNS服务器,分别如下:
分类 | 作用 |
---|---|
根DNS服务器 | 英文:Root nameserver。本地域名服务器在本地查询不到解析结果时,则第一步会向它进行查询,并获取顶级域名服务器的IP地址。 |
顶级域名服务器 | 英文:Tld nameserver。负责管理在该顶级域名服务器下注册的二级域名,例如“www.example.com”,.com则是顶级域名服务器,在向它查询时,可以返回二级域名example.com”所在的权威域名服务器地址 |
权威域名服务器 | 英文:authoritative nameserver。在特定区域内具有唯一性,负责维护该区域内的域名与IP地址之间的对应关系,例如云解析DNS。 |
本地域名服务器 | 英文:DNS resolver或Local DNS。本地域名服务器是响应来自客户端的递归请求,并最终跟踪直到获取到解析结果的DNS服务器。例如用户本机自动分配的DNS、运营商ISP分配的DNS、谷歌/114公共DNS等 |
DNS解析过程
DNS查询的结果通常会在本地域名服务器中进行缓存,如果本地域名服务器中有缓存的情况下,则会跳过如下DNS查询步骤,很快返回解析结果。下面的示例则概述了本地域名服务器没有缓存的情况下,DNS查询所需的8个步骤:
- 用户在Web浏览器中输入“example.com”, 则由本地域名服务器开始进行递归查询。
- 本地域名服务器采用迭代查询的方法,向根域名服务器进行查询 。
- 根域名服务器告诉本地域名服务器,下一步应该查询的顶级域名服务器.com TLD的IP地址
- 本地域名服务器向顶级域名服务器.com TLD进行查询
- .com TLD服务器告诉本地域名服务器,下一步查询example.com权威域名服务器的IP地址
- 本地域名服务器向example.com权威域名服务器发送查询
- example.com权威域名服务器告诉本地域名服务器所查询的主机IP地址
- 本地域名服务器最后把查询的IP地址响应给web浏览器一旦DNS查询的8个步骤返回了example.com的IP地址,浏览器就能够发出对网页的请求:
- 浏览器向IP地址发出HTTP请求
- 该IP处的web服务器返回要在浏览器中呈现的网页
DNS术语
递归查询
是指DNS服务器在收到用户发起的请求时,必须向用户返回一个准确的查询结果。如果DNS服务器本地没有存储与之对应的信息,则该服务器需要询问其他服务器,并将返回的查询结构提交给用户。
迭代查询
是指DNS服务器在收到用户发起的请求时,并不直接回复查询结果,而是告诉另一台DNS服务器的地址,用户再向这台DNS服务器提交请求,这样依次反复,直到返回查询结果。
DNS缓存
DNS缓存是将解析数据存储在靠近发起请求的客户端的位置,也可以说DNS数据是可以缓存在任意位置,最终目的是以此减少递归查询过程,可以更快的让用户获得请求结果。
TTL
TTL英文全称Time To Live ,这个值是告诉本地域名服务器,域名解析结果可缓存的最长时间,缓存时间到期后本地域名服务器则会删除该解析记录的数据,删除之后,如有用户请求域名,则会重新进行递归查询/迭代查询的过程。
IPV4、IPV6双栈技术
双栈英文Dual IP Stack,就是在一个系统中可同时使用IPv6/ IPv4这两个可以并行工作的协议栈
TLD Server
英文全称Top-level domains Server,指顶级域名服务器。
DNS Resolver
指本地域名服务器,它是DNS查找中的第一站,是负责处理发出初始请求的DNS服务器。运营商ISP分配的DNS、谷歌8.8.8.8等都属于DNS Resolver。
Root Server
指根域名服务器,当本地域名服务器在本地查询不到解析结果时,则第一步会向它进行查询,并获取顶级域名服务器的IP地址。
DNS Query Flood Attack
指域名查询攻击,攻击方法是通过操纵大量傀儡机器,发送海量的域名查询请求,当每秒域名查询请求次数超过DNS服务器可承载的能力时,则会造成解析域名超时从而直接影响业务的可用性。
URL转发
英文 Url Forwarding,也可称地址转向,它是通过服务器的特殊设置,将一个域名指向到另外一个已存在的站点
edns-client-subnet
google提交了一份DNS扩展协议,允许DNS resolver传递用户的ip地址给authoritative DNSserver.
DNSSEC
域名系统安全扩展(DNS Security Extensions),简称DNSSEC。它是通过数字签名来保证DNS应答报文的真实性和完整性,可有效防止DNS欺骗和缓存污染等攻击,能够保护用户不被重定向到非预期地址,从而提高用户对互联网的信任。
DNS 记录类型
DNS支持A、CNAME、MX、TXT、SRV、AAAA、NS、CAA记录类型
DNS 客户端检测工具
正、反解查询命令:host、nslookup、dig
yum install -y bind-utils
host
host [选项] [主机名或IP] [server]
常用选项
-a:列出该主机详细的各项主机名称设定资料
常用参数
erver: host 命令默认是使用 /etc/resolv.conf 文件中的 DNS 主机来查询的,若设置该参数,则使用这里设置的 DNS 主机进行查询。
nslookup
域名解析工具,就是查DNS信息用的命令。使用 /etc/resolv.conf 这个文件作为 DNS 服务器的来源选择。
nslookup [主机名或IP]
dig
域名查询工具,可以用来测试域名系统工作是否正常。
功能与 nslookup 类似,建议使用 dig 来取代 nslookup
dig [选项] [主机名]
常用选项
@:dig 命令默认使用 /etc/resolv.conf 文件中的 DNS 主机来解析域名,若设置该参数,则使用这里设置的 DNS 主机进行解析。
-b :当主机具有多个IP地址,指定使用本机的哪个IP地址向域名服务器发送域名查询请求
DNS 客户端配置
Centos7 手动设置 /etc/resolv.conf 里的 DNS,系统会重新覆盖或者清除了,使用以下下三种方法解决。
使用命令行工具 nmcli
查看网络连接
nmcli connection show
nmcli 配置 DNS
修改当前网络连接对应的DNS服务器,这里的网络连接可以用名称或者UUID来标识
nmcli con mod eth0 ipv4.dns "114.114.114.114 8.8.8.8"
启动 DNS 配置
nmcli con up eth0
nmcli 命令的详细帮助
man NetworkManager.conf
man nmcli
使用传统方法
修改 NetworkManager 配置
#在main部分添加 “dns=none” 选项
vim /etc/NetworkManager/NetworkManager.conf
-
[main]
plugins=ifcfg-rh
dns=none
-
#重启 NetworkManager 服务
systemctl restart NetworkManager.service
#手工修改 /etc/resolv.conf
vim /etc/resolv.conf
-
nameserver 114.114.114.114
nameserver 8.8.8.8
-
网卡配置文件指定 DNS
#修改网卡配置文件
cd /etc/sysconfig/network-scripts/
vim ifcfg-eth0
-
TYPE="Ethernet"
BOOTPROTO="static" # 启用静态IP地址
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
NAME="eth0"
UUID="8071cc7b-d407-4dea-a41e-16f7d2e75ee9"
ONBOOT="yes" # 开启自动启用网络连接
IPADDR0="192.168.21.128" # 设置IP地址
PREFIX0="24" # 设置子网掩码
GATEWAY0="192.168.21.2" # 设置网关
DNS1="8.8.8.8" # 设置主DNS
DNS2="8.8.4.4" # 设置备DNS
HWADDR="00:0C:29:EB:F2:B3"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
-
#重启网络
service network restart