搭建和配置 DNS(域名系统)服务是网络管理员的核心技能之一,尤其在搭建内网解析、企业自建 DNS 服务器、或者做公网域名解析转发时都非常有用。下面是以 Linux 环境(如 CentOS、Ubuntu)为基础,从零开始搭建和配置 DNS 服务的详尽教程,使用主流的 BIND(Berkeley Internet Name Domain)作为服务程序。
🗂️ 目录
- DNS 基础知识概述
- BIND 安装与初始化
- 配置主 DNS 服务器(正向解析)
- 配置反向解析
- 搭建从 DNS 服务器
- 配置区域转发器(Forwarder)
- 常用 DNS 工具及测试方法
- 常见错误与排查技巧
- 安全加固建议
- 参考资料与外链
1. 🧠 DNS 基础知识概述
术语 | 解释 |
---|---|
正向解析 | 域名 → IP(A 记录) |
反向解析 | IP → 域名(PTR 记录) |
A 记录 | 映射域名到 IPv4 地址 |
AAAA 记录 | 映射域名到 IPv6 地址 |
MX 记录 | 邮件交换记录 |
NS 记录 | 指定域名使用的权威 DNS |
SOA 记录 | 区域信息:序列号、刷新时间等 |
CNAME 记录 | 别名记录 |
2. 📦 BIND 安装与初始化
🔧 CentOS / RHEL 安装
sudo yum install -y bind bind-utils
🔧 Ubuntu / Debian 安装
sudo apt update
sudo apt install -y bind9 bind9utils bind9-doc
3. 📝 配置主 DNS(正向解析)
🔹 主配置文件路径
位置 | 用途 |
---|---|
/etc/named.conf (CentOS)或 /etc/bind/named.conf (Ubuntu) | 主配置入口 |
/var/named/ 或 /etc/bind/zones/ | 区域数据文件 |
🔹 示例:定义一个区域 example.com
编辑 /etc/named.conf
添加:
zone "example.com" IN {
type master;
file "/var/named/example.com.zone";
allow-update { none; };
};
创建区域文件 /var/named/example.com.zone
:
$TTL 1D
@ IN SOA ns1.example.com. admin.example.com. (
2025062101 ; Serial
1H ; Refresh
15M ; Retry
1W ; Expire
1D ) ; Minimum
@ IN NS ns1.example.com.
ns1 IN A 192.168.1.10
www IN A 192.168.1.20
mail IN A 192.168.1.30
@ IN MX 10 mail.example.com.
4. 🔁 配置反向解析(PTR)
在 named.conf 添加:
zone "1.168.192.in-addr.arpa" IN {
type master;
file "/var/named/192.168.1.zone";
};
反向区域文件内容(/var/named/192.168.1.zone):
$TTL 1D
@ IN SOA ns1.example.com. admin.example.com. (
2025062101 ; Serial
1H ; Refresh
15M ; Retry
1W ; Expire
1D ) ; Minimum
@ IN NS ns1.example.com.
10 IN PTR ns1.example.com.
20 IN PTR www.example.com.
5. 🧬 搭建从 DNS(Slave)
主 DNS 添加允许区域传输 IP:
allow-transfer { 192.168.1.11; }; # Slave IP
从服务器 named.conf 添加:
zone "example.com" IN {
type slave;
masters { 192.168.1.10; }; # Master IP
file "/var/named/slaves/example.com.zone";
};
6. 🧭 配置区域转发器(Forwarder)
用于非权威解析:
options {
forwarders {
8.8.8.8;
1.1.1.1;
};
forward only;
};
7. 🧪 DNS 工具及测试方法
命令 | 用途 |
---|---|
dig example.com | 测试正向解析 |
dig -x 192.168.1.10 | 测试反向解析 |
host example.com | 快速查询 |
nslookup | 简单解析工具 |
rndc reload | 重载配置 |
named-checkconf | 检查主配置语法 |
named-checkzone | 检查区域文件语法 |
8. 🧯 常见错误与排查技巧
问题 | 解决办法 |
---|---|
服务无法启动 | 查看 /var/log/messages 或 journalctl -xe |
区域文件语法错误 | 用 named-checkzone 检查 |
解析失败 | 检查防火墙 firewalld 和 SELinux 设置 |
反向解析无效 | 确认 in-addr.arpa 区域正确配置 |
权限错误 | 确保文件属于 named 用户 |
9. 🔐 安全加固建议
- 限制
allow-query
和allow-transfer
- 使用
chroot
环境运行 BIND(可选) - 关闭递归查询(仅限权威服务器)
- 日志审计开启:
logging
配置项 - 使用
DNSSEC
加密验证(高级选项)
发表回复