DNS 服务器搭建指导
概述
本文档介绍如何搭建和配置 DNS 服务器,为 openUBMC BMC 设备提供域名解析服务。通过配置 DNS 服务器,可以实现设备名称与 IP 地址的映射,方便设备管理和访问。
认识 DNS
DNS 简介
DNS (Domain Name System) 是一种将域名转换为 IP 地址的分布式数据库系统。它使用层次化的命名结构,将人类可读的域名(如 www.openubmc.cn)转换为机器可读的 IP 地址(如 192.168.1.100)。
DNS 架构
DNS 采用分层的树状结构,包含以下组成部分:
- 根域名服务器 - DNS 系统的最高层
- 顶级域名服务器 - 管理 .com、.org、.cn 等顶级域名
- 权威域名服务器 - 存储特定域名的 DNS 记录
- 递归解析器 - 负责解析客户端的 DNS 查询
- 缓存服务器 - 缓存 DNS 查询结果,提高解析效率
DNS 记录类型
| 记录类型 | 名称 | 描述 |
|---|---|---|
| A | 地址记录 | 将域名映射到 IPv4 地址 |
| AAAA | 地址记录 | 将域名映射到 IPv6 地址 |
| CNAME | 别名记录 | 将域名映射到另一个域名 |
| MX | 邮件交换记录 | 指定邮件服务器 |
| NS | 域名服务器记录 | 指定 DNS 服务器 |
| PTR | 反向记录 | 将 IP 地址映射到域名 |
| SRV | 服务记录 | 指定特定服务的服务器 |
| TXT | 文本记录 | 存储文本信息 |
DNS 查询过程
- 客户端向 DNS 服务器发送查询请求。
- DNS 服务器检查本地缓存。
- 如果缓存中没有,DNS 服务器向根域名服务器发起查询。
- 根域名服务器返回顶级域名服务器地址。
- DNS 服务器向顶级域名服务器发起查询。
- 顶级域名服务器返回权威域名服务器地址。
- DNS 服务器向权威域名服务器发起查询。
- 权威域名服务器返回最终解析结果。
- DNS 服务器将结果返回给客户端并缓存。
环境要求
硬件要求
- CPU:双核及以上
- 内存:2GB 及以上
- 存储:20GB 及以上
软件要求
- 操作系统:Linux(推荐 Ubuntu 20.04、CentOS 8 及以上)
- DNS 服务器软件:BIND 9.x
网络要求
- 静态 IP 地址
- 网络连通性
- 防火墙开放 DNS 端口(UDP 53、TCP 53)
权限要求
- root 权限或 sudo 权限
安装 DNS 服务器
Ubuntu/Debian 系统
bash
# 更新软件包列表
sudo apt-get update
# 安装 BIND9
sudo apt-get install bind9 bind9utils bind9-doc
# 验证安装
named -v启动服务
bash
# 启动 named 服务
sudo systemctl start named
# 设置开机自启动
sudo systemctl enable named
# 检查服务状态
sudo systemctl status named配置 DNS 服务器
认识 BIND 配置文件
BIND9 的主要配置文件位于 /etc/bind/ 目录:
| 配置文件 | 描述 |
|---|---|
| named.conf | 主配置文件 |
| named.conf.options | DNS 选项配置 |
| named.conf.local | 本地域名配置 |
| named.conf.default-zones | 默认区域配置 |
区域数据文件位于 /var/cache/bind/ 目录。
配置主配置文件
编辑 /etc/bind/named.conf.options:
bash
sudo vi /etc/bind/named.conf.options配置内容:
text
options {
directory "/var/cache/bind";
// 如果有防火墙,需要配置以下选项
forwarders {
8.8.8.8;
8.8.4.4;
};
dnssec-validation auto;
listen-on-v6 { any; };
// 允许查询的客户端
allow-query { any; };
// 允许递归查询
recursion yes;
};配置正向区域
正向区域用于将域名解析为 IP 地址。
编辑 /etc/bind/named.conf.local:
bash
sudo vi /etc/bind/named.conf.local添加正向区域配置:
text
// 正向区域配置
zone "openubmc.local" {
type master;
file "/etc/bind/zones/db.openubmc.local";
allow-transfer { none; };
};创建正向区域文件:
bash
sudo mkdir -p /etc/bind/zones
sudo vi /etc/bind/zones/db.openubmc.local区域文件内容:
text
$TTL 604800
@ IN SOA ns.openubmc.local. admin.openubmc.local. (
2026042001 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
; 名称服务器记录
@ IN NS ns.openubmc.local.
; A 记录
ns IN A 192.168.1.10
bmc-server IN A 192.168.1.100
bmc-node1 IN A 192.168.1.101
bmc-node2 IN A 192.168.1.102
bmc-node3 IN A 192.168.1.103
; 别名记录
www IN CNAME bmc-server
monitor IN CNAME bmc-server配置反向区域
反向区域用于将 IP 地址解析为域名。
编辑 /etc/bind/named.conf.local:
bash
sudo vi /etc/bind/named.conf.local添加反向区域配置:
text
// 反向区域配置
zone "1.168.192.in-addr.arpa" {
type master;
file "/etc/bind/zones/db.192.168.1";
allow-transfer { none; };
};创建反向区域文件:
bash
sudo vi /etc/bind/zones/db.192.168.1区域文件内容:
text
$TTL 604800
@ IN SOA ns.openubmc.local. admin.openubmc.local. (
2026042001 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
; 名称服务器记录
@ IN NS ns.openubmc.local.
; PTR 记录
10 IN PTR ns.openubmc.local.
100 IN PTR bmc-server.openubmc.local.
101 IN PTR bmc-node1.openubmc.local.
102 IN PTR bmc-node2.openubmc.local.
103 IN PTR bmc-node3.openubmc.local.验证配置文件
bash
# 检查主配置文件
sudo named-checkconf
# 检查正向区域文件
sudo named-checkzone openubmc.local /etc/bind/zones/db.openubmc.local
# 检查反向区域文件
sudo named-checkzone 1.168.192.in-addr.arpa /etc/bind/zones/db.192.168.1重启 DNS 服务
bash
# 重启 named 服务
sudo systemctl restart named
# 检查服务状态
sudo systemctl status named
# 查看服务日志
sudo journalctl -u named -f测试 DNS 服务器
使用 nslookup 测试
bash
# 安装 dnsutils
sudo apt-get install dnsutils
# 测试正向解析,xx.xx.xx.xx为我们搭建的 DNS 服务器ip
nslookup bmc-server.openubmc.local xx.xx.xx.xx
# 测试反向解析,xx.xx.xx.xx为我们搭建的 DNS 服务器ip
nslookup 192.168.1.100 xx.xx.xx.xx测试结果验证
成功的测试结果应返回正确的 IP 地址或域名:
text
$ nslookup bmc-server.openubmc.local
Server: xx.xx.xx.xx
Address: xx.xx.xx.xx#53
Name: bmc-server.openubmc.local
Address: 192.168.1.100防火墙配置
根据服务器类型按需放通防火墙配置
iptables 配置参考
bash
# 允许 DNS 端口
sudo iptables -A INPUT -p tcp --dport 53 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 53 -j ACCEPT常见问题
DNS 服务无法启动
问题现象:named 服务启动失败
可能原因:
- 配置文件语法错误
- 端口被占用
- 权限问题
解决方法:
- 检查配置文件语法:
named-checkconf - 检查端口占用:
netstat -tuln | grep 53 - 检查文件权限:
ls -la /etc/bind/
DNS 解析失败
问题现象:无法解析域名
可能原因:
- DNS 服务器未运行
- 客户端配置错误
- 网络连接问题
- 防火墙阻止
解决方法:
- 检查 DNS 服务状态:
systemctl status named - 检查客户端 DNS 配置
- 检查网络连通性:
ping xx.xx.xx.xx - 检查防火墙规则
区域文件加载失败
问题现象:日志显示区域文件加载错误
可能原因:
- 区域文件路径错误
- 区域文件语法错误
- 序列号未更新
解决方法:
- 检查文件路径是否正确
- 检查区域文件语法:
named-checkzone - 更新序列号(每次修改后需要增加)
解析速度慢
问题现象:DNS 解析响应时间长
可能原因:
- 网络延迟
- 递归查询过多
- 服务器性能不足
解决方法:
- 配置转发器加速查询
- 启用查询缓存
- 升级服务器配置
附录
参考资料
- BIND 官方文档:https://bind9.readthedocs.io/
- DNS 协议标准:RFC 1035
- openUBMC 官网:https://www.openubmc.cn/