在Linux系统中配置DNS服务器是管理网络基础设施的关键任务,它负责将域名解析为IP地址,以下是基于BIND9(Berkeley Internet Name Domain)的详细配置指南,适用于Ubuntu/CentOS等主流发行版,整个过程注重安全性和可维护性,遵循行业最佳实践。
- 权限:
root
或sudo
权限 - 网络:静态IP地址(
168.1.10
) - 防火墙:开放UDP/TCP端口53(DNS服务端口)
-
安装BIND9
# Ubuntu/Debian sudo apt update && sudo apt install bind9 bind9-utils # CentOS/RHEL sudo dnf install bind bind-utils
主配置文件设置
-
编辑主配置文件
named.conf
sudo nano /etc/bind/named.conf
添加以下内容(示例域名:
example.com
):options { directory "/var/cache/bind"; listen-on port 53 { any; }; # 监听所有接口 allow-query { any; }; # 允许所有客户端查询 recursion yes; # 启用递归查询 dnssec-validation auto; # 启用DNSSEC验证 }; # 区域文件配置 include "/etc/bind/named.conf.local";
-
配置区域文件声明
sudo nano /etc/bind/named.conf.local
添加正向和反向解析区域:
zone "example.com" { type master; file "/etc/bind/zones/db.example.com"; # 正向解析文件路径 }; zone "1.168.192.in-addr.arpa" { type master; file "/etc/bind/zones/db.192.168.1"; # 反向解析文件路径 };
创建区域解析文件
-
正向解析文件(域名 → IP)
sudo mkdir /etc/bind/zones sudo nano /etc/bind/zones/db.example.com ```示例: ```dns $TTL 86400 ; 默认缓存时间 @ IN SOA ns1.example.com. admin.example.com. ( 2025010101 ; 序列号 (格式: YYYYMMDDNN) 3600 ; 刷新时间 1800 ; 重试时间 604800 ; 过期时间 86400 ; 最小TTL ) ; 名称服务器记录 @ IN NS ns1.example.com. ns1 IN A 192.168.1.10 ; 主机记录 www IN A 192.168.1.100 mail IN A 192.168.1.200
-
反向解析文件(IP → 域名)
sudo nano /etc/bind/zones/db.192.168.1 ```示例: ```dns $TTL 86400 @ IN SOA ns1.example.com. admin.example.com. (2025010101 3600 1800 604800 86400) @ IN NS ns1.example.com. 10 IN PTR ns1.example.com. ; 192.168.1.10 → ns1 100 IN PTR www.example.com. ; 192.168.1.100 → www 200 IN PTR mail.example.com. ; 192.168.1.200 → mail
启动与验证
-
检查配置语法
sudo named-checkconf # 检查主配置 sudo named-checkzone example.com /etc/bind/zones/db.example.com # 检查正向区域 sudo named-checkzone 1.168.192.in-addr.arpa /etc/bind/zones/db.192.168.1 # 检查反向区域
-
启动BIND服务
sudo systemctl restart named sudo systemctl enable named
-
客户端测试解析
dig @192.168.1.10 www.example.com # 测试正向解析 dig -x 192.168.1.100 @192.168.1.10 # 测试反向解析
预期输出应包含
ANSWER SECTION
显示正确IP或域名。
安全加固措施
-
限制递归查询范围
修改named.conf
的allow-query
为内部网络:allow-query { 192.168.1.0/24; };
-
启用TSIG(事务签名)
生成密钥并配置区域传输加密:dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST example.com
-
防火墙规则
# Ubuntu sudo ufw allow from 192.168.1.0/24 to any port 53 # CentOS sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="53" protocol="tcp" accept' sudo firewall-cmd --reload
故障排除
- 服务启动失败:检查日志
journalctl -u named -f
- 解析超时:确认防火墙开放UDP/TCP 53端口
- SERVFAIL错误:检查区域文件权限(需
named
用户可读) - 序列号未更新:修改区域文件后递增序列号(
2025010101 → 2025010102
)
正确配置DNS服务器能显著提升网络管理效率与安全性,建议定期更新BIND版本、监控查询日志(/var/log/bind/query.log
),并使用工具如 dnstop
分析流量,对于生产环境,应部署至少两台DNS服务器实现高可用。
引用说明:本文配置基于ISC BIND 9.18官方文档(https://bind9.readthedocs.io/),结合Linux Foundation基础设施安全指南(https://www.linuxfoundation.org/)的最佳实践,防火墙规则参考了Red Hat及Canonical官方手册。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/5915.html