linux基本系统服务——DNS服务

一、 DNS域名解析原理

DNS,Domain Name System,域名系统:在互联网中由大量域名解析服务器共同提供的一整套关于"域名 <--> IP地址"信息查询的数据系统

!!!! C/S架构:DNS服务端监听UDP 53端口(处理客户端查询),也监听TCP 53端口(主-辅同步)

!!!! 客户机向DNS服务器提问:xx域名的IP地址是多少?

如何通过域名找到一个站点

FQDN,Full Qualified Domain Name,完全限定域名(站点名+域名) ,比如:servera.lab.example.comwww.stu.cn

分层次管理(域名体系结构):

根域 =》.

顶级域/一级域 =》.com、.cn

二级域 (最常见)=》 .example.com、.stu.cn

三级域(比较少) =》 lab.example.com、......

站点(使用DNS名称的各服务器)=》 www、mail、ftp、game、news、......

分布式部署(域名服务器):

每个权威DNS服务器只负责分担自己管辖的一个或多个域,提供这个域内的名称解析服务

每个权威DNS服务器可以代客户端查询管辖范围外的域名(问其他DNS服务器)

每个权威DNS服务器可以授权某个子域DNS服务器,告知客户端自己去找子域DNS服务器继续查询

比如,IANA管理根域(.)的DNS服务器、CNNIC管理一级域.cn的DNS服务器、stu管理二级域.stu.cn的DNS服务器

DNS服务器的类型

权威DNS:需由IANA统一授权管理,管理一个或更多个DNS区域,有公网IP地址

缓存DNS:运行商或企业自行架设、自行管理,主要面向客户端提供代理查询服务,提高客户体验(缓存加速),无需管理任何区域

域名查询的主要方式

!!!! 按问题内容分 ------

正向查询:根据已知的域名查询这个域名的IP地址,比如"域名www.baidu.com的IP地址是多少?"

反向查询:根据已知的IP地址查询这个IP地址的域名,比如"IP地址39.156.66.18对应的域名是什么?"

!!!! 按服务方式分 ------

递归查询:为客户机查询非本DNS服务器管辖的解析记录,主要出现在"客户机 -> 缓存DNS服务器"场景;客户端只发送一次查询请求,剩下的都交给DNS服务器

迭代查询:告知客户机子域DNS服务器的地址,让客户机自己去找子域DNS查询,主要出现在"缓存DNS -> 权威DNS服务器"场景;客户端需要发送多次查询请求,依次询问根DNS、一级DNS、二级DNS、......

域名解析条目的类型

TTL:设置解析记录的默认超时时间(缺省单位为秒,可以添加 H/D/W表示小时/天/周)

SOA:设置区域授权记录(建议参考/var/named/named.localhost范本文件) ------ @ IN SOA @ admin.@ ( .. .. )

NS:域名服务器

MX:邮件服务器记录

CNAME:域名别名记录

A:正向解析记录(域名->IPv4地址)

AAAA:正向解析记录(域名->IPv6地址)

PTR:反向解析记录(IP地址->域名)

二、域名查询(host/nslookup/dig)

软件包bind-utils提供以下域名查询工具:

host:简单查询工具,用法:host 域名或IP地址 DNS服务器地址

nslookup:交互式查询工具,用法:nslookup 域名或IP地址 DNS服务器地址

dig:深度挖掘查询工具,用法:dig @DNS服务器地址 域名或IP地址 [-t 资源类型]

