凌峰创科服务平台

CentOS DNS服务器如何搭建与配置?

在CentOS系统中搭建DNS服务器是网络管理中常见的需求,无论是为局域网提供域名解析服务,还是作为内部系统的权威服务器,都能有效提升网络访问效率和可控性,本文将详细介绍在CentOS上配置DNS服务器的完整流程,包括环境准备、安装软件、主配置文件编写、区域文件创建、服务启动及测试验证等关键步骤,并通过表格形式清晰呈现核心配置参数,最后附相关FAQs解答常见问题。

CentOS DNS服务器如何搭建与配置?-图1
(图片来源网络,侵删)

环境准备与软件安装

在开始配置前,需确保CentOS系统已更新至最新状态,并安装必要的DNS服务软件包,CentOS默认使用BIND(Berkeley Internet Name Domain)作为DNS服务器软件,可通过yum包管理器安装,首先执行系统更新:

sudo yum update -y

随后安装BIND及其相关工具,包括bind、bind-utils(提供dnsquery、dig等测试工具)和bind-chroot(可选,用于增强安全性,将DNS服务运行在chroot环境中):

sudo yum install bind bind-utils bind-chroot -y

安装完成后,检查BIND服务状态:

systemctl status named

若未启动,可先使用systemctl start named启动服务,并通过systemctl enable named设置开机自启。

主配置文件(named.conf)修改

BIND的主配置文件位于/etc/named.conf(若安装bind-chroot,则实际路径为/var/named/chroot/etc/named.conf),是定义DNS服务器行为的核心文件,编辑该文件(建议使用vim或nano):

vim /etc/named.conf
```  包括全局选项、区域声明等关键部分,以下是核心配置说明及示例:  
#### 1. 全局选项(options)  
定义服务器的基本行为,如监听地址、允许查询的客户端、数据文件路径等,需修改以下参数:  
- `listen-on port 53 { any; };`:监听所有网络接口的53端口(默认仅监听localhost,生产环境建议根据需求限制为内网IP,如`{ 192.168.1.0/24; };`)。  
- `allow-query { any; };`:允许所有客户端查询(默认仅允许localhost,生产环境建议限制为内网网段,如`{ 192.168.1.0/24; localhost; };`)。  
- `directory "/var/named";`:区域数据文件存放路径(与bind-chroot环境一致时无需修改)。  
- `recursion yes;`:允许递归查询(适用于缓存DNS服务器,若为权威服务器可设为no)。  
#### 2. 区域声明(zone)  
定义服务器管理的权威区域,包括正向区域(域名到IP)和反向区域(IP到域名),以下示例添加一个正向区域`example.com`和反向区域`1.168.192.in-addr.arpa`(假设内网网段为192.168.1.0/24):  
```bash
zone "example.com" IN {
    type master;        # 表示主DNS服务器
    file "example.com.zone";  # 区域数据文件名,需存放在/var/named/目录下
    allow-update { none; };   # 禁止动态更新(安全考虑)
};
zone "1.168.192.in-addr.arpa" IN {
    type master;
    file "192.168.1.db";      # 反向区域文件名
    allow-update { none; };
};

配置完成后,保存文件并检查语法错误:

named-checkconf
```  则配置语法正确;若有错误,根据提示修改`named.conf`。
### 三、区域数据文件创建
区域数据文件存储具体的域名解析记录,需在`/var/named`目录下创建,并设置正确的权限(属主为named:named),以下为正向区域文件`example.com.zone`示例:  
```bash
$TTL 86400      ; 默认TTL(24小时)
@   IN  SOA ns1.example.com. admin.example.com. (
        2025101501  ; 序列号(修改记录时需递增)
        3600        ; 刷新间隔(1小时)
        1800        ; 重试间隔(30分钟)
        604800      ; 过期时间(7天)
        86400       ; 负缓存TTL(24小时)
)
@       IN  NS  ns1.example.com.   ; 名称服务器记录
ns1     IN  A   192.168.1.10       ; ns1的IP地址
www     IN  A   192.168.1.20       www服务器的IP
mail    IN  A   192.168.1.30       邮件服务器IP
@       IN  MX  10 mail.example.com. ; 邮件交换记录,优先级10

反向区域文件168.1.db示例(对应192.168.1.0/24网段):

