Orange的运维学习日记--34.DNS详解与服务部署

发布于:2025-08-11 ⋅ 阅读:(16) ⋅ 点赞:(0)

Orange的运维学习日记–34.DNS详解与服务部署

DNS 服务介绍

服务概述

DNS(Domain Name System,域名系统)是一种用于将域名转换为 IP 地址的分布式数据库服务。它通过层次化命名系统存储网络主机和资源目录,使用户可通过易记的域名访问网站和其他网络服务,而无需直接记忆复杂的 IP 地址

DNS 的目录信息以资源记录的形式,将网络名称映射到不同类型的资源,例如 A、AAAA、CNAME 等记录

层次结构术语

DNS 采用分层命名空间,常见术语包括域(Domain)、子域(Subdomain)和区(Zone)

在这里插入图片描述

域(Domain)

domain 是一组资源记录的集合,以通用名称结尾,表示 DNS 命名空间的子树,例如 laoma.cloud

顶级域(TLD)由 IANA 管理,包括

  • 通用顶级域(gTLD):.com、.net、.edu 等
  • 国家/地区顶级域(ccTLD):.cn、.uk、.us 等

在这里插入图片描述

子域(Subdomain)

subdomain 是另一个域的完整子树。例如 lab.laoma.cloud 是 laoma.cloud 的子域,laoma.cloud 又是 .com 的子域

区(Zone)

zone 是特定名称服务器直接负责的域。它可能包含整个域,也可能只是域的一部分,可将部分或全部子域委派给其他名称服务器


DNS 查询

DNS 查询主要分为递归查询和迭代查询,由 DNS 请求报头中的 RD(Recursion Desired)字段控制:

  • RD=1:递归查询(默认)
  • RD=0:迭代查询

迭代查询

迭代查询(Iterative Query)中,DNS 客户端自行向每一级名称服务器发送请求,获取下一级服务器列表后再进行后续查询,直到得到权威名称服务器的最终应答或失败

基本流程(以本地名称服务器缓存为例):

  1. 客户端向本地名称服务器发出域名解析请求
  2. 本地名称服务器缓存命中则直接返回;否则返回根名称服务器列表
  3. 客户端向根名称服务器发送同样请求
  4. 根名称服务器返回对应顶级域名服务器列表
  5. 客户端再轮询顶级、二级、三级……名称服务器,直至权威名称服务器
  6. 若最终未找到记录,则返回负响应;若中途使用转发器或备用 DNS,则依次重试

在这里插入图片描述

迭代查询示例

访问 www.example.com 时,客户端查询路径如下:

  1. 向本地 DNS 服务器发起解析请求
  2. 本地服务器无缓存,返回 a.rootserver.net
  3. 客户端向 a.rootserver.net 请求,获得 .com 顶级服务器列表
  4. 向 .com 服务器请求,获得 example.com 二级服务器列表
  5. 向 example.com 服务器请求,获得 www.example.com 权威服务器地址
  6. 向权威服务器请求,获得最终 IP 并返回客户端

递归查询

递归查询(Recursive Query)中,客户端只需向本地名称服务器发出请求,本地名称服务器充当代理,代替客户端完成所有后续查询,直到得到最终结果并返回给客户端

基本流程:

  1. 客户端向本地 DNS 服务器发起解析请求,进入等待状态
  2. 本地服务器缓存命中则直接返回;否则依次向根、顶级、二级……名称服务器查询
  3. 查询到权威记录后将结果返回给客户端,并将记录缓存以提高后续查询效率

在这里插入图片描述

递归查询示例

访问 www.example.com 时,DNS 客户端与本地服务器交互如下:

客户端 → 本地 DNS 服务器:解析 www.example.com
本地 DNS 服务器 → 根服务器    :解析 www.example.com
根服务器 → 本地 DNS 服务器    :.com 服务器列表
本地 DNS 服务器 → .com 服务器 :解析 www.example.com
.com 服务器 → 本地 DNS 服务器 :example.com 服务器列表
本地 DNS 服务器 → example.com 服务器:解析 www.example.com
example.com 服务器 → 本地 DNS 服务器:www.example.com 权威服务器地址
本地 DNS 服务器 → 权威服务器    :解析 www.example.com
权威服务器 → 本地 DNS 服务器    :返回 IP 地址
本地 DNS 服务器 → 客户端      :返回 IP 地址

DNS 资源记录

DNS 区域中的每条资源记录(RR)格式如下:

owner-name    TTL    class    type    data
字段 含义
owner-name 记录名称
TTL 生存时间(秒),指定解析器缓存该记录的时长
class 类别,通常为 IN(互联网)
type 记录类型,如 A、AAAA、CNAME、MX、NS 等
data 与类型相关的记录数据

