CentOS 7 配置 DNS
CentOS 7是一款广泛使用的Linux发行版,它的稳定性和灵活性使得它在企业和个人用户中都很受欢迎,在网络环境中,DNS(Domain Name System)扮演着至关重要的角色,负责将域名解析为IP地址,使用户能够通过易于记忆的域名访问互联网资源,本文将详细介绍如何在CentOS 7上安装和配置BIND(Berkeley Internet Name Domain)服务,以实现DNS服务器的功能。

一、安装与配置DNS
1. 安装 BIND
需要安装 BIND,这是最常用的开源 DNS 服务器软件包,使用以下命令进行安装:
- sudo yum install bind bindutils y
bind
是 DNS 服务器的主程序,而bindutils
包含了用于 DNS 查询的工具,如dig
和nslookup
。
2. 修改主配置文件
BIND 的主配置文件位于/etc/named.conf
,使用文本编辑器打开该文件:
- sudo vi /etc/named.conf
在该文件中,找到类似如下的配置项:

- options {
- listenon port 53 { any; };
- allowquery { any; };
- recursion yes;
- dnssecenable yes;
- dnssecvalidation yes;
- bindkeysfile "/etc/named.iscdlv.key";
- managedkeysdirectory "/var/named/dynamic";
- pidfile "/run/named/named.pid";
- sessionkeyfile "/run/named/session.key";
- };
这些配置项的含义如下:
listenon port 53 { any; }:允许 BIND 在所有接口的 53 端口监听 DNS 请求。
allowquery { any; }:允许任何主机查询。
recursion yes;:启用递归查询。
dnssecenable yes; 和 dnssecvalidation yes;:启用 DNSSEC(DNS Security Extensions)。
bindkeysfile 和managedkeysdirectory:指定密钥文件和动态管理目录。

pidfile 和sessionkeyfile:指定进程 ID 文件和会话密钥文件。
3. 配置正向解析区域文件
正向解析的作用是根据主机名(域名)查找到对应的 IP 地址,编辑区域配置文件/etc/named.rfc1912.zones
,添加以下内容:
- zone "example.com" IN {
- type master;
- file "forward.example.com";
- allowupdate { none; };
- };
创建对应的区域数据文件/var/named/forward.example.com
:
- sudo vi /var/named/forward.example.com
添加以下内容:
- $TTL 86400
- @ IN SOA ns1.example.com. admin.example.com. (
- 2023101001 ; Serial
- 3600 ; Refresh
- 1800 ; Retry
- 604800 ; Expire
- 86400 ; Minimum TTL
- )
- IN NS ns1.example.com.
- IN A 192.168.1.100
- ns1 IN A 192.168.1.100
- www IN A 192.168.1.100
这些记录的含义如下:
$TTL 86400:生存周期为 1 天。
@ IN SOA ...:起始授权记录,包含主域名服务器和域管理员的电子邮件。
IN NS ns1.example.com.:指定域名服务器。
IN A 192.168.1.100:将域名映射到 IP 地址。
4. 配置反向解析区域文件
反向解析的作用是根据 IP 地址查找到对应的主机名(域名),编辑区域配置文件/etc/named.rfc1912.zones
,添加以下内容:
- zone "1.168.192.inaddr.arpa" IN {
- type master;
- file "reverse.example.com";
- allowupdate { none; };
- };
创建对应的区域数据文件/var/named/reverse.example.com
:
- sudo vi /var/named/reverse.example.com
添加以下内容:
- $TTL 86400
- @ IN SOA ns1.example.com. admin.example.com. (
- 2023101001 ; Serial
- 3600 ; Refresh
- 1800 ; Retry
- 604800 ; Expire
- 86400 ; Minimum TTL
- )
- IN NS ns1.example.com.
- IN PTR ns1.example.com.
- 100 IN PTR www.example.com.
这些记录的含义如下:
$TTL 86400:生存周期为 1 天。
@ IN SOA ...:起始授权记录,包含主域名服务器和域管理员的电子邮件。
IN NS ns1.example.com.:指定域名服务器。
IN PTR ns1.example.com.:将 IP 地址映射回域名。
5. 启动 BIND 服务
确保所有的配置都正确无误后,启动 BIND 服务:
- sudo systemctl enable named
- sudo systemctl start named
检查 BIND 服务的状态:
- sudo systemctl status named
这将显示 BIND 服务的当前状态,确保它是活跃的(running)。
6. 测试 DNS 解析
使用dig
命令来测试正向和反向解析是否配置成功:
- dig @localhost www.example.com
- dig x @localhost 192.168.1.100
如果配置正确,你应该能够看到相应的解析结果。
二、常见问题解答(FAQs)
Q1:如何更改 BIND 监听的端口号?
A1:可以通过修改 BIND 的主配置文件/etc/named.conf
,找到类似如下的配置项:
- options {
- listenon port 53 { any; };
- ...
- };
将port 53
改为你想要的端口号,例如port 53535
,然后重新启动 BIND 服务即可。
Q2:如何配置 BIND 只对特定 IP 地址或子网进行响应?
A2:可以通过修改 BIND 的主配置文件/etc/named.conf
,找到类似如下的配置项:
- options {
- allowquery { any; };
- ...
- };
将any
改为特定的 IP 地址或子网,例如192.168.1.0/24
,然后重新启动 BIND 服务即可,这样,BIND 只会对来自该子网的查询进行响应。