Linux DNS服务器安装后无法解析怎么办?
- 云服务器
- 2025-12-12
- 4
在Linux系统中搭建DNS服务器通常使用BIND(Berkeley Internet Name Domain)软件,它是目前最广泛使用的DNS服务器软件之一,以下是详细的安装与配置步骤,以CentOS 7系统为例,其他发行版如Ubuntu的命令略有不同,但核心配置逻辑一致。
安装BIND软件包
首先需要更新系统软件包列表并安装BIND相关组件,打开终端,执行以下命令:
sudo yum update y # 更新系统软件包 sudo yum install bind bindutils y # 安装BIND主程序及管理工具
bind是DNS服务器核心软件,bindutils包含dig、nslookup等DNS测试工具,安装完成后,启动BIND服务并设置开机自启:

配置DNS服务器
BIND的主要配置文件位于/etc/named.conf,该文件定义了服务器的全局参数和区域文件引用,在修改配置前,建议先备份原始文件:
sudo cp /etc/named.conf /etc/named.conf.bak
修改主配置文件
使用vim或nano编辑器打开/etc/named.conf:
sudo vim /etc/named.conf
关键配置项如下:

- options段落:设置监听地址、允许查询的客户端等。 options { listenon port 53 { any; }; # 监听所有网络接口(生产环境建议指定具体IP) listenonv6 port 53 { ::1; }; # 监听IPv6 directory "/var/named"; # 区域文件存放目录 dumpfile "/var/named/data/cache_dump.db"; statisticsfile "/var/named/data/named_stats.txt"; memstatisticsfile "/var/named/data/named_mem_stats.txt"; allowquery { any; }; # 允许所有客户端查询(生产环境建议限制网段) recursion yes; # 启用递归查询 };
- logging段落:定义日志记录方式(默认即可)。
- zone段落:定义DNS区域,添加一个正向解析区域example.com和反向解析区域168.192.inaddr.arpa(假设内网网段为192.168.1.0/24): zone "example.com" IN { type master; # 主DNS服务器 file "example.com.zone"; # 区域文件名 allowupdate { none; }; # 禁止动态更新 }; zone "1.168.192.inaddr.arpa" IN { type master; file "192.168.1.rev"; allowupdate { none; }; };
创建区域文件
区域文件存储具体的DNS记录,进入/var/named目录(需确保属组为named):
cd /var/named sudo cp named.localhost example.com.zone # 复制模板文件 sudo cp named.localhost 192.168.1.rev sudo chown named:named example.com.zone 192.168.1.rev # 修改所有者
(1)正向区域文件示例(example.com.zone)
$TTL 1D @ IN SOA ns1.example.com. admin.example.com. ( 2025100101 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum IN NS ns1.example.com. IN MX 10 mail.example.com. ns1 IN A 192.168.1.10 www IN A 192.168.1.20 mail IN A 192.168.1.30
- $TTL:默认生存时间(1天)。
- SOA:起始授权机构记录,包含序列号(serial,修改后需递增)、刷新时间等。
- NS:域名服务器记录,指向ns1.example.com。
- MX:邮件交换记录,优先级为10。
- A:主机地址记录,将域名映射到IPv4地址。
(2)反向区域文件示例(192.168.1.rev)
$TTL 1D @ IN SOA ns1.example.com. admin.example.com. ( 2025100101 1D 1H 1W 3H ) IN NS ns1.example.com. 10 IN PTR ns1.example.com. 20 IN PTR www.example.com. 30 IN PTR mail.example.com.
- PTR:指针记录,将IP地址映射到域名,需与正向区域的A记录对应。
配置防火墙与SELinux
防火墙设置
允许DNS服务(TCP/UDP 53端口):

sudo firewallcmd permanent addservice=dns sudo firewallcmd reload
SELinux配置
若SELinux启用(默认为 enforcing 模式),需调整策略:
sudo setsebool P named_write_master_zones on # 允许named写入区域文件 sudo semanage port a t dns_port_t p udp 53 # 添加UDP 53端口 sudo semanage port a t dns_port_t p tcp 53 # 添加TCP 53端口
测试DNS服务
检查配置文件语法
sudo namedcheckconf # 检查主配置文件 sudo namedcheckzone example.com /var/named/example.com.zone # 检查正向区域 sudo namedcheckzone 1.168.192.inaddr.arpa /var/named/192.168.1.rev # 检查反向区域
使用工具测试
- 使用dig测试正向解析: dig @192.168.1.10 www.example.com
- 使用dig测试反向解析: dig @192.168.1.10 x 192.168.1.20
- 使用nslookup交互式测试: nslookup > server 192.168.1.10 > www.example.com
常见问题排查
- 服务无法启动:检查/var/log/messages或journalctl u named查看错误日志,常见问题包括配置文件语法错误、区域文件权限问题(需为named:named)。
- 解析失败:确认防火墙和SELinux设置,检查区域文件中的serial号是否递增,A记录与PTR记录是否对应。
相关问答FAQs
问题1:如何为DNS服务器配置转发,将无法解析的请求转发到上游DNS?
解答:在/etc/named.conf的options段落中添加forwarders选项,
options { forwarders { 8.8.8.8; 114.114.114.114; }; # 转发到Google和114DNS forward only; # 强制转发,不进行递归查询(可选) };
修改后重启named服务即可生效。
问题2:如何为局域网内其他客户端配置DNS服务器?
解答:在客户端的网卡配置文件中(如CentOS的/etc/sysconfig/networkscripts/ifcfgeth0),将DNS1设置为DNS服务器的IP地址:
DNS1=192.168.1.10
对于Windows客户端,进入“网络设置”→“更改适配器选项”→右键网卡属性→“Internet协议版本4(TCP/IPv4)”→属性,手动输入DNS服务器地址168.1.10,配置完成后,使用ipconfig /flushdns(Windows)或systemctl restart NetworkManager(Linux)刷新缓存。