常用记录类型

A

将主机名映射到 IPv4 地址

server.laoma.cloud. 86400 IN A 172.25.254.254
AAAA

将主机名映射到 IPv6 地址

a.root-servers.net. 604800 IN AAAA 2001:503:ba3e::2:30
CNAME

将一个名称别名到另一个名称(规范名称),解析时会继续查询规范名称的 A/AAAA 记录

www-dev.laoma.cloud. 30 IN CNAME lab.laoma.cloud.

注意:CNAME 最终必须链向 A 或 AAAA 记录;NS 和 MX 记录不得指向 CNAME

PTR

将 IP 地址映射回主机名,用于反向解析。IPv4 地址反转至 in-addr.arpa,IPv6 反转至 ip6.arpa

4.0.41.198.in-addr.arpa.   785 IN PTR a.root-servers.net.
NS

指定对该域具有权威性的名称服务器,公共权威服务器必须设置 NS 记录

laoma.cloud.           86400 IN NS classroom.laoma.cloud.
SOA

起始授权记录,定义区域运行参数,每个区域仅有一条 SOA 记录

laoma.cloud. 86400 IN SOA classroom.laoma.cloud. root.classroom.laoma.cloud. 2015071700 3600 300 604800 60
示例 含义
MNAME classroom.laoma.cloud. 主名称服务器
RNAME root.classroom.laoma.cloud. 区负责人邮箱(@ 用 . 代替)
SERIAL 2015071700 区版本号
REFRESH 3600 辅助服务器刷新频率(秒)
RETRY 300 辅助服务器重试间隔(秒)
EXPIRE 604800 失效时间(秒):刷新失败后停止响应前的等待时长
MINIMUM 60 负缓存生存时间(秒):NXDOMAIN 等错误响应的缓存时长
MX

邮件交换记录,映射到接收该域邮件的服务器,值越低优先级越高

laoma.cloud. 86400 IN MX 10 mail.laoma.cloud.
TXT

任意文本记录,常用于 SPF、DKIM、DMARC 及站点所有权验证

lwn.net. 27272 IN TXT "v=spf1 a:mail.lwn.net -all"
SRV

服务定位记录,帮助客户端发现支持特定协议的服务器

_ldap._tcp.laoma.cloud. 86400 IN SRV 0 100 389 server0.laoma.cloud.

主机与区域记录

每台主机通常具备:

  • 一个或多个 A/AAAA 记录
  • 反向映射的 PTR 记录
  • 可选的 CNAME 记录

每个区域文件通常包含:

  • 唯一的 SOA 记录
  • 对应权威服务器的 NS 记录
  • 可选的 MX、SRV、TXT 等记录

配置权威名称服务器

架构

权威名称服务器存储区域资源记录,为其管理的域提供权威答案。通常采用 BIND(Berkeley Internet Name Domain)部署:

  • Primary(主)服务器:保存区域的原始文件并授权序列号
  • Secondary(辅)服务器:周期性向 Primary 请求区域传输以获取更新

部署建议:至少两台公共服务器,分布在不同站点,保障可用性;可配置私有 Primary 与公共 Secondary 架构,保护主服务器免受外界攻击


安装 BIND

yum install -y bind bind-utils
  • bind:服务器端软件
  • bind-utils:客户端工具(dig、nslookup 等)

基本配置文件

主要配置文件:/etc/named.conf

  • 由 root 用户(named 组)拥有,权限 0640
  • 指定全局选项、ACL、各区域定义及文件位置
  • 区域文件默认存放于 /var/named
定义地址匹配列表(ACL)

使用 acl 指令为后续配置提供别名 IP 列表,加速和简化配置管理:

acl trusted-nets { 192.168.10.0/24; 192.168.20.0/24; };
acl classroom    { 10.1.8.0/24;           };

BIND 预定义 ACL:

ACL 含义
none 不匹配任何主机
any 匹配所有主机
localhost 匹配 DNS 服务器自身所有 IP
localnets 匹配 DNS 服务器本地子网内所有主机
监听地址配置

options 块中使用 listen-onlisten-on-v6 指定监听接口及端口:

options {
  listen-on port 53 { 127.0.0.1; 10.1.8.10; };
  listen-on-v6 port 53 { ::1; 2001:db8:2020::5300; };
};
客户端访问控制

options 块中通过以下指令控制访问:

  • allow-query:允许哪些客户查询(公共权威应设为 any
  • recursion yes|no / allow-recursion:控制递归查询(权威服务器应禁用递归)
  • allow-transfer:控制区域传输(仅允许 Secondary 和本地调试)

示例:禁止递归,仅允许任意主机查询:

options {
  recursion no;
  allow-query { any; };
};
区域定义

named.conf 中定义区域及其文件:

zone "laoma.cloud" IN {
  type master;
  file "laoma.cloud.zone";
};

zone "8.1.10.in-addr.arpa" IN {
  type master;
  file "10.1.8.zone";
};

区域文件管理

区域文件创建与权限

Secondary 区域文件放在 /var/named/slaves,由 BIND 自动更新。最好:

touch /var/named/laoma.cloud.zone /var/named/10.1.8.zone
chmod 640 /var/named/*.zone
chown root:named /var/named/*.zone
# 如果启用 SELinux:
chcon -t named_zone_t /var/named/*.zone
区域文件格式
  • 可选 $TTL 指令设置默认 TTL
  • 每行一条资源记录,可用括号实现多行
  • 分号(;)右侧为注释

时间单位:

  • M(分钟),H(小时),D(天),W(周)
正向区域示例

文件 /var/named/laoma.cloud.zone

$TTL 3600
@      IN SOA dns.laoma.cloud. root.laoma.cloud. (
           42     ; serial
           3H     ; secondary refresh
           15M    ; secondary retry
           1W     ; secondary timeout
           15M )  ; negative cache TTL

       IN NS  dns.laoma.cloud.
dns    IN A   10.1.8.10
server IN A   10.1.8.10
student IN CNAME client.laoma.cloud.
client IN A   10.1.8.11
www    IN A   10.1.8.200
@      IN MX  10 mail.laoma.cloud.
mail   IN A   10.1.8.253
反向区域示例

文件 /var/named/10.1.8.zone

$TTL 3600
@    IN SOA dns.laoma.cloud. root.laoma.cloud. (
         42    ; serial
         3H    ; secondary refresh
         15M   ; secondary retry
         1W    ; secondary timeout
         15M ) ; negative cache TTL

     IN NS  dns.laoma.cloud.
10   IN PTR server.laoma.cloud.
10   IN PTR dns.laoma.cloud.
11   IN PTR client.laoma.cloud.
11   IN PTR student.laoma.cloud.
100  IN PTR ns1.laoma.cloud.
200  IN PTR www.laoma.cloud.
253  IN PTR mail.laoma.cloud.

委派子域

在父域添加 NS 记录,并为子域名称服务器添加 glue 记录(如名称服务器位于同域):

support IN NS ns1.support.laoma.cloud.
        IN NS ns2.support.laoma.cloud.

ns1.support.laoma.cloud. IN A 192.100.100.10
ns2.support.laoma.cloud. IN A 192.100.100.11

配置验证与运行测试

语法检查

  • named-checkconf:验证 /etc/named.conf
  • named-checkzone ZONE FILE:验证区域文件
named-checkconf
named-checkzone laoma.cloud /var/named/laoma.cloud.zone

日志监视

使用 journalctl 实时查看 named 服务日志,捕获加载错误

journalctl -f _SYSTEMD_UNIT=named.service

启动服务与防火墙

systemctl enable named --now
firewall-cmd --add-service=dns --permanent

客户端测试

方式一 配置 DNS 并使用 ping、host、getent

nmcli connection modify ens32 ipv4.dns 10.1.8.10
nmcli connection up ens32
ping student.laoma.cloud
host student
getent hosts student

方式二 使用 dig

yum install -y bind-utils
dig @10.1.8.10 laoma.cloud NS
dig @10.1.8.10 laoma.cloud MX
dig @10.1.8.10 student.laoma.cloud
dig @10.1.8.10 -x 10.1.8.100

递归与迭代查询演示

  • 递归查询以服务器为中心返回最终结果
  • 迭代查询以客户端为中心依次查询
  • 使用 dig +trace @server domain 演示迭代查询 trace
dig +trace @10.1.8.10 www.baidu.com

ipv4.dns 10.1.8.10
nmcli connection up ens32
ping student.laoma.cloud
host student
getent hosts student


方式二 使用 dig

```bash
yum install -y bind-utils
dig @10.1.8.10 laoma.cloud NS
dig @10.1.8.10 laoma.cloud MX
dig @10.1.8.10 student.laoma.cloud
dig @10.1.8.10 -x 10.1.8.100

递归与迭代查询演示

  • 递归查询以服务器为中心返回最终结果
  • 迭代查询以客户端为中心依次查询
  • 使用 dig +trace @server domain 演示迭代查询 trace
dig +trace @10.1.8.10 www.baidu.com

网站公告

今日签到

点亮在社区的每一天
去签到