Linux域名服务(DNS)基础理论及 bind 部署配置实操报告
一、DNS的定义
DNS(Domain Name System,域名服务)是由解析器和域名服务器组成的系统,核心功能是实现域名与IP地址的转换(即“域名解析”)。
- 组成:包含解析器(负责发起解析请求)和域名服务器(存储域名与IP对应关系并处理解析请求)。
- 核心特性:
- 域名必须对应一个IP地址,而IP地址可无域名;
- 采用类似目录树的等级结构;
- 域名服务器分为主服务器和转发服务器(基于客户机/服务器模式)。
- 作用场景:用于TCP/IP网络(如Internet),通过用户友好的域名查找计算机或服务(如将网址解析为IP地址,实现上网)。
二、域名的规则
域名采用分层结构,从顶层到低层依次为:
- 根域:以“.”表示(通常省略)。
- 顶级域:
- 组织域:3个字符代号,如.com(商业)、.edu(教育)、.gov(政府);
- 国家/地区域:2个字符代号,如.cn(中国)、.jp(日本)。
- 二级域:注册给个人、组织或公司的名称,如baidu、taobao。
- 主机名称:域名空间最底层,与各级域名结合构成FQDN(完全合格域名)。
- 格式规则:各级域用“.”分隔,完全合格域名格式为“主机名称+域名(根域+顶级域+二级域)”,例如
www.baidu.com
(完整形式为www.baidu.com.
,根域“.”省略)。
三、DNS服务的作用
核心作用:将域名解析为IP地址(正向解析),也可将IP地址解析为域名(反向解析),解决“人类记域名、机器认IP”的矛盾。
四、域名查询的过程
1. 查询类别
- 递归查询:DNS客户端向DNS服务器发起请求,服务器需返回最终结果(客户端只等结果)。
- 迭代查询:DNS服务器之间的查询,服务器可返回中间结果(如指向其他服务器),需多次交互直到获取最终结果。
2. 解析方式
- 正向解析:将FQDN(如
www.baidu.com
)解析为对应的IP地址。 - 反向解析:将IP地址(如
192.168.1.1
)解析为对应的FQDN。
1、DNS服务器访问本地DNS
2、如果本地未查询到开始递归查询
- 查询根服务器存储的顶级域(TLD)服务器地址返回到本地DNS
- 查询顶级域存储的二级域名的权威 DNS 服务器服务器地址返回到本地DNS
- 查询二级域名的服务器存储的主机名称的IP地址返回到本地DNS
3、返回结果到DNS服务器
五、DNS服务搭建(以bind为例)
1. 为何需要DNS服务器?
- 本地解析文件
/etc/hosts
需手动配置IP与域名对应关系,且仅在本机生效(如在文件/etc/hosts
中写入172.16.30.30 system2
可实现ssh system2
,但其他机器需重复配置,如果更改名字其他机器也要重复更改)。 - 当网络规模大(如200台设备)或域名/IP变更时,手动维护成本极高,因此需要集中式的DNS服务器,所有设备只需指向DNS服务器的IP即可自动解析。
2. 重要配置文件及目录
文件/目录路径 | 作用描述 |
---|---|
/etc/hosts |
本地解析配置文件,手动设置IP与域名对应关系(仅本机生效)。 |
/etc/resolv.conf |
客户端的DNS指向配置,指定使用的DNS服务器IP。 |
named |
DNS服务的名称(启动/停止服务时使用,如systemctl start named )。 |
bind 、bind-chroot |
DNS服务的安装软件包(通过包管理工具安装)。 |
/var/named |
DNS服务的家目录,存放解析记录文件。 |
/etc/named.conf |
DNS的主配置文件,定义全局设置及区域映射。 |
/var/named/chroot/etc/named.rfc1912.zones |
记录正向和反向解析的全局配置文件,定义解析区域。 |
/var/named/named.localhost |
正向解析配置文件的模板。 |
/var/named/named.empty |
反向解析配置文件的模板。 |
模拟操作
下载
bind和bind-chroot
yum -y install bind bind-chroot
辑主配置文件:vim /etc/named.conf
在文件中进行如下配置:
- 修改监听设置,允许所有地址访问:
listen-on port 53 { any; };
listen-on-v6 port 53 { any; };
- 允许所有主机查询
allow-query { any; };
include /etc/named.rfc1912.zones 也就是将这些导入这个文件中,是用来解析DNS正向、反向解析全局配置文件,再下面就是模板,复制到最后再来更改
3、编辑正向和反向解析全局配置文件
# 编辑正向和反向解析的全局配置文件
vim /etc/named.rfc1912.zones
# 正向解析区域配置
# "example.com" 是要解析的域名
zone "example.com" IN {
type master; # 类型为主服务器(负责该区域的权威解析)
file "hrz.com"; # 指定正向解析数据文件的名称(通常存放在/var/named/目录)
allow-update { none; }; # 禁止动态更新区域数据(安全设置,生产环境常用)
};
# 反向解析区域配置
# "30.16.172.in-addr.arpa" 是反向解析的网络地址格式
# 对应实际网络为 172.16.30.0/24 网段(IP地址反向书写)
zone "30.16.172.in-addr.arpa" IN {
type master; # 类型为主服务器
file "com.hrz"; # 指定反向解析数据文件的名称
allow-update { none; }; # 禁止动态更新
};
cp -p named.loca
(1)复制模板文件并保持权限
首先进入 DNS 数据文件目录,复制系统提供的模板文件,使用-p
参数保留原文件的所有者、所属组和权限(非常重要,否则 named 服务可能无法读取):
cd /var/named
# 复制正向解析模板文件,命名为我们在配置中指定的hrz.com
cp -p named.localhost hrz.com
# 复制反向解析模板文件,命名为我们在配置中指定的com.hrz
cp -p named.empty com.hrz
(2)编辑正向解析文件
编辑hrz.com
文件,配置域名到 IP 的解析规则:
vim hrz.com
$TTL 1D ; 缓存周期为1天(3600秒×24)
@ IN SOA hrz.example.com. root.example.com. (
2025081101 ; 序列号(版本号),更新文件后建议递增
1D ; refresh(刷新时间):辅助DNS每隔1天同步一次数据
1H ; retry(重试时间):同步失败后,每隔1小时重试一次
1W ; expire(失效时间):超过1周未同步成功,辅助DNS不再提供解析
3H ) ; minimum(最小缓存时间):无效解析结果缓存3小时
NS hrz.example.com. ; 该区域的权威DNS服务器是server.example.com
hrz IN A 172.16.30.20 ; 主机名hrz.example.com对应的IP地址
zs IN A 172.16.30.20 ; 主机名zs.example.com对应的IP地址
说明:
@
代表当前区域(即hrz.com)SOA
记录是区域的起始授权记录,标志该 DNS 服务器是该区域的权威服务器NS
记录指定负责该区域解析的 DNS 服务器A
记录用于将域名解析为 IPv4 地址- hrz和zsIP一样是因为一个ip可以有多个域名
(3)编辑反向解析文件
编辑com.example
文件,配置 IP 到域名的解析规则:
vim com.hrz
$TTL 3H ; 缓存周期为3小时
@ IN SOA hrz.example.com. root.example.com. (
2025081101 ; 序列号,建议与正向解析保持一致或单独递增
1D ; 刷新时间:1天
1H ; 重试时间:1小时
1W ; 失效时间:1周
3H ) ; 最小缓存时间:3小时
NS server.example.com. ; 负责该反向区域的DNS服务器
20 IN PTR hrz.example.com. ; IP地址172.16.30.20对应的域名
20 IN PTR zs.example.com. ; IP地址172.16.30.20对应的域名
说明:
- 反向解析的
@
代表30.16.172.in-addr.arpa
(对应 172.16.30.0/24 网段) PTR
记录用于将 IPv4 地址解析为域名,记录中的数字(10、20)是 IP 地址的最后一段
配置完成后,需要检查配置文件语法并重启 named 服务:
# 重启服务使配置生效
systemctl restart named
systemctl enable named
关闭防火墙
7、在客户端上的网卡配置文件中配置DNS为服务器的IP
vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens160
UUID=78fae162-eb2f-4a4e-b46f-e77f72410498
DEVICE=ens160
ONBOOT=yes
IPADDR=172.16.30.10
PREFIX=24
DNS1=172.16.30.20
保存退出后,重启网卡服务并激活网络连接
systemctl restart network
8、验证
在client上ping服务器server.example.com,看能否ping通
ping hrz.example.com ping hrz.example.com
PING hrz.example.com (192.168.100.10) 56(84) bytes of data.
64 bytes from hrz.example.com (192.168.100.10): icmp_seq=1 ttl=64 time=0.453 ms
64 bytes from hrz.example.com (192.168.100.10): icmp_seq=2 ttl=64 time=0.376 ms
64 bytes from hrz.example.com (192.168.100.10): icmp_seq=3 ttl=64 time=0.318 ms
64 bytes from hrz.example.com (192.168.100.10): icmp_seq=4 ttl=64 time=0.325 ms
或者使用nslookup
辅助DNS
以下是配置辅助 DNS 服务器的详细步骤:
1. 安装必要的软件包
首先安装 BIND DNS 服务器及相关组件:
yum install bind bind-chroot -y
bind
:DNS 服务器核心程序bind-chroot
:提供安全的隔离环境,增强服务器安全性
2. 修改主配置文件
与主 DNS 服务器的主配置文件修改内容一致:
vim /etc/named.conf
listen-on port 53 { any; }; # 监听所有IP的53端口
listen-on-v6 port 53 { any; }; # 监听所有IPv6地址的53端口
allow-query { any; }; # 允许所有主机查询
3. 配置区域解析(全局配置文件)
编辑区域配置文件,设置为从服务器模式:
vim /etc/named.rfc1912.zones
添加以下内容:
# 正向解析区域(从服务器配置)
zone "example.com" IN {
type slave; # 类型为从服务器
file "slaves/hrz.com"; # 同步的解析文件存储路径(相对/var/named/目录)
masters { 172.16.30.10; }; # 指定主DNS服务器的IP地址
};
# 反向解析区域(从服务器配置)
zone "30.16.172.in-addr.arpa" IN {
type slave; # 类型为从服务器
file "slaves/com.hrz"; # 同步的反向解析文件存储路径
masters { 172.16.30.10; }; # 主DNS服务器的IP地址
};
4. 重启并启用服务
# 启动named服务并设置开机自启
systemctl start named
systemctl enable named
# 检查服务状态
systemctl status named
重启服务后自动同步解析文件到slaves/
5. 关闭防火墙和 SELinux
为确保 DNS 服务正常通信,临时关闭防火墙和 SELinux:
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 临时关闭SELinux
setenforce 0
# 永久关闭SELinux(需重启生效)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
配置说明
- 辅助 DNS 服务器会自动从主 DNS 服务器(172.16.30.10)同步解析数据
- 同步的解析文件会保存在
/var/named/slaves/
目录下 - 当主 DNS 服务器的解析记录更新(序列号递增)后,辅助 DNS 会自动同步新数据