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 //清除缓存的某个区域的所有解析记录

相关推荐
暗影天帝12 分钟前
BPI-R3 Mini 刷 Yuzhii DHCPD U-Boot 教程
linux
小赖同学啊25 分钟前
智能连接器集群化高可用生产方案
linux·运维·人工智能
wanghao66645527 分钟前
DevOps 从入门到实践:构建高效交付流水线
运维·devops
qq_5469372732 分钟前
从“能用”到“超神”,DeepSeek++给网页版装上“大脑”和“手脚”,支持长期记忆、MCP工具与自动化任务!
运维·自动化
ZStack开发者社区32 分钟前
基于AI Agent的ZCF API文档全链路自动化
运维·人工智能·自动化
Cinema KI32 分钟前
Linux第一个系统程序-进度条
linux·服务器
Moshow郑锴1 小时前
Ubuntu 26.04 更换阿里云源镜像
linux·运维·ubuntu
Jason_chen1 小时前
Linux 6.2 串口机制深度解析:AI驱动的自适应通信与零信任串口安全架构
linux
迷糊小面包2 小时前
Docker Hadopp集群版部署搭建及常规问题解疑
运维·docker·容器
茉莉玫瑰花茶2 小时前
综合案例 - AI 智能租房助手 [ 5 ]
服务器·数据库·人工智能·python·ai