root@work \~\]# yum -y install bind-utils //安装域名查询工具包 !!!! 使用上述工具时,需要有可用的DNS服务器 !!!! 如果还没有配置DNS服务器,也可以找一台能上网的主机,练习host/nslookup/dig命令 !!!! 在Windows系统中,自带nslookup命令,也可以向DNS查询域名 练习:查询域名 1)直接查询(向本机设置的默认DNS服务器查询)www.12306.cn的IP地址 C:\\Users\\TsengYia\>nslookup www.12306.com 服务器: public1.114dns.com Address: 172.50.163.10 非权威应答: 名称: www.12306.com Address: 112.74.143.83 2)向DNS服务器8.8.8.8查询www.12306.cn的IP地址 C:\\Users\\TsengYia\>nslookup www.12306.com 8.8.8.8 服务器: dns.google Address: 8.8.8.8 非权威应答: 名称: www.12306.com Address: 112.74.143.83 3)向8.8.8.8查询IP地址114.114.114.114的域名是多少(注意:大多数IP地址是查不到反向结果的) C:\\Users\\TsengYia\>nslookup 114.114.114.114 8.8.8.8 服务器: dns.google Address: 8.8.8.8 名称: public1.114dns.com Address: 114.114.114.114 ## ****三、权威DNS服务器-bind正向域设置**** BIND,Berkeley Internet Name Domain,伯克利互联网名称服务器 servera(权威DNS服务器,servera.lab.example.com的IP地址是多少) 1)装包 bind 2)配置 (主配置、地址库) 3)起服务 named 获取BIND配置帮助: # man named.conf # firefox file:///usr/share/doc/bind/Bv9ARM.html #### 主配置文件/etc/named.conf,设置DNS全局参数、管理哪些区域(用哪一个地址库)、安全控制、...... # vim /etc/named.conf options { listen-on port 53 { 本机的IPv4监听地址; }; listen-on-v6 port 53 { 本机 ky的IPv6监听地址; }; directory "/var/named"; //指定地址库文件的默认存放目录 allow-query { 客户机的网段或IP地址; }; recursion yes; //是否允许提供递归查询服务 dnssec-enable yes; //启用DNS安全 dnssec-validation yes; //启用DNS安全校验 }; zone "区域名" IN { type master; //设置区域类型(master、hint、slave、forward) file 地址库文件名或者绝对路径; }; include xxxx文件; //需要在主配置文件中包含xxxx文件 # named-checkconf //查错工具 TTL,Time To Live,存活时间(DNS解析记录的有效期) SOA,Start Of Authority,授权记录的开始(管理的区域的信息,以及提供给从DNS服务器用的一些参数) #### 地址库文件 /var/named/\*,设置具体的地址记录(域名-\>IP地址) # vim /var/named/地址库文件名 $TTL 有效记录的生存时间 @ IN SOA 区域名 管理邮箱地址. ( 序列号 //十位以内的整数 刷新时间 重试时间 过期时间 无效记录的生存时间 ) @ NS 当前区域的DNS服务器的域名. MX 优先级 当前区域的邮件服务器的域名. www A IP地址 mail A IP地址 servera A IP地址 .. .. # named-checkzone 区域名 地址库文件的路径和名称 //查错 work(客户机) ==》servera(权威DNS) 实验拓扑: servera.lab.example.com,权威DNS,提供域名解析服务(正向域lab.example.com) work(客户机):向servera查询域名serverc.lab.example.com的IP地址 1)安装bind包 \[root@servera \~\]# yum -y install bind 2)调整配置 \[root@servera \~\]# vim /etc/named.conf //修改主配置文件 options { listen-on port 53 { any; }; //在本机所有IPv4接口监听 listen-on-v6 port 53 { any; }; //在本机所有IPv6接口监听 directory "/var/named"; //zone地址库文件的默认存放路径 allow-query { localhost; 172.25.250.0/24; }; //允许哪些客户机查询 .. .. }; zone "lab.example.com" { //定义DNS区域 type master; //类型为主区域 file "lab.example.com.zone"; //指定地址库文件名 }; \[root@servera \~\]# named-checkconf //检查主配置文件(无输出即无错) \[root@servera \~\]# \[root@servera \~\]# vim /var/named/lab.example.com.zone //创建正向区域地址库文件 $TTL 1D @ IN SOA @ root.lab.example.com. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum @ NS servera.lab.example.com. servera A 172.25.250.10 serverb A 172.25.250.11 serverc A 172.25.250.12 serverd A 172.25.250.13 \[root@servera \~\]# chmod 640 /var/named/lab.example.com.zone \[root@servera \~\]# chown :named /var/named/lab.example.com.zone \[root@servera \~\]# named-checkzone lab.example.com /var/named/lab.example.com.zone //检查区域地址文件(OK即无错) .. .. OK 3)启动named服务 \[root@servera \~\]# firewall-cmd --permanent --add-service=dns //开放DNS访问 \[root@servera \~\]# firewall-cmd --reload //重载防火墙 \[root@servera \~\]# systemctl enable named --now //启用named服务 4)域名查询测试 ------ 向servera查询serverc的IP地址 \[root@work \~\]# host serverc.lab.example.com servera Using domain server: Name: servera Address: 172.25.250.10#53 Aliases: serverc.lab.example.com has address 172.25.250.12 ## ****四、权威DNS服务器-bind反向域设置**** 针对网段172.25.250/24, 对应的反向区域的名称 250.25.172.in-addr.arpa 然后在主配置文件中也需要定义也这个区域,并且提供相应的地址库文件 对应的反向地址记录: 12 PTR 完整的域名. work(客户机) ==》servera(权威DNS) 实验拓扑: servera.lab.example.com,权威DNS,提供域名解析服务(正向域lab.example.com、反向域250.25.172.in-addr.arpa) work(客户机):向servera查询域名serverc.lab.example.com的IP地址、查询IP地址172.25.250.12的域名 1)修改主配置文件,添加反向域设置 \[root@servera \~\]# cp -p /etc/named.conf{,.bak} //备份主配置文件 \[root@servera \~\]# vim /etc/named.conf .. .. zone "250.25.172.in-addr.arpa" IN { //注意反向区域名中网段的倒序写法 type master; file "172.25.250.zone"; }; 2)创建反向区域地址库文件 \[root@servera \~\]# vim /var/named/172.25.250.zone $TTL 300 @ IN SOA @ root.example.com. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum @ NS servera.lab.example.com. 10 PTR servera.backend.lab.example.com. 11 PTR serverb.backend.lab.example.com. 12 PTR serverc.backend.lab.example.com. 13 PTR serverd.backend.lab.example.com. \[root@servera \~\]# chmod 640 /var/named/172.25.250.zone \[root@servera \~\]# chown :named /var/named/172.25.250.zone \[root@servera \~\]# named-checkzone 250.25.172.in-addr.arpa /var/named/172.25.250.zone //检查反向区域地址文件(OK即无错) .. .. OK 3)重启named服务 \[root@servera \~\]# systemctl restart named 4)域名查询测试 ------ 向servera查询IP地址172.25.250.12的域名 \[root@work \~\]# host 172.25.250.12 servera Using domain server: Name: servera Address: 172.25.250.10#53 Aliases: 12.250.25.172.in-addr.arpa domain name pointer serverc.lab.example.com. 扩展小知识(解析库的应用) ------ DNS解析记录的轮询(负载均衡,一个站点对应多个IP地址): serverd A 172.25.250.13 serverd A 72.25.250.13 别名解析记录的设置(一个IP对应多个站点): servera A 172.25.250.10 www CNAME servera 泛域名解析记录的设置(只查询域名或错误的站点名,也能有结果): @ NS servera.lab.example.com. A 172.25.250.10 \* A 172.25.250.10 ## ****五、缓存DNS服务器-unbound缓存/转发设置**** work(客户机) ==》serverb(缓存DNS) ==》servera(权威DNS) 实验拓扑: servera.lab.example.com,权威DNS,提供域名解析服务(正向域lab.example.com、反向域250.25.172.in-addr.arpa) serverb.lab.example.com,缓存DNS,代理客户端查询,将来自客户端的所有查询请求转发给servera work(客户机):向serverb查询域名serverc.lab.example.com的IP地址、查询IP地址172.25.250.12的域名 1)安装unbound包 \[root@serverb \~\]# yum -y install unbound 2)调整配置 \[root@serverb \~\]# cp -p /etc/unbound/unbound.conf{,.bak} //备份主配置文件 \[root@serverb \~\]# vim /etc/unbound/unbound.conf //修改主配置文件 server: .. .. interface: 172.25.250.11 //在指定接口(可以是0.0.0.0,表示本机所有IP地址)提供监听 access-control: 172.25.250.0/24 allow //允许哪些网段的客户机使用(可以配置多行),缺省为refuse拒绝 access-control: 127.0.0.0/8 allow domain-insecure: "lab.example.com" //标记不安全区域(允许转发查询,避免对客户端做DNSSEC安全验证) unblock-lan-zones: yes //允许查询本地区域 insecure-lan-zones: yes //允许查询不安全的本地区域 forward-zone: name: "lab.example.com" //将针对xx区域的查询转发给指定DNS(其余区域走auth-zone上游DNS服务器) forward-addr: 172.25.250.10 //指定另一台DNS服务器的IP地址 forward-zone: name: "250.25.172.in-addr.arpa" //将针对xx反向区域的查询转发给指定DNS forward-addr: 172.25.250.10 auth-zone: name: "." //对于未设置转发的其他区域,默认从根域开始查询 for-downstream: no for-upstream: yes fallback-enabled: yes master: b.root-servers.net master: c.root-servers.net .. .. \[root@serverb \~\]# unbound-checkconf //检查配置文件 unbound-checkconf: no errors in /etc/unbound/unbound.conf \[root@serverb \~\]# unbound-control-setup //首次起服务前,执行此命令生成密钥文件 .. .. 3)启动unbound服务 \[root@serverb \~\]# firewall-cmd --permanent --add-service=dns //开放DNS访问 \[root@serverb \~\]# firewall-cmd --reload //重载防火墙 \[root@serverb \~\]# systemctl enable unbound --now //启用unbound服务 4)客户端查询DNS记录 \[student@work \~\]$ host serverc.lab.example.com serverb //向serverb查询serverc的IP地址 .. .. serverc.lab.example.com has address 172.25.250.12 5)管理缓存的DNS数据 \[root@serverb \~\]# unbound-control dump_cache //查看缓存的解析记录 \[root@serverb \~\]# unbound-control flush work.lab.example.com //清除缓存的某个域名的解析记录 \[root@serverb \~\]# unbound-control flush lab.example.com //清除缓存的某个区域的所有解析记录

相关推荐
阿巴~阿巴~几秒前
信号产生机制全解析:从硬件异常到软件触发的深度探索
linux·运维·服务器
坐望云起1 分钟前
Hyper-V + Centos stream 9 搭建K8s集群(一)
linux·kubernetes·centos
Adorable老犀牛2 小时前
DockerFile文件执行docker bulid自动构建镜像
运维·docker·容器
IvorySQL2 小时前
PGSQL运维优化:提升vacuum执行时间观测能力
运维·postgresql·开源·开源数据库·ivorysql
张人玉4 小时前
WinForm之ListBox 控件
服务器·windows·microsoft
心一信息5 小时前
如何在Ubuntu上部署excalidraw
linux·运维·ubuntu
人生匆匆5 小时前
linux ext4缩容home,扩容根目录
linux·运维·服务器
鱼骨不是鱼翅5 小时前
自动化框架pytest
运维·自动化·pytest
IT成长日记6 小时前
【自动化运维神器Ansible】YAML支持的数据类型详解:构建高效Playbook的基石
运维·自动化·ansible·数据类型·yaml·playbook