$TTL 86400
@   IN  SOA ns1.example.com. admin.example.com. (
        2025101501
        3600
        1800
        604800
        86400
)
@       IN  NS  ns1.example.com.
10      IN  PTR ns1.example.com.   ; 192.168.1.10反向解析
20      IN  PTR www.example.com.    ; 192.168.1.20反向解析
30      IN  PTR mail.example.com.   ; 192.168.1.30反向解析

创建文件后,设置权限:

chown named:named /var/named/example.com.zone
chown named:named /var/named/192.168.1.db

使用named-checkzone检查区域文件语法:

named-checkzone example.com /var/named/example.com.zone
named-checkzone 1.168.192.in-addr.arpa /var/named/192.168.1.db

若输出“OK”则表示文件正确。

防火墙与SELinux配置

CentOS默认启用防火墙(firewalld)和SELinux,需开放DNS服务所需的53端口(TCP/UDP)。

防火墙配置

firewall-cmd --permanent --add-service=dns
firewall-cmd --reload

SELinux配置

若SELinux为 enforcing 模式,需调整策略允许BIND绑定非默认端口或访问文件,或设置为 permissive 模式(临时关闭,不记录日志):

setsebool -P named_write_master_zones on  # 允许named写入主区域文件

可通过sestatus查看SELinux状态。

服务启动与测试

完成所有配置后,重启named服务加载新配置:

systemctl restart named
systemctl status named    # 确认服务运行正常

使用以下工具测试DNS解析功能:

使用dig测试正向解析

dig @192.168.1.10 www.example.com

预期输出包含ANSWER SECTION,显示www.example.com. IN A 192.168.1.20

使用dig测试反向解析

dig @192.168.1.10 -x 192.168.1.20

预期输出ANSWER SECTION包含1.168.192.in-addr.arpa. IN PTR www.example.com.

使用nslookup测试交互式查询

nslookup
> server 192.168.1.10
> www.example.com

若返回正确IP,则DNS服务器配置成功。

核心配置参数说明表

配置项 作用说明 示例值
listen-on 指定监听的IP地址和端口 { any; };(所有接口)
allow-query 允许查询的客户端IP范围 { 192.168.1.0/24; };(内网)
directory 区域数据文件存放目录 "/var/named"
zone 定义权威区域,包含类型、主从服务器、数据文件路径等 zone "example.com" IN { ... }
type 区域类型,master(主)、slave(从)、forward(转发)等 type master;
file 区域数据文件名(需在directory目录下存在) "example.com.zone"
SOA记录 起始授权机构,包含序列号、刷新时间等关键信息 @ IN SOA ns1.example.com. ...
NS记录 名称服务器记录,指定解析该域名的DNS服务器 www IN NS ns1.example.com.
A记录 主机记录,将域名映射到IPv4地址 www IN A 192.168.1.20
MX记录 邮件交换记录,指定邮件服务器及优先级 mail IN MX 10 mail.example.com.
PTR记录 反向解析记录,将IP映射到域名(需在反向区域文件中定义) 20 IN PTR www.example.com.

相关问答FAQs

问题1:修改DNS配置后,客户端无法解析域名,可能的原因有哪些?
解答:常见原因包括:① named服务未重启或重启失败,可通过systemctl status named检查服务状态;② 防火墙或SELinux阻止53端口访问,需执行firewall-cmd --list-all确认是否开放DNS服务,以及getsebool -a | grep named检查SELinux策略;③ 区域文件权限错误,文件属主需为named:named,可通过ls -l /var/named/确认;④ 客户端DNS配置未指向新服务器,需检查客户端网络设置中的DNS服务器IP;⑤ 区域文件序列号未更新导致从服务器同步失败(主服务器场景无需考虑)。

问题2:如何配置DNS转发,将无法解析的请求转发到上游DNS服务器?
解答:在/etc/named.confoptions段落中添加forwarders参数,指定上游DNS服务器IP(如公共DNS 8.8.8.8或114.114.114.114),示例配置如下:

options {
    ...  # 其他配置
    forwarders { 8.8.8.8; 114.114.114.114; };  # 转发服务器列表
    forward only;  # 仅转发,不递归查询(设为first则优先递归,失败后转发)
};

配置完成后执行systemctl restart named重启服务,此时客户端请求本地DNS无法解析的域名时,将自动转发至上游服务器。

分享:
扫描分享到社交APP
上一篇
下一篇