代码仓
中

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. 升级服务器配置

附录 ​

参考资料 ​