文章目录
- Linux搭建DNS主从服务器
-
- 一、DNS概述
- 二、搭建DNS主从服务器详细步骤
-
- 环境准备
- [1. 主DNS服务器配置](#1. 主DNS服务器配置)
-
- [1.1 安装BIND软件包](#1.1 安装BIND软件包)
- [1.2 配置主配置文件named.conf](#1.2 配置主配置文件named.conf)
- [1.3 创建区域文件配置](#1.3 创建区域文件配置)
- [1.4 创建正向区域文件](#1.4 创建正向区域文件)
- [1.5 创建反向区域文件](#1.5 创建反向区域文件)
- [1.6 设置文件权限和所有权](#1.6 设置文件权限和所有权)
- [1.7 检查配置文件语法](#1.7 检查配置文件语法)
- [1.8 启动并启用BIND服务](#1.8 启动并启用BIND服务)
- [2. 从DNS服务器配置](#2. 从DNS服务器配置)
-
- [2.1 安装BIND软件包](#2.1 安装BIND软件包)
- [2.2 配置主配置文件named.conf](#2.2 配置主配置文件named.conf)
- [2.3 创建区域文件配置](#2.3 创建区域文件配置)
- [2.4 检查配置文件语法](#2.4 检查配置文件语法)
- [2.5 启动并启用BIND服务](#2.5 启动并启用BIND服务)
- [3. 防火墙配置](#3. 防火墙配置)
- [4. 测试DNS服务器](#4. 测试DNS服务器)
-
- [4.1 在主服务器上测试](#4.1 在主服务器上测试)
- [4.2 在从服务器上测试](#4.2 在从服务器上测试)
- [4.3 检查区域传输](#4.3 检查区域传输)
- 三、常见问题及解决方案
-
- [1. 区域传输失败](#1. 区域传输失败)
- [2. DNS查询不响应](#2. DNS查询不响应)
- [3. 序列号不匹配](#3. 序列号不匹配)
- [4. 权限问题](#4. 权限问题)
- [5. 反向解析不工作](#5. 反向解析不工作)
- 四、维护与管理
-
- [1. 常用命令](#1. 常用命令)
- [2. 日志管理](#2. 日志管理)
- [3. 区域文件更新流程](#3. 区域文件更新流程)
- 五、安全最佳实践
- 六、总结
- 通过合理配置和维护,DNS主从服务器能够为企业网络或互联网应用提供高效、可靠的域名解析服务。
Linux搭建DNS主从服务器
一、DNS概述
DNS(Domain Name System,域名系统)是互联网的一项核心服务,它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。
DNS基本概念
- 域名空间:采用层次树状结构,从根域向下延伸
- 资源记录:DNS数据库中的基本数据单元
- 名称服务器:存储域名空间信息的服务器
- 解析器:客户端用于查询DNS服务器的程序
DNS服务器类型
- 主DNS服务器(Master):权威服务器,维护特定区域的原始记录
- 从DNS服务器(Slave):通过区域传输从主服务器获取数据
- 缓存DNS服务器:仅缓存查询结果,不管理任何区域
- 转发DNS服务器:将查询请求转发到其他DNS服务器
DNS记录类型
- A记录:将主机名映射到IPv4地址
- AAAA记录:将主机名映射到IPv6地址
- CNAME记录:别名记录
- MX记录:邮件交换记录
- NS记录:名称服务器记录
- PTR记录:反向解析记录
- SOA记录:起始授权机构记录
二、搭建DNS主从服务器详细步骤
环境准备
- 主服务器:192.168.1.100(hostname: ns1.example.com)
- 从服务器:192.168.1.101(hostname: ns2.example.com)
- 域名:example.com
- 操作系统:CentOS 7/RHEL 7或Ubuntu 20.04 LTS
1. 主DNS服务器配置
1.1 安装BIND软件包
CentOS/RHEL:
bash
sudo yum install bind bind-utils -y
Ubuntu/Debian:
bash
sudo apt-get install bind9 bind9utils bind9-doc -y
1.2 配置主配置文件named.conf
编辑/etc/named.conf
(CentOS)或/etc/bind/named.conf
(Ubuntu):
bash
options {
listen-on port 53 { 127.0.0.1; 192.168.1.100; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { localhost; 192.168.1.0/24; };
allow-transfer { 192.168.1.101; }; # 只允许从服务器传输
recursion no;
dnssec-enable yes;
dnssec-validation yes;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
1.3 创建区域文件配置
在/etc/named.rfc1912.zones
(CentOS)或/etc/bind/named.conf.local
(Ubuntu)末尾添加:
bash
zone "example.com" IN {
type master;
file "example.com.zone";
allow-update { none; };
allow-transfer { 192.168.1.101; };
};
zone "1.168.192.in-addr.arpa" IN {
type master;
file "192.168.1.rev";
allow-update { none; };
allow-transfer { 192.168.1.101; };
};
1.4 创建正向区域文件
创建/var/named/example.com.zone
(CentOS)或/etc/bind/zones/example.com.zone
(Ubuntu):
bash
$TTL 86400
@ IN SOA ns1.example.com. admin.example.com. (
2023071701 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ; Minimum TTL
)
@ IN NS ns1.example.com.
@ IN NS ns2.example.com.
@ IN A 192.168.1.200
ns1 IN A 192.168.1.100
ns2 IN A 192.168.1.101
www IN A 192.168.1.200
mail IN A 192.168.1.210
@ IN MX 10 mail.example.com.
1.5 创建反向区域文件
创建/var/named/192.168.1.rev
(CentOS)或/etc/bind/zones/192.168.1.rev
(Ubuntu):
bash
$TTL 86400
@ IN SOA ns1.example.com. admin.example.com. (
2023071701 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ; Minimum TTL
)
@ IN NS ns1.example.com.
@ IN NS ns2.example.com.
100 IN PTR ns1.example.com.
101 IN PTR ns2.example.com.
200 IN PTR www.example.com.
210 IN PTR mail.example.com.
1.6 设置文件权限和所有权
bash
chown root:named /var/named/example.com.zone
chown root:named /var/named/192.168.1.rev
chmod 640 /var/named/example.com.zone
chmod 640 /var/named/192.168.1.rev
1.7 检查配置文件语法
bash
named-checkconf
named-checkzone example.com /var/named/example.com.zone
named-checkzone 1.168.192.in-addr.arpa /var/named/192.168.1.rev
1.8 启动并启用BIND服务
bash
systemctl start named
systemctl enable named
2. 从DNS服务器配置
2.1 安装BIND软件包
同主服务器安装步骤
2.2 配置主配置文件named.conf
与主服务器类似,但修改以下部分:
bash
options {
listen-on port 53 { 127.0.0.1; 192.168.1.101; };
allow-query { localhost; 192.168.1.0/24; };
allow-transfer { none; }; # 从服务器通常不允许传输
};
2.3 创建区域文件配置
在/etc/named.rfc1912.zones
或/etc/bind/named.conf.local
中添加:
bash
zone "example.com" IN {
type slave;
file "slaves/example.com.zone";
masters { 192.168.1.100; };
};
zone "1.168.192.in-addr.arpa" IN {
type slave;
file "slaves/192.168.1.rev";
masters { 192.168.1.100; };
};
2.4 检查配置文件语法
bash
named-checkconf
2.5 启动并启用BIND服务
bash
systemctl start named
systemctl enable named
3. 防火墙配置
CentOS/RHEL:
bash
firewall-cmd --permanent --add-port=53/tcp
firewall-cmd --permanent --add-port=53/udp
firewall-cmd --reload
Ubuntu:
bash
ufw allow 53/tcp
ufw allow 53/udp
ufw reload
4. 测试DNS服务器
4.1 在主服务器上测试
bash
dig @192.168.1.100 example.com
dig @192.168.1.100 -x 192.168.1.100
4.2 在从服务器上测试
bash
dig @192.168.1.101 example.com
dig @192.168.1.101 -x 192.168.1.101
4.3 检查区域传输
查看从服务器上的/var/named/slaves/
目录,确认区域文件已传输。
bash
ls -l /var/named/slaves/
三、常见问题及解决方案
1. 区域传输失败
问题现象:从服务器无法获取区域文件
解决方案:
- 检查主服务器
allow-transfer
设置 - 检查从服务器
masters
IP是否正确 - 检查防火墙是否阻止了TCP 53端口
- 查看日志
/var/log/messages
(CentOS)或/var/log/syslog
(Ubuntu)
2. DNS查询不响应
问题现象:dig命令无响应或超时
解决方案:
- 检查named服务是否运行
systemctl status named
- 检查
listen-on
是否包含正确的IP - 检查
allow-query
是否包含客户端IP段 - 检查防火墙设置
3. 序列号不匹配
问题现象:从服务器数据未更新
解决方案:
- 确保每次修改主服务器区域文件后增加SOA记录中的序列号
- 在从服务器上执行
rndc refresh example.com
强制刷新
4. 权限问题
问题现象:named服务无法读取区域文件
解决方案:
- 确保区域文件所有者为root:named
- 确保区域文件权限为640
- 检查SELinux状态(CentOS)
setenforce 0
临时关闭测试
5. 反向解析不工作
问题现象:PTR查询无结果
解决方案:
- 检查反向区域文件是否正确
- 确保每个A记录都有对应的PTR记录
- 检查反向区域是否正确定义在named.conf中
四、维护与管理
1. 常用命令
- 重新加载配置:
rndc reload
或systemctl reload named
- 重新加载特定区域:
rndc reload example.com
- 强制区域传输:
rndc retransfer example.com
- 查看统计信息:
rndc stats
- 清空缓存:
rndc flush
2. 日志管理
BIND日志通常位于:
- CentOS/RHEL:
/var/log/messages
- Ubuntu:
/var/log/syslog
可以配置更详细的日志记录,在named.conf
中添加:
bash
logging {
channel query.log {
file "/var/log/named/query.log" versions 3 size 20m;
severity info;
print-time yes;
print-category yes;
};
category queries { query.log; };
};
3. 区域文件更新流程
- 编辑区域文件
- 增加SOA序列号(建议使用YYYYMMDDNN格式)
- 检查语法:
named-checkzone
- 重新加载区域:
rndc reload example.com
- 验证从服务器是否自动更新
五、安全最佳实践
- 禁用递归查询 :对权威DNS服务器设置
recursion no;
- 限制区域传输:仅允许从服务器IP
- 使用TSIG密钥:对区域传输进行认证
- 启用DNSSEC:提供数据来源验证和数据完整性保护
- 定期更新BIND:及时应用安全补丁
- 使用非root用户运行 :
named -u named
- 限制查询 :通过
allow-query
限制可查询的客户端 - 隐藏版本信息 :在
options
中添加version "unknown";
六、总结
搭建DNS主从服务器是构建可靠域名解析服务的基础。通过本指南,我们完成了:
- 安装和配置BIND DNS服务器软件
- 设置主DNS服务器和从DNS服务器
- 配置正向和反向解析区域
- 实现区域自动传输
- 处理常见问题并实施安全最佳实践
DNS主从架构提供了冗余和负载均衡,当主服务器不可用时,从服务器可以继续提供解析服务。为确保服务稳定性,应:
- 定期检查DNS服务器状态
- 监控区域传输是否正常
- 及时更新软件和安全补丁
- 定期审核DNS记录
- 实施备份策略