DNS 服务器 一、DNS 基础概述1. 定义DNS域名系统分布式命名数据库核心作用是域名 ↔ IP 地址相互解析替代难记的 IP是互联网基础服务。2. 域名分层结构树形层级从上至下层级根域 → 顶级域 → 二级域 → 子域根域层级最高符号.全球根服务器负责管理。顶级域TLD通用顶级域gTLD.com、.net、.edu等国家顶级域ccTLD.cn、.uk、.us等由各国管理二级域企业 / 组织注册使用例bgy.cloud子域在二级域下划分例www.bgy.cloud、mail.bgy.cloud3. 核心术语Domain域某一域名下所有资源记录的集合对应一棵完整命名子树。Subdomain子域隶属于上级域名的分支域名。Zone区域单台 DNS 服务器直接负责解析的域名范围可将子域委派给其他服务器。二、DNS 两种查询方式DNS 报文RD字段区分类型RD1递归查询默认RD0迭代查询。1. 递归查询角色分工客户端只发请求、等待结果全程由本地 DNS 服务器代查所有流程。流程客户端请求本地 DNS本地 DNS 查自身缓存有记录直接返回无缓存则依次向「根服务器 → 顶级域服务器 → 二级域服务器 → 权威服务器」递归查询拿到最终结果返回客户端并本地缓存记录2. 迭代查询角色分工客户端自主逐层级查询每台服务器只返回下一级服务器地址不代查。流程客户端请求本地 DNS本地 DNS 无缓存返回根服务器地址客户端访问根服务器得到顶级域服务器地址客户端继续逐级查询直到访问到权威服务器权威服务器返回解析结果给客户端核心区别递归本地 DNS 做代理客户端 “一问到底”迭代客户端自主遍历各级服务器逐级获取线索三、DNS 资源记录RR1. 通用格式主机名 TTL 类别 记录类型 数据TTL缓存有效时长秒class固定为IN互联网类别2. 常用记录类型记录类型作用示例A域名 → IPv4 正向解析www.bgy.cloud. 300 IN A 10.1.8.100AAAA域名 → IPv6 正向解析test.bgy.cloud. 300 IN AAAA 2409::1CNAME域名别名指向另一域名web.bgy.cloud. IN CNAME www.bgy.cloud.PTRIP → 域名 反向解析100.8.1.10.in-addr.arpa. IN PTR www.bgy.cloud.NS指定域的权威 DNS 服务器bgy.cloud. IN NS dns.bgy.cloud.SOA区域起始授权记录每个区域唯一定义主服务器、管理员邮箱、同步 / 超时参数MX邮件交换记录指定邮件服务器数值越小优先级越高bgy.cloud. IN MX 10 mail.bgy.cloud.TXT文本记录多用于域名验证、邮件防伪造存放 SPF、域名验证字符串SRV服务定位记录查找指定服务的服务器端口定位 LDAP、FTP 等服务地址补充说明CNAME 不建议嵌套指向其他 CNAME易形成解析循环、降低效率NS/MX 记录不能指向 CNAME必须绑定 A/AAAA 记录SOA 字段释义主服务器、管理员邮箱、区域版本号、刷新 / 重试 / 过期 / 最小缓存时间。安装 BIND通过安装bind软件包来安装BIND。 名称服务器本身作为named服务运行。 bind包将HTML和PDF格式的BIND文档在安装在/usr/share/doc/bind/目录。[rootsever ~18:38:48]# yum install -y bind bing-utils软件包说明bind服务器软件包。bind-utilsbind 工具软件包。bind软件包默认将服务配置为基本的递归缓存名称服务器。 它被配置为localhost、相关域和地址的primary服务器以减轻根名称服务器的负担。 此默认配置还限制了对本地主机上程序的访问。 它侦听IPv4和IPv6环回接口的端口53 UDP/TCP127.0.0.1和:: 1上的连接。配置 BINDnamed主要配置文件是**/etc/named.conf**。 该文件控制BIND的基本操作由root用户named组拥有具有八进制权限0640并且具有named_conf_tSELinux类型。配置文件还指定了每个区域的配置文件位置这些文件通常保存在**/var/named**中。配置DNS服务器需要执行以下步骤配置地址匹配列表。配置named侦听的IP地址。配置客户端的访问控制。配置zone。编写区域文件。配置客户端的访问控制我们可以在/etc/named.conf文件options块中使用以下三个指令配置控制访问allow-query控制所有查询。 默认情况下allow-query设置为localhost对于公开权威服务器必须定义allow-query { any; };允许互联网托管者从他们那里获取信息。allow-recursion控制递归查询。权威服务器不应允许递归查询防止服务器被用于DNS放大分布式拒绝服务攻击并更好地保护其免受缓存中毒攻击。配置此功能最简单的方法是完全关闭递归bash options { ...... recursion no; ...... };如果必须允许受信任的客户端执行递归则可以打开递归并为这些特定主机或网络设置allow-recursionoptions { ...... recursion yes; allow-recursion { trusted-nets; }; ...... };allow-transfer控制区域转移(Zone Transfer)。 区域转移允许客户端获取我们区域中所有数据的转储。 区域转移应该受到限制否则攻击者很容易快速获取我们区域中的所有资源记录。实验环境采用如下配置[rootsever ~18:43:36]# vim /etc/named.conf#修改部分为listen-on port53{127.0.0.1;10.1.8.10;};listen-on-v6 port53{::1;};directory/var/named;dump-file/var/named/data/cache_dump.db;statistics-file/var/named/data/named_stats.txt;memstatistics-file/var/named/data/named_mem_stats.txt;recursing-file/var/named/data/named.recursing;secroots-file/var/named/data/named.secroots;allow-query{any;};配置 zone[rootsever ~18:48:07]# vim /etc/named.conf# 最后添加如下内容#正向解析zonebgy.cloudIN{typemaster;filebgy.cloud.zone;};#反向解析zone8.1.10.in-addr.arpaIN{typemaster;file10.1.8.zone;};配置说明type指定服务器角色。file指定相对路径名。 相对路径由options块中的directory指令设置。创建区域文件辅助区域文件应保存在/var/named/slaves中。辅助服务器启动时会将其缓存的区域版本与主服务器上的当前版本进行比较如果区域文件版本是最新的则使用该区域文件 如果区域文件版本不是最新的或文件不存在则named执行区域传输并将结果缓存在该文件中。BIND 应该能够读取这些区域文件但不能写入它们。 这些文件应归root用户和named组所有以便守护程序在某种程度上受到损害时不能更改它们。[rootsever ~18:52:19]# cd /var/named/[rootsever named18:57:00]# cp -a named.localhost bgy.cloud.zone[rootsever named18:57:37]# vim bgy.cloud.zone$TTL1D IN SOA dns.bgy.cloud. admin.bgy.cloud.(0;serial 1D;refresh 1H;retry 1W;expire 3H);mininum IN NS dns.bgy.cloud. dns IN A10.1.8.10 server IN A10.1.8.10 client IN A10.1.8.11 www IN A10.1.8.100 IN MX10mail.bgy.cloud. mail IN A10.1.8.200 web IN CNAME www#检查[rootsever named18:59:26]# named-checkzone bgy.cloud bgy.cloud.zonezone bgy.cloud/IN: loaded serial0OK[rootsever named18:59:44]# cp -a bgy.cloud.zone 10.1.8.zone[rootsever named18:59:59]# vim 10.1.8.zone$TTL1D IN SOA dns.bgy.cloud. admin.bgy.cloud.(0;serial 1D;refresh 1H;retry 1W;expire 3H);mininum IN NS dns.bgy.cloud.10IN PTR dns.bgy.cloud.10IN PTR server.bgy.cloud.11IN PTR client.bgy.cloud.100IN PTR www.bgy.cloud.100IN PTR web.bgy.cloud.200IN PTR mail.bgy.cloud.#检查[rootsever named19:01:23]# named-checkzone 10.1.8 10.1.8.zonezone10.1.8/IN: loaded serial0OK[rootsever named19:01:29]# systemctl enable named --nowCreated symlink from /etc/systemd/system/multi-user.target.wants/named.service to /usr/lib/systemd/system/named.service.[rootsever named19:01:36]# systemctl status named --now客户端测试方式1配置dns[rootclient ~17:20:02]# nmcli con modify ens32 ipv4.dns 10.1.8.10[rootclient ~19:07:30]# nmcli con up ens32连接已成功激活D-Bus 活动路径/org/freedesktop/NetworkManager/ActiveConnection/13[rootclient ~19:11:25]# cat /etc/resolv.conf# Generated by NetworkManagersearch bgy.cloud nameserver10.1.8.10[rootclient ~19:11:13]# ping serverPING server.bgy.cloud(10.1.8.10)56(84)bytes of data.64bytes from dns.bgy.cloud(10.1.8.10):icmp_seq1ttl64time0.343ms[rootclient ~19:11:20]# ping dns.bgy.cloudPING dns.bgy.cloud(10.1.8.10)56(84)bytes of data.64bytes from dns.bgy.cloud(10.1.8.10):icmp_seq1ttl64time0.336ms方式2dig工具[rootclient ~19:13:45]# yum install -y bind-utils# 查询相关记录10.1.8.10指定向10.1.8.10服务器查询记录# 查询NS记录[rootclient ~19:15:54]# dig 10.1.8.10 bgy.cloud NS;DiG9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.1610.1.8.10 bgy.cloud NS;(1server found);;global options: cmd;;Got answer:;;-HEADER-opcode: QUERY, status: NOERROR, id:42507;;flags: qr aa rd ra;QUERY:1, ANSWER:1, AUTHORITY:0, ADDITIONAL:2;;OPT PSEUDOSECTION:;EDNS: version:0, flags:;udp:4096;;QUESTION SECTION:;bgy.cloud. IN NS;;ANSWER SECTION: bgy.cloud.86400IN NS dns.bgy.cloud.;;ADDITIONAL SECTION: dns.bgy.cloud.86400IN A10.1.8.10;;Query time:0msec;;SERVER:10.1.8.10#53(10.1.8.10);;WHEN: 二5月2619:16:06 CST2026;;MSG SIZE rcvd:72[rootclient ~19:16:06]# dig 10.1.8.10 bgy.cloud MX;DiG9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.1610.1.8.10 bgy.cloud MX;(1server found);;global options: cmd;;Got answer:;;-HEADER-opcode: QUERY, status: NOERROR, id:461;;flags: qr aa rd ra;QUERY:1, ANSWER:1, AUTHORITY:1, ADDITIONAL:3;;OPT PSEUDOSECTION:;EDNS: version:0, flags:;udp:4096;;QUESTION SECTION:;bgy.cloud. IN MX;;ANSWER SECTION: bgy.cloud.86400IN MX10mail.bgy.cloud.;;AUTHORITY SECTION: bgy.cloud.86400IN NS dns.bgy.cloud.;;ADDITIONAL SECTION: mail.bgy.cloud.86400IN A10.1.8.200 dns.bgy.cloud.86400IN A10.1.8.10;;Query time:0msec;;SERVER:10.1.8.10#53(10.1.8.10);;WHEN: 二5月2619:16:12 CST2026;;MSG SIZE rcvd:109[rootclient ~19:16:28]# dig 10.1.8.10 -x 10.1.8.100;DiG9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.1610.1.8.10-x10.1.8.100;(1server found);;global options: cmd;;Got answer:;;-HEADER-opcode: QUERY, status: NOERROR, id:21422;;flags: qr aa rd ra;QUERY:1, ANSWER:2, AUTHORITY:1, ADDITIONAL:2;;OPT PSEUDOSECTION:;EDNS: version:0, flags:;udp:4096;;QUESTION SECTION:;100.8.1.10.in-addr.arpa. IN PTR;;ANSWER SECTION:100.8.1.10.in-addr.arpa.86400IN PTR www.bgy.cloud.100.8.1.10.in-addr.arpa.86400IN PTR web.bgy.cloud.;;AUTHORITY SECTION:8.1.10.in-addr.arpa.86400IN NS dns.bgy.cloud.;;ADDITIONAL SECTION: dns.bgy.cloud.86400IN A10.1.8.10;;Query time:0msec;;SERVER:10.1.8.10#53(10.1.8.10);;WHEN: 二5月2619:16:33 CST2026;;MSG SIZE rcvd:131