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 查询过程

  1. 客户端向 DNS 服务器发送查询请求。
  2. DNS 服务器检查本地缓存。
  3. 如果缓存中没有,DNS 服务器向根域名服务器发起查询。
  4. 根域名服务器返回顶级域名服务器地址。
  5. DNS 服务器向顶级域名服务器发起查询。
  6. 顶级域名服务器返回权威域名服务器地址。
  7. DNS 服务器向权威域名服务器发起查询。
  8. 权威域名服务器返回最终解析结果。
  9. 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.optionsDNS 选项配置
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 服务启动失败

可能原因

  1. 配置文件语法错误
  2. 端口被占用
  3. 权限问题

解决方法

  1. 检查配置文件语法:named-checkconf
  2. 检查端口占用:netstat -tuln | grep 53
  3. 检查文件权限:ls -la /etc/bind/

DNS 解析失败

问题现象:无法解析域名

可能原因

  1. DNS 服务器未运行
  2. 客户端配置错误
  3. 网络连接问题
  4. 防火墙阻止

解决方法

  1. 检查 DNS 服务状态:systemctl status named
  2. 检查客户端 DNS 配置
  3. 检查网络连通性:ping xx.xx.xx.xx
  4. 检查防火墙规则

区域文件加载失败

问题现象:日志显示区域文件加载错误

可能原因

  1. 区域文件路径错误
  2. 区域文件语法错误
  3. 序列号未更新

解决方法

  1. 检查文件路径是否正确
  2. 检查区域文件语法:named-checkzone
  3. 更新序列号(每次修改后需要增加)

解析速度慢

问题现象:DNS 解析响应时间长

可能原因

  1. 网络延迟
  2. 递归查询过多
  3. 服务器性能不足

解决方法

  1. 配置转发器加速查询
  2. 启用查询缓存
  3. 升级服务器配置

附录

参考资料