在Linux中安装DNS服务器需执行:更新包列表,安装BIND,编辑named.conf配置,定义正向/反向解析区域,检查配置文件后重启
Linux系统安装与配置DNS服务器(BIND9)完整指南
环境准备与软件安装
操作系统要求
项目 | 要求 |
---|---|
操作系统 | Ubuntu 20.04/CentOS 7+ |
内存建议 | ≥512MB(生产环境建议≥2GB) |
网络配置 | 固定IP地址(推荐192.168.x.x/24局域网段) |
更新软件包索引
# Debian/Ubuntu系 sudo apt update && sudo apt upgrade y # RedHat/CentOS系 sudo yum makecache && sudo yum update y
安装BIND DNS服务器
系统类型 | 安装命令 |
---|---|
Ubuntu/Debian | sudo apt install bind9 bind9utils bind9doc y |
CentOS/RHEL | sudo yum install bind bindutils y |
Fedora | sudo dnf install bind bindutils y |
核心配置文件解析
主配置文件 /etc/bind/named.conf
// 基础配置示例 options { directory "/var/cache/bind"; // 缓存文件存放路径 recursion yes; // 启用递归查询 allowquery { any; } // 允许所有客户端查询 forwarders { // 上级DNS服务器 8.8.8.8; 8.8.4.4; }; dnssecvalidation yes; // 启用DNSSEC验证 listenon port 53 { any; }; // 监听所有接口53端口 };
本地回环配置 /etc/bind/named.conf.local
// 本地网络配置示例 zone "localhost" { type master; file "/etc/bind/db.local"; // 对应区域文件路径 }; zone "127.inaddr.arpa" { type master; file "/etc/bind/db.127"; // 反向解析文件 }; zone "192.168.1.0/24" { // 示例内网区域 type master; file "/etc/bind/db.192.168.1"; };
区域文件配置规范
正向解析区域文件示例 (/etc/bind/db.example.com
)
$TTL 86400 ; 默认生存时间(1天) @ IN SOA ns1.example.com. admin.example.com. ( 2023100101 ; 序列号 3600 ; 刷新时间 1800 ; 重试时间 1209600 ; 过期时间 86400 ) ; 最小TTL IN NS ns1.example.com. IN NS ns2.example.com. ns1 IN A 192.168.1.100 ; 主DNS服务器IP ns2 IN A 192.168.1.101 ; 辅助DNS服务器IP www IN A 192.168.1.102 ; 网站服务器IP @ IN A 192.168.1.100 ; 根域名指向
反向解析区域文件示例 (/etc/bind/db.192.168.1
)
$TTL 86400 @ IN SOA ns1.example.com. admin.example.com. ( 2023100101 ; 序列号 3600 ; 刷新时间 1800 ; 重试时间 1209600 ; 过期时间 86400 ) ; 最小TTL IN NS ns1.example.com. IN NS ns2.example.com. 100 IN PTR ns1.example.com. 101 IN PTR ns2.example.com. 102 IN PTR www.example.com.
服务控制与状态检查
启动/重启服务
# systemd系统通用命令 sudo systemctl start named # 启动服务 sudo systemctl enable named # 设置开机自启 sudo systemctl restart named # 重启服务 # 传统init系统命令(旧版CentOS) sudo service named start sudo chkconfig named on
配置验证工具
命令 | 用途说明 |
---|---|
namedcheckconf |
检查主配置文件语法错误 |
namedcheckzone |
验证区域文件正确性(例:namedcheckzone example.com /etc/bind/db.example.com ) |
dig @localhost |
测试DNS解析(例:dig www.example.com ) |
rndc reload |
重新加载配置文件(需配置密钥认证) |
安全加固措施
访问控制配置
// 修改named.conf中的allowquery设置 allowquery { 192.168.1.0/24; // 仅允许内网访问 !192.168.1.254; // 排除特定IP };
限制递归查询
options { recursion no; // 禁用递归查询(仅转发) allowrecursion { 192.168.1.0/24; } // 指定允许递归的网段 };
TSIG密钥配置(示例)
// 在named.conf中添加密钥配置 key "example_tsig" { algorithm hmacmd5; secret "base64_encoded_secret_key"; }; // 区域配置中应用密钥 zone "example.com" { type master; file "/etc/bind/db.example.com"; allowupdate { key "example_tsig"; }; };
常见问题排错指南
服务启动失败处理流程
步骤 | 操作命令 | 说明 |
---|---|---|
1 | journalctl xe |
查看系统日志错误信息 |
2 | namedcheckconf |
检查配置文件语法 |
3 | namedcheckzone example.com /etc/bind/db.example.com |
验证区域文件 |
4 | sudo lsof i :53 |
检查端口占用情况 |
5 | sudo firewallcmd addservice=dns |
开放防火墙端口(CentOS) |
无法解析的常见原因
- 区域文件未包含查询的域名记录
- SOA记录中的序列号未更新(需递增)
- 防火墙阻止UDP/TCP 53端口
- BIND配置中的
forwarders
设置错误 - SELinux策略限制(CentOS需执行
sudo setsebool P named_write_master_zones on
)
扩展功能配置示例
配置转发器(Forwarder)
// 在options块中添加转发器配置 forwarders { 8.8.8.8; 8.8.4.4; } // Google公共DNS forward only; // 仅转发不递归
配置循环DNS(Round Robin)
// 在区域文件中定义多个A记录 www IN A 192.168.1.102 www IN A 192.168.1.103 www IN A 192.168.1.104
Q&A问答专栏
Q1:如何在BIND中配置允许外部网络访问DNS服务?
A:需修改两个配置项:
- 在
named.conf
的options
块中设置:listenon port 53 { any; }; # 监听所有网络接口
- 调整
allowquery
设置:allowquery { any; }; # 允许所有客户端查询
注意:生产环境建议结合
allowquery
进行IP白名单控制,并通过防火墙限制访问来源。
Q2:添加新域名记录后为什么不生效?
A:可能原因及解决方案:
-
区域文件未更新:需重新加载配置(
sudo systemctl reload named
) -
TTL缓存影响:客户端可能缓存旧记录,可清除本地DNS缓存:
# Windows命令提示符 ipconfig /flushdns # Linux终端 sudo systemdresolve flushcaches
-
区域文件语法错误:使用
namedcheckzone
命令验证文件正确性 -
SOA序列号未更新:修改SOA记录中的序列号(如从2023100101改为2023100201)以触发更新
-
权限问题:确保区域文件权限为
644
且属主为bind
用户
来源互联网整合,作者:小编,如若转载,请注明出处:https://www.aiboce.com/ask/200184.html