本篇 DNS 笔记包含以下内容
DNS 简介
DNS 全称 Domain Name System 域名解析服务,用于解析域名与 IP 地址对应关系。
DNS 基于 UDP,UDP 端口号 53,也会使用 TCP 的 53 端口,先会用 UDP 查找,若 UDP 查不到或请求大于 512 字节时才用 TCP 查找。同时,UDP 进行名称解析,TCP 进行区域解析。
DNS 组成:
- 域名服务器:提供域名解析服务的软件。DNS 域名解析服务中最高效的是 Bind。Bind 的程序名叫 named。
- 解析器:访问域名服务器的客户端,负责解析从域名服务器获取的响应。如 nslookup。
目前互联网的命名方式为层次树状结构,任何互联网上的主机或路由器都有唯一层次结构的名字,即域名。
功能
- 正向解析:根据域名查找对应 IP
- 反向解析:根据 IP 查找对应域名
DNS 解析原理
DNS 域名解析原理(迭代)
- 客户端将域名解析请求发给本地域名服务器或
/etc/resolv.conf
中列出的服务器 - 本地域名服务器收到后,查询本地缓存,若有就返回
- 若没有就把请求发给根域名服务器,迭代查询
- 本地域名服务器会将最终的结果存入缓存,同时将结果返回给主机。
/etc/resolv.conf
用于定义 dns 查询指向的服务器以及解析顺序
文件结构
domain domain_name # 声明本地域名,即解析时自动隐式补齐的域名 |
域名解析方法
- 递归:服务器收到请求时,若不能解析,则把请求转发到下一台服务器直到有一台解析成功。注:是收到请求的服务器去问,一个问下一个,最后解析完成后原路返回。
- 迭代:服务器收到请求时,若不能解析,则按根域->一级域名->二级域名->三级域名依次询问,直到解析成功。注:是本地服务器去不断问。
禁止递归查询的原因:对于授权域名服务器,若打开了递归查询,相当于配置为开放 DNS 服务器,会造成大量数据流量。所以在授权域名服务器上,应该禁用递归查询。recursion no;
- 反向解析:根据 IP 查找对应域名。将创建一个 in-addr.arpa 的专门的域处理。
- 高速缓存:DNS 会将解析的信息保存在高速缓存中。每条记录都对应一个 TTL,设置在缓存中保存的时间。
DNS 深入理解
DNS 报文解析
分类
- 主域名服务器 master server:在特定区域内具有唯一性的域名解析服务器
- 辅域名服务器 slave server:从主服务器获取域名解析信息并维护,以防主服务器宕机。会通过 TCP 与主域名服务器通信,获取 zone 数据。
- 缓存服务器 Caching-Only Server:向其他服务器查询域名解析信息,每获取一个就放在高速缓存中,提高重复查询效率。
域名服务器类型
- 根域名服务器:最高层次的域名服务器,存放所有顶级域名服务器的 IP 地址与域名。当一个本地域名服务器对一个域名无法解析时,就会直接找根域名服务器,根域名服务器会告知应该去哪个顶级域名服务器查询。全球共 13 个根域名服务器。可通过
dig
查看。 - 顶级域名服务器:负责管理在该服务器上注册的二级域名服务器的 IP 地址和域名。
- 授权域名服务器:DNS 采用分区方式设置域名服务器。一个服务器所管理的范围为区。区的范围小于等于域的范围,每个区都设有一台权限域名服务器,负责将其分区的主机域名解析。由专业域名服务公司维护,若授权域名服务器出现故障,域名将不能被解析。
- 本地域名服务器:也称默认域名服务器,当主机发出 DNS 查询报文时,会最先询问本地域名服务器。
域名结构
每一级域名都由英文字母与数字组成,不超过 63 字符,且不区分大小写,完整域名不超过 255 字符。
目前顶级域名 TLD(Top Level Domain)三大类:国家顶级域名、国际顶级域名、通用顶级域名。
互联网的命名空间是按照机构的组织划分的,与物理网络无关,与 IP 子网无关。
- . 根域,管理一级域名
- com、or、gov、cn 等一级域名,管理二级域名
- baidu、google 等二级域名,管理三级域名,当国家为一级域名时,com 等一级域名便会下降一级别,依次类推
- 依次会有三级,四级
- www、ftp、mail 等主机域名,为提供服务的主机名
DNS 系统采用阶层式管理,上一级的服务器只记录下一层的主机名(服务器名)
资源记录
语法{name} {TTL} class record-type record-specfic-data
name
:域记录名。通常只有第一个 DNS 资源记录会配置,其他资源记录的 name 可能为空,那么其他资源记录会接受先前资源记录的名字。TTL
:生存时间。指定该数据在数据库中保存的时间,此栏若为空,表示默认生存时间在授权资源记录中指定。class
:记录的类。大范围用于 Internet 地址和其他信息地址类为 IN(基本都是 IN)。record-type
:记录类型。常为 A、NS、MX、CNAMErecord-specfic-data
:记录指定数据。
记录类型:
A:IPv4 地址记录,将主机映射到 IPv4 地址
# host -v -t A baidu.com
;; ANSWER SECTION:
baidu.com. 5 IN A 123.125.115.110
baidu.com. 5 IN A 220.181.57.216AAAA:IPv6 地址记录,将主机名映射到 IPv6 地址
CNAME:规范名称记录,将一个记录别名化为另一个记录,其中应具有 A 或 AAAA 记录。就是实际主机名
当 DNS 解析器收到 CNAME 记录为查询响应时,DNS 解析器会使用规范名称重新发出查询。CNAME 记录数据可指向 DNS 中任何位置的名称,无论在区域内还是区域外。
应避免将 CNAME 记录指向其他 CNAME 记录以避免 CNAME 循环。CNAME 记录链必须以 A 或 AAAA 记录结束。当使用 CDN 时,也可使用 CNAME 链。NS 和 MX 记录不可指向 CNAME 记录。# host -v -t CNAME baidu.com
;; ANSWER SECTION:
www.baidu.com. 5 IN CNAME www.a.shifen.com.PTR:指针记录,将 IPv4 或 IPv6 地址映射到主机名,用于反向 DNS 解析。对行为类似于主机名的 IP 进行编码。
# host -v -t PTR 202.108.22.220
;; ANSWER SECTION:
220.22.108.202.in-addr.arpa. 5 IN PTR xd-22-220-a8.bta.net.cn.NS:名称服务器记录,将域名映射到 DNS 名称服务器。区域的每个公开授权名称服务器必须具有 NS 记录。
# host -v -t ns baidu.com
;; ANSWER SECTION:
baidu.com. 5 IN NS ns7.baidu.com.SOA:授权起始记录,提供有关 DNS区域工作方式的信息。每个区域正好有一个 SOA 记录,指定主服务器,以及辅(从)服务器更新副本的方式。
# host -v -t SOA baidu.com
;; AUTHORITY SECTION:
baidu.com. 5 IN SOA dns.baidu.com. sa.baidu.com. 2012138777 300 300 2592000 7200
# dns.baidu.com. 主名称服务器(Master)
# sa.baidu.com. DNS区域负责人的邮箱地址,因为@在zone文件中有意义,所以改为了.
# 2012138777 区域版本号(序列号)
# 300 检查区域更新频率(单位s)(refresh)
# 300 在重试失败的刷新前应等待的时间(单位s)(retry)
# 2592000 刷新失败,在停止使用其旧区域副本前等待的时间(单位s)(expire)
# 7200 若解析器查询某个名称并该名称不存在,解析器将“记录不存在”信息进行缓存的时间(单位s)
值的设置范围:
刷新频率(refresh)>= 2 × 重试刷新时间(retry)
refresh+retry < 超时时间(expire)
expire >= retry × 10
expire >= 7天MX:邮件交换记录,将域名映射到邮件交换。邮件交换将接收该名称的电子邮件。
数据为优先级,用于在多个 MX 记录间确定顺序,以及用于该名称的邮件交换的主机名。# dig -t mx google.com
;; ANSWER SECTION:
google.com. 5 IN MX 40 alt3.aspmx.l.google.com.
google.com. 5 IN MX 50 alt4.aspmx.l.google.com.
google.com. 5 IN MX 20 alt1.aspmx.l.google.com.
google.com. 5 IN MX 30 alt2.aspmx.l.google.com.
google.com. 5 IN MX 10 aspmx.l.google.com.
#邮件域名前的数字,为优先级,值越低越优先,具有优先的邮件处理权TXT:文本记录,将名称映射到文本。通常用于提供发送方策略框架 SPF、域密钥识别邮件 DKIM、基于域的消息身份验证报告一致性 DMARC 等数据。
# dig -t txt google.com
;; ANSWER SECTION:
google.com. 5 IN TXT "v=spf1 include:_spf.google.com ~all"
google.com. 5 IN TXT "facebook-domain-verification=22rm551cu4k0ab0bxsw536tlds4h95"
google.com. 5 IN TXT "docusign=05958488-4752-4ef2-95eb-aa7ba8a3bd0e"
# txt记录是按一定格式编写的,最常用的是SPF(sender policy framework),登记某个域名拥有的用来外发邮件的所有IP
# SPF就是用于反垃圾邮件,阻止发件人发送假冒域中发件人地址的电子邮件
# v=spf1 include:_spf.google.com ~all
# 其中v标识spf版本,include指定spf标识,~all表示其余都不认可SPF 防止伪造邮件的过程:
- 邮件服务器收到邮件后,先检查哪个域声明发送了该邮件,并检查该域名的 SPF 记录的 DNS
- 确定发送服务器的 IP 地址是否与 SPF 记录中已发布的 IP 地址匹配
- 对该邮件打分,若匹配,则通过验证并打一个正分,否则不通过并打一个负分
SRV:服务记录,用于查找支持域的特定服务的主机。
使用格式设置为包含服务和协议名称的域名。如_service._protocol.domainname
,SRV 记录可记录为域提供服务的主机名和服务端口号,还包括优先级和权重值。
名称服务器 Name Server:存储域名资源信息的程序,会响应解析器的请求。利用该服务器,整个网络可划分为一个域的分层结构。整个域名空间可划分为多个区域 zone,zone 通常表示管理界限的划分,也就是 DNS 树状结构上的一点。每个 zone 都有一个主域名服务器,还可有多个辅域名服务器。
反向解析:IP 是倒过来写的。
# dig -x 8.8.4.4 |
基础配置
环境
- CentOS7,内核 3.10
- 虚拟机网段:
192.168.163.0/24
- DNS 服务器 IP 地址:
192.168.163.102/24
- DNS 服务器主机名:
system2.example.com
- 网关:
192.168.163.254
- 客户端主机名:
system3.example.com
DNS 服务相关配置文件
/etc/named.conf
:主配置文件/etc/named.rfc1912.zones
:区域配置文件/etc/reslov.conf
:本地的 DNS 服务器/etc/nsswitch.conf
:优先级配置文件/var/named/
目录:存放区域(zone)文件
步骤
安装 bind 服务
yum groupinstall DNS\ Server
开启 named 服务
防火墙放行 dns,rich rules 放行 UDP 和 TCP 的 53 端口systemctl enable named.service
firewall-cmd --add-service=dns --permanent
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 port port=53 protocol=udp protocol=tcp accept'
firewall-cmd --reload
修改配置文件
修改配置文件最好先做备份cp -a XX XX.bak
首先修改/etc/named.conf
**注:注释需要用
;
**
只摘取部分 |
修改后直接重新加载配置文件rndc reload
,之后测试是否生效
# dig www.google.com @127.0.0.1 |
正向解析
修改/etc/named.rfc1912.zones
配置正向解析区域文件named.conf
中也能写区域配置,但为了安全和管理,将主配置和区域配置分开为两个文件
zone "example.com" IN { |
DNS 区域类型
- master:主要区域,拥有该区域数据文件,并对此区域提供管理数据
- slave:辅助区域,拥有主要区域数据的只读副本,从主区域同步所有区域数据
- hint:dns 启动时,使用 hint 区域的信息查找最近的根域名服务器,没有就使用默认根服务器
然后配置解析数据信息文件/var/named/example.com.zone
配置文件有模板,可复制/var/named/named.localhost
并改名
最好将文件名改为域名.zone
$TTL 1D |
主和辅服务器都应该列在上级域的NS记录中,才能形成一个正式的授权。也应该列在自己主机的域文件中,任何列在NS记录中的服务器必须配置为那个域的授权域名服务器。
反向解析
修改/etc/named.rfc1912.zones
,添加
zone "163.168.192.in-addr.arpa" IN { |
反向解析的参考配置文件为/var/named/named.loopback
可通过named-checkconf
或named-checkzone
检查配置文件语法是否正确。
至此基础配置完成,重启服务
- 使用命令
nslookup
输入域名测试
常用命令
**rndc
**:bind 的管理配置工具
rndc COMMANDS |
host
:查询某个域名或主机名所对应的所有 IP 地址
# host baidu.com |
nslookup
:查询一台主机 IP 及对应的域名
两种模式: |
**dig
**:查询 DNS 服务器
dig -t 指定查询类型 |
参考书籍:
骏马金龙 DNS & bind 从基础到深入http://www.cnblogs.com/f-ck-need-u/p/7367503.html
骏马金龙 Linux 的网络管理http://www.cnblogs.com/f-ck-need-u/p/7074594.html
Linux 就该这么学
Linux 运维最佳实践
Linux 系统管理与网络管理
Linux 服务器架设指南
Linux 服务器架设、性能调优、集群管理教程