在Ubuntu上部署DNS服务器是管理网络基础设施的关键步骤,它负责将域名解析为IP地址,以下是基于BIND9(Berkeley Internet Name Domain)的完整实现方案,符合企业级标准并遵循安全最佳实践。
核心组件安装
sudo apt update && sudo apt install bind9 bind9utils bind9-doc dnsutils -y
- bind9:主DNS服务
- bind9utils:管理工具包
- dnsutils:包含
dig
、nslookup
等测试工具
配置文件架构
BIND9的核心配置文件位于/etc/bind/
:
├── named.conf
├── named.conf.options # 全局选项
├── named.conf.local # 本地区域声明
└── zones/ # 自定义区域文件目录
关键配置步骤
全局配置 (named.conf.options
)
sudo nano /etc/bind/named.conf.options
options { directory "/var/cache/bind"; recursion yes; # 允许递归查询 allow-query { any; }; # 接受所有客户端查询 forwarders { 8.8.8.8; # 上游DNS 1.1.1.1; }; dnssec-validation auto; # 启用DNSSEC验证 listen-on { any; }; # 监听所有接口 };
创建正向解析区域
① 声明区域 (named.conf.local
):
zone "example.com" { type master; file "/etc/bind/zones/db.example.com"; # 区域文件路径 };
② 构建区域文件:
sudo mkdir /etc/bind/zones sudo nano /etc/bind/zones/db.example.com
$TTL 86400 @ IN SOA ns1.example.com. admin.example.com. ( 2025081501 ; 序列号 3600 ; 刷新间隔 1800 ; 重试间隔 604800 ; 过期时间 86400 ) ; 最小TTL ; 名称服务器记录 @ IN NS ns1.example.com. @ IN NS ns2.example.com. ; A记录 ns1 IN A 192.168.1.10 ns2 IN A 192.168.1.11 www IN A 192.168.1.100 mail IN A 192.168.1.200
配置反向解析
① 声明反向区域:
zone "1.168.192.in-addr.arpa" { type master; file "/etc/bind/zones/db.192.168.1"; };
② 创建反向区域文件:
$TTL 86400 @ IN SOA ns1.example.com. admin.example.com. ( 2025081501 3600 1800 604800 86400 ) @ IN NS ns1.example.com. @ IN NS ns2.example.com. ; PTR记录 10 IN PTR ns1.example.com. 11 IN PTR ns2.example.com. 100 IN PTR www.example.com. 200 IN PTR mail.example.com.
服务启动与验证
sudo systemctl restart named && sudo systemctl enable named
测试解析结果:
# 输出:192.168.1.100 # 反向解析测试 dig @localhost -x 192.168.1.100 +short # 输出:www.example.com.
防火墙配置
允许DNS端口(UDP/TCP 53):
sudo ufw allow 53/tcp && sudo ufw allow 53/udp sudo ufw reload
客户端配置
修改客户端/etc/resolv.conf
:
nameserver 192.168.1.10 # 你的DNS服务器IP options edns0
安全加固措施
- 限制区域传输:
zone "example.com" { ... allow-transfer { 192.168.1.11; }; # 仅允许从服务器 };
- 禁用版本信息:
options { version "Not disclosed"; };
- 日志监控:
tail -f /var/log/syslog | grep named
故障排查指南
问题现象 | 排查命令 |
---|---|
服务启动失败 | sudo journalctl -u named |
解析超时 | dig +trace example.com |
配置文件语法错误 | sudo named-checkconf |
区域文件错误 | sudo named-checkzone example.com /etc/bind/zones/db.example.com |
维护建议
- 序列号管理:每次更新记录后递增SOA序列号(格式YYYYMMDDNN)
- 定期备份:
sudo tar -czvf bind_backup_$(date +%F).tar.gz /etc/bind /var/cache/bind
- 自动化更新:使用
rndc
工具动态加载配置:sudo rndc reload example.com
引用说明
本文配置基于:
- ISC BIND 9.18 官方文档
- Ubuntu 22.04 LTS 系统标准
- RFC 1035 (DNS协议规范)
- NIST SP 800-81-2 (DNS安全指南)
重要提示:生产环境建议部署至少两台DNS服务器(主/从)并配置TSIG密钥认证,以实现高可用和安全同步,定期审计日志并使用
dnstop
监控流量异常。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/9750.html