Linux配置DNS服务器详解
DNS服务器
DNS(Domain Name System)是互联网的核心服务之一,负责将域名转换为IP地址,在Linux系统中,常用的DNS服务器软件包括BIND(Berkeley Internet Name Domain)、dnsmasq和Unbound,本文以BIND为例,详细介绍DNS服务器的配置流程。
安装BIND软件
不同Linux发行版的安装命令:
| 发行版 | 安装命令 |
|---|---|
| Ubuntu/Debian | sudo apt update && sudo apt install bind9 |
| CentOS/RHEL | sudo yum install bind |
| Fedora | sudo dnf install bind |
安装后目录结构
/etc/bind/:主配置文件目录/var/cache/bind/:缓存文件目录/var/named/:CHROOT隔离环境目录(CentOS特有)
配置文件解析
主配置文件 /etc/bind/named.conf
关键配置项说明:

| 参数 | 作用 | 示例值 |
|---|---|---|
listenon |
监听网络接口 | listenon port 53 { any; } |
allowquery |
允许查询的客户端 | allowquery { any; }; |
forwarders |
转发器配置 | forwarders { 8.8.8.8; }; |
directory |
区域文件存储路径 | directory "/var/cache/bind/"; |
正向区域文件 db.example.com
$TTL 86400 ; 生存时间(秒)
@ IN SOA ns1.example.com. admin.example.com. (
2023100101 ; 序列号
3600 ; 刷新时间
1800 ; 重试间隔
1209600 ; 过期时间
86400 ) ; 最小TTL
@ IN NS ns1.example.com.
@ IN A 192.168.1.100
www IN A 192.168.1.100
反向区域文件 db.192.168.1
$TTL 86400
@ IN SOA ns1.example.com. admin.example.com. (
2023100101
3600
1800
1209600
86400 )
@ IN NS ns1.example.com.
100 IN PTR ns1.example.com.
配置步骤实操
修改主配置文件
# 编辑named.conf.local(Ubuntu)或named.conf(CentOS)
sudo nano /etc/bind/named.conf.options
# 添加以下内容:
options {
directory "/var/cache/bind";
recursion yes;
allowquery { any; };
forwarders { 8.8.8.8; 8.8.4.4; };
};
创建区域文件
# 创建正向解析区域 sudo cp /etc/bind/db.local /etc/bind/db.example.com nano /etc/bind/db.example.com # 按上述模板修改 # 创建反向解析区域 sudo cp /etc/bind/db.127 /etc/bind/db.192.168.1 nano /etc/bind/db.192.168.1 # 按上述模板修改
配置区域文件
在named.conf.local中添加:
zone "example.com" {
type master;
file "/etc/bind/db.example.com";
};
zone "192.168.1.0/24" {
type master;
file "/etc/bind/db.192.168.1";
};
安全加固配置
限制递归查询
修改named.conf.options:
options {
...
allowrecursion { 192.168.1.0/24; };
};
启用TCP封装随机端口
在named.conf.options添加:

options {
...
tcpclients { localnets; };
};
CHROOT隔离(仅CentOS)
# 安装chroot环境 sudo yum install bindutils sudo yum install bindchroot # 配置SELinux sudo setsebool P named_write_master_zones on
测试与验证
启动服务
# Ubuntu sudo systemctl restart bind9 # CentOS sudo systemctl restart named
测试工具使用
# 正向解析测试 dig @localhost www.example.com # 反向解析测试 dig x 192.168.1.100 @localhost # 递归查询测试 dig www.google.com @localhost
日志查看
# 查看日志文件 sudo tail f /var/log/syslog # Ubuntu sudo tail f /var/log/messages # CentOS
常见问题排查
| 现象 | 原因分析 | 解决方案 |
|---|---|---|
| 无法解析本地域名 | 区域文件配置错误 | 检查SOA记录和NS记录 |
| 外部域名解析失败 | 未配置转发器 | 添加forwarders配置 |
| 服务无法启动 | 配置文件语法错误 | 使用namedcheckconf检测 |
| 反向解析异常 | PTR记录缺失 | 补充反向区域文件 |
相关问题与解答
Q1:如何检查BIND服务是否正常运行?
A:执行以下命令查看服务状态:
# Ubuntu systemctl status bind9 # CentOS systemctl status named
若显示active (running)则表示服务正常,也可通过netstat tulnp | grep :53检查53端口监听状态。
Q2:如何配置DNS主从同步?
A:需在主服务器named.conf添加:

zone "example.com" {
type master;
file "/etc/bind/db.example.com";
notify yes;
alsonotify { slave.example.com; };
};
在从服务器配置:
zone "example.com" {
type slave;
masters { 192.168.1.100; };
file "/var/cache/bind/db.example.com";
来源互联网整合,作者:小编,如若转载,请注明出处:https://www.aiboce.com/ask/202605.html