DNS(域名系统)详解与 BIND 服务搭建
DNS(域名系统)详解与 BIND 服务搭建
一、什么是 DNS
DNS(域名服务,Domain Name System)是由解析器和域名服务器组成的网络服务,核心功能是将用户友好的域名(如www.baidu.com
)转换为机器可识别的 IP 地址(如180.101.50.242
),这个过程称为 “域名解析”。
- 组成:包含域名服务器(存储域名与 IP 的映射关系)和解析器(向服务器请求解析的客户端组件)。
- 特性:域名与 IP 是一对一或多对一关系(可通过 DNS 轮循实现一对多);采用目录树状的层级结构;以客户机 / 服务器模式运行,分为主服务器和转发服务器。
- 作用:解决了 “记 IP 难、记域名易” 的问题,是互联网通信的基础服务 —— 用户输入域名时,DNS 自动解析为 IP,实现主机间的连接。
二、域名的规则与结构
域名采用分层结构,类似目录树,各层级用点号 “.” 分隔:
- 根域:最高层级,用 “.” 表示(通常省略,如
www.baidu.com
实际是www.baidu.com.
)。 - 顶级域:
- 组织域:3 个字符,如
.com
(商业)、.edu
(教育)、.gov
(政府)。 - 国家 / 地区域:2 个字符,如
.cn
(中国)、.jp
(日本)。
- 组织域:3 个字符,如
- 二级域:注册给个人、组织或公司的名称,如
baidu
(baidu.com
)、taobao
(taobao.com
)。 - 主机名:域名的最底层,标识具体主机,与各级域名结合构成FQDN(完全合格域名),如
server.example.com
。
三、DNS 服务的核心功能与查询方式
1. 核心作用
- 正向解析:将 FQDN(如
client.example.com
)解析为对应的 IP 地址(如172.16.30.10
)。 - 反向解析:将 IP 地址(如
172.16.30.20
)解析为对应的 FQDN(如server.example.com
)。
2. 查询类别
- 递归查询:客户端向 DNS 服务器发送请求后,服务器全程处理并返回最终结果(客户端只需等待)。
- 迭代查询:DNS 服务器若无法直接解析,会返回下一级服务器的地址,由客户端自行向新服务器查询,直至得到结果。
四、DNS 服务搭建(BIND)
BIND 是最常用的 DNS 服务器软件,以下是基于 BIND 的主 DNS 服务器搭建步骤:
1. 安装软件
[root@zhang3 ]# yum -y install bind bind-chroot
已加载插件:fastestmirror, langpacks
Determining fastest mirrors
aa | 3.6 kB 00:00
(1/2): aa/group_gz | 166 kB 00:00
(2/2): aa/primary_db | 3.1 MB 00:00
正在解决依赖关系
--> 正在检查事务
---> 软件包 bind.x86_64.32.9.9.4-72.el7 将被 安装
--> 正在处理依赖关系 python-ply,它被软件包 32:bind-9.9.4-72.el7.x86_64 需要
---> 软件包 bind-chroot.x86_64.32.9.9.4-72.el7 将被 安装
--> 正在检查事务
---> 软件包 python-ply.noarch.0.3.4-11.el7 将被 安装
--> 解决依赖关系完成依赖关系解决================================================================================Package 架构 版本 源 大小
================================================================================
正在安装:bind x86_64 32:9.9.4-72.el7 aa 1.8 Mbind-chroot x86_64 32:9.9.4-72.el7 aa 88 k
为依赖而安装:python-ply noarch 3.4-11.el7 aa 123 k事务概要
================================================================================
安装 2 软件包 (+1 依赖软件包)总下载量:2.0 M
安装大小:5.1 M
Downloading packages:
--------------------------------------------------------------------------------
总计 56 MB/s | 2.0 MB 00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction正在安装 : python-ply-3.4-11.el7.noarch 1/3 正在安装 : 32:bind-9.9.4-72.el7.x86_64 2/3 正在安装 : 32:bind-chroot-9.9.4-72.el7.x86_64 3/3 验证中 : 32:bind-9.9.4-72.el7.x86_64 1/3 验证中 : python-ply-3.4-11.el7.noarch 2/3 验证中 : 32:bind-chroot-9.9.4-72.el7.x86_64 3/3 已安装:bind.x86_64 32:9.9.4-72.el7 bind-chroot.x86_64 32:9.9.4-72.el7 作为依赖被安装:python-ply.noarch 0:3.4-11.el7 完毕!
bind
:DNS 服务核心组件。bind-chroot
:为 BIND 提供 “牢笼” 环境,增强安全性。
2. 关键配置文件与目录
文件 / 目录 | 作用 |
---|---|
/etc/named.conf | DNS 主配置文件,定义监听端口、允许查询的主机等。 |
/etc/named.rfc1912.zones | 全局解析配置文件,定义正向 / 反向解析区域。 |
/var/named/ | DNS 解析文件存放目录(家目录)。 |
/var/named/named.localhost | 正向解析文件模板。 |
/var/named/named.empty | 反向解析文件模板。 |
/etc/hosts | 本地静态解析文件(优先级高于 DNS)。 |
/etc/resolv.conf | 客户端 DNS 服务器指向配置。 |
3. 配置主 DNS 服务器
(1)修改主配置文件 /etc/named.conf
[root@zhang3 ]# vim /etc/named.conflisten-on port 53 { any; }; # 允许所有主机监听53端口(DNS默认端口,ipv4)
listen-on-v6 port 53 { any; }; # 允许所有主机监听53端口(DNS默认端口,ipv6)
allow-query { any; }; # 允许所有主机查询
(2)配置解析区域(/etc/named.rfc1912.zones
)
定义正向和反向解析的区域信息:
[root@zhang3 ]# vim /etc/named.rfc1912.zones# 正向解析区域(域名example.com)
zone "example.com" IN {type master; # 主服务器file "zhang3.com"; # 正向解析文件名,自行定义allow-update { none; }; # 禁止动态更新
};# 反向解析区域(IP段192.168.100.x)
# 反向区域名格式:网段倒写.in-addr.arpa(100.168.192对应192.168.100)
zone "100.168.192.in-addr.arpa" IN {type master;file "com.zhang3"; # 反向解析文件名,自行定义allow-update { none; };
};#建议复制模板在尾行配置
(3)创建正向解析文件
基于模板创建并编辑正向解析文件(映射域名到 IP):
[root@zhang3 ]# cd /var/named/
[root@zhang3 named]# cp -p named.localhost zhang3.com # 复制模板,保留文件权限(-p)[root@zhang3 named]# vim zhang3.com$TTL 1D # 缓存有效期1天
@ IN SOA zhang3.example.com.root.example.com. ( #SOA授权起始;该区域主域名服务器的 FQDN;该区域的管理员邮箱地址2025081101 ; serial #序列号,自行设定,这里使用日期1D ; refresh #刷新时间1H ; retry #重试时间1W ; expire #过期时间3H ) ; minimum #最小缓存时间NS zhang3.example.com. # 域名服务器记录
zhang3 IN A 192.168.100.10 # zhang3.example.com → 192.168.100.10
lisi IN A 192.168.100.10 # lisi.example.com → 192.168.100.10
SOA
:起始授权记录,标识主 DNS 服务器。NS
:域名服务器记录,指定负责该域解析的服务器。A
:地址记录,正向解析的核心(域名→IP)。
(4)创建反向解析文件
基于模板创建并编辑反向解析文件(映射 IP 到域名):
[root@zhang3 ]# cp -p named.empty com.example[root@zhang3 named]# vim com.example$TTL 3H # 缓存有效期3小时
@ IN SOA zhang3.example.com. root.example.com. ( #SOA授权起始;该区域主域名服务器的 FQDN;该区域的管理员邮箱地址2025081101 ; serial #序列号,自行设定,这里使用日期1D ; refresh #刷新时间1H ; retry #重试时间1W ; expire #过期时间3H ) ; minimum #最小缓存时间NS zhang3.example.com.
10 IN PTR zhang3.example.com. # 192.168.100.10 → zhang3.example.com
10 IN PTR lisi.example.com. # 192.168.100.10 → lisi.example.com
PTR
:指针记录,反向解析的核心(IP→域名)。
(5)启动服务并配置自启
[root@zhang3]# systemctl restart named #重启named服务
[root@zhang3]# systemctl enable named #设置named服务开机自启
Created symlink from /etc/systemd/system/multi-user.target.wants/named.service to /usr/lib/systemd/system/named.service.
(6)配置防火墙
允许 DNS 服务通过防火墙:
[root@zhang3 ]# firewall-cmd --add-service=dns --permanent
success
[root@zhang3 ]# firewall-cmd --reload #重启防火墙
success
或仅允许特定网段(如172.16.30.0/24)
[root@zhang3 ]# firewall-cmd --add-rich-rule='rule family=ipv4 source
address=172.16.30.0/24 service name=dns accept' --permanent
success
[root@zhang3 ]# firewall-cmd --reload
success
4. 客户端配置与验证
(1)客户端设置 DNS 服务器
在客户端网卡配置文件中指定 DNS 服务器 IP(主 DNS 服务器 IP:192.168.100.10):
[root@zhang-2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 # 网卡文件名以实际为准
# 添加如下行DNS1=192.168.100.10# 重启网络生效
[root@zhang-2 ~]# systemctl restart network
(2)验证解析
# 正向解析验证
[root@zhang-2 ~]# ping zhang3.example.com
PING zhang3.example.com (192.168.100.10) 56(84) bytes of data.
64 bytes from lisi.example.com (192.168.100.10): icmp_seq=1 ttl=64 time=0.123 ms
64 bytes from lisi.example.com (192.168.100.10): icmp_seq=2 ttl=64 time=0.367 ms
64 bytes from lisi.example.com (192.168.100.10): icmp_seq=3 ttl=64 time=0.304 ms
^C
--- zhang3.example.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.123/0.264/0.367/0.105 ms# 反向解析验证
[root@zhang-2 ~]# nslookup 192.168.100.10
Server: 192.168.100.10
Address: 192.168.100.10#5310.100.168.192.in-addr.arpa name = zhang3.example.com.
10.100.168.192.in-addr.arpa name = lisi.example.com.#一个FQDN(完全合格域名)只能对应一个IP地址
#一个IP地址可以对应多个FQDN(完全合格域名)
五、辅助 DNS 服务器配置
辅助 DNS 服务器从主服务器同步解析数据,提供冗余备份:
-
安装软件:同主服务器(
bind bind-chroot
)。 -
修改主配置文件:同主服务器(允许所有主机监听和查询)。
-
配置区域文件(
/etc/named.rfc1912.zones
):[root@zhang-2 ]# vim /etc/named.rfc1912.zones zone "example.com" IN { # 正向解析区域(域名example.com)type slave; # 辅助服务器file "zhang3.com"; # 同步的正向解析文件存放路径,自行定义masters { 192.168.100.10; }; # 主服务器IP };# 反向解析区域(IP段192.168.100.x) zone "100.168.192.in-addr.arpa" IN {type slave;file "com.zhang3";masters { 192.168.100.10; }; };[root@zhang-2 ]# systemctl restart named
-
启动服务:
systemctl restart named && systemctl enable named
。 -
关闭防火墙和 SELinux(或配置允许 DNS 服务)。
总结
DNS 通过域名与 IP 的映射实现网络通信的便捷性,BIND 是搭建 DNS 服务器的主流工具。主 DNS 服务器负责维护解析记录,辅助服务器提供冗余备份,二者结合可提高 DNS 服务的可靠性。关键配置包括主配置文件、区域定义、正向 / 反向解析记录,验证时需确保客户端正确指向 DNS 服务器并通过ping
或nslookup
测试解析效果。