DNS(域名系统)是互联网的”电话簿”,将域名(如 www.example.com
)转换为IP地址,在Linux上搭建DNS服务器可提升网络管理效率、增强内网安全性或实现自定义域名解析,本文将基于BIND9(最广泛使用的开源DNS软件)分步指导搭建过程,遵循企业级最佳实践。
环境准备
-
系统要求
- Linux发行版:Ubuntu 20.04+/CentOS 7+(本文以Ubuntu 22.04为例)
- 最小配置:1核CPU、1GB内存、10GB存储
- 静态IP地址(
168.1.10
)
-
更新系统
sudo apt update && sudo apt upgrade -y # Ubuntu/Debian # 或 sudo yum update -y # CentOS/RHEL
安装BIND9
sudo apt install bind9 bind9-utils -y # Ubuntusudo yum install bind bind-utils -y # CentOS
验证安装:
named -v # 输出 BIND 9.18.1 或类似版本
配置主DNS服务器
步骤1:修改主配置文件 /etc/bind/named.conf.options
sudo nano /etc/bind/named.conf.options ```根据需求调整): ```conf options { directory "/var/cache/bind"; listen-on { any; }; # 监听所有IP allow-query { any; }; # 允许所有客户端查询 recursion yes; # 启用递归查询 forwarders { 8.8.8.8; # 上游DNS(如Google DNS) 8.8.4.4; }; dnssec-validation auto; # 启用DNSSEC验证 };
步骤2:创建正向解析区域文件
-
定义区域:编辑
/etc/bind/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 ```示例: ```conf $TTL 86400 ; 默认缓存时间(秒) @ IN SOA ns1.example.com. admin.example.com. ( 2025081501 ; 序列号 (格式:年月日+修订号) 3600 ; 刷新时间 1800 ; 重试时间 604800 ; 过期时间 86400 ; 最小TTL ) @ IN NS ns1.example.com. ; 域名服务器记录 ns1 IN A 192.168.1.10 ; 服务器IP www IN A 192.168.1.100 ; 网站IP mail IN A 192.168.1.200 ; 邮件服务器IP
步骤3:创建反向解析区域文件(可选)
-
在
/etc/bind/named.conf.local
添加:zone "1.168.192.in-addr.arpa" { # 反向IP段(192.168.1.x) type master; file "/etc/bind/zones/db.192.168.1"; };
-
创建反向区域文件:
sudo nano /etc/bind/zones/db.192.168.1 ```示例: ```conf $TTL 86400 @ IN SOA ns1.example.com. admin.example.com. (2025081501 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
启动服务与防火墙配置
-
检查配置语法
sudo named-checkconf # 无输出表示成功 sudo named-checkzone example.com /etc/bind/zones/db.example.com # 输出"OK"
-
启动BIND9
sudo systemctl start named # 启动 sudo systemctl enable named # 开机自启
-
开放防火墙端口
sudo ufw allow 53/tcp # 区域传输 sudo ufw allow 53/udp # 查询请求 sudo ufw reload
测试DNS解析
-
本地测试
dig @192.168.1.10 www.example.com # 应返回192.168.1.100 dig -x 192.168.1.100 @192.168.1.10 # 反向解析应返回www.example.com
-
客户端配置
将客户端的DNS服务器设置为168.1.10
,使用nslookup
或浏览器验证。
安全加固建议
-
限制递归查询(在
named.conf.options
中修改):recursion no; # 禁用公共递归(仅服务内网) allow-recursion { 192.168.1.0/24; }; # 仅允许特定网段
-
启用日志监控:
channel security_log { file "/var/log/bind/security.log" versions 3 size 10m; severity warning; };
-
定期更新与审计:
sudo apt upgrade bind9 # Ubuntu sudo named-checkconf # 每次修改后检查配置
通过BIND9搭建的DNS服务器已能处理内外部域名解析,实际部署中需注意:
- 序列号管理:每次修改区域文件后递增序列号(如
2025081501
→2025081502
),并重启服务sudo systemctl restart named
。 - 高可用方案:部署至少两台DNS服务器,配置主从同步(在从服务器添加
type slave;
和主服务器IP)。 - 合规性:公共DNS需遵循RFC标准,私有DNS建议结合DHCP分发。
引用说明:
- BIND官方文档:https://www.isc.org/bind/
- Linux网络安全指南:https://debian-handbook.info/
- DNS协议标准:RFC 1034, RFC 1035
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/7925.html