最常用的 DNS 软件是BIND9 (Berkeley Internet Name Domain),下面我将以 BIND9 为例,详细讲解配置步骤。
主 DNS服务器 (Master)拥有区域文件(Zone File)的原始版本,并允许对其进行修改。
从 DNS服务器 (Slave)从主服务器接收区域文件的副本(通过“区域传输”),并提供只读的 DNS 解析服务。
区域传输 (Zone Transfer)主服务器将区域文件数据发送到从服务器的过程。
以下操作需要在你的从DNS服务器 上进行,假设:
主服务器IP192.168.1.10
从服务器IP192.168.1.20
域名example.com
区域文件db.example.com
(将从主服务器自动获取,无需手动创建)
在基于 Debian/Ubuntu 的系统上:
sudo apt update sudo apt install bind9
在基于 RHEL/CentOS/Rocky Linux 的系统上:
sudo dnf install bind bind-utils # 对于 CentOS 7/8 或 Rocky Linux 8/9 或者 sudo yum install bind bind-utils # 对于旧版本
安装后,BIND9 服务通常名为named
或bind9
。
第 2 步:配置主配置文件/etc/bind/named.conf.options
这个文件用于设置全局选项,如转发器、监听端口等,一个常见的安全配置是只允许内部网络查询。
sudo nano /etc/bind/named.conf.options
options { directory "/var/cache/bind"; // 如果希望从服务器也能递归查询(例如作为内部客户端的缓存服务器) recursion yes; allow-recursion { localhost; 192.168.1.0/24; }; // 允许你的内网递归查询 // 允许哪些客户端来进行查询(可以是 any; 或其他网络) allow-query { localhost; 192.168.1.0/24; }; // 可选:设置上游转发器,例如谷歌的DNS forwarders { 8.8.8.8; 8.8.4.4; }; // 版本信息隐藏,增强安全性 version "not currently available"; dnssec-validation auto; listen-on-v6 { any; }; };
第 3 步:配置区域文件/etc/bind/named.conf.local
这是关键步骤,我们需要在这里定义从服务器区域(Slave Zone)。
sudo nano /etc/bind/named.conf.local
// 这是正向区域(域名 -> IP)的从配置 zone "example.com" { type slave; // 类型为 slave file "/var/cache/bind/db.example.com"; // 从主服务器同步后,保存区域文件的位置 masters { 192.168.1.10; }; // 指定主服务器的 IP 地址 allow-transfer { none; }; // 作为从服务器,通常不允许其他服务器从它这里传输区域文件 }; // 这是反向区域(IP -> 域名)的从配置(如果需要的话) zone "1.168.192.in-addr.arpa" { type slave; file "/var/cache/bind/db.192.168.1"; masters { 192.168.1.10; }; allow-transfer { none; }; };
重要说明:
file
指定的路径在 Debian/Ubuntu 上,通常使用/var/cache/bind/
,因为这个目录默认有写入权限,在 RHEL/CentOS 上,通常是/var/named/slaves/
,你需要确保named
用户对该目录有写权限 (sudo chown named:named /var/named/slaves
)。
masters
列表可以包含多个主服务器的 IP,用分号分隔。
第 4 步:在主服务器上的配置(非常重要!)
从服务器的配置必须与主服务器的配置匹配,区域传输才会成功,你必须在主服务器的named.conf.local
中对应的区域块里,允许从服务器进行区域传输。
在主服务器上,你的区域配置应该是这样的:
zone "example.com" { type master; file "/etc/bind/db.example.com"; allow-transfer { 192.168.1.20; }; // !重要:只允许从服务器 IP 进行区域传输 // ... 其他选项 ... };
第 5 步:检查配置文件语法并重启 BIND
在从服务器上,每次修改配置后都要检查语法并重启服务。
检查主配置文件和区域文件语法 sudo named-checkconf 如果没有输出,说明语法正确 重启 BIND9 服务 sudo systemctl restart bind9 # Debian/Ubuntu 或者 sudo systemctl restart named # RHEL/CentOS 设置开机自启 sudo systemctl enable bind9
重启后,查看系统日志或 BIND 的日志,检查区域传输是否成功。
查看最新日志 sudo tail -f /var/log/syslog | grep named # Debian/Ubuntu sudo journalctl -u named -f # RHEL/CentOS (Systemd)
如果成功,你应该能看到类似这样的日志:
zone example.com/IN: transferred from 192.168.1.10: Transfer completed.
你也可以检查区域文件是否已创建:
sudo ls -la /var/cache/bind/ 应该能看到 db.example.com 文件
使用dig
或nslookup
测试从服务器是否能正常解析域名。
使用 dig 查询从服务器,指定你的从服务器 IP dig @192.168.1.20 www.example.com 或者使用 nslookup nslookup www.example.com 192.168.1.20
1、区域传输失败:
检查主服务器配置确保主服务器的allow-transfer
列表中包含了从服务器的 IP。
检查防火墙确保主服务器和从服务器之间的TCP 53 和 UDP 53 端口是开放的,区域传输使用 TCP 53。
查看详细日志BIND 的日志通常会明确指出失败原因(如权限拒绝、网络不通等)。
2、权限错误:
* 确保 BIND 进程(用户bind
或named
)对保存区域文件的目录(如/var/cache/bind
)有写入权限。
3、配置文件语法错误:
* 始终使用named-checkconf
来验证配置文件语法。
通过以上步骤,你应该可以成功配置一个 Linux 从 DNS 服务器。
文章摘自:https://idc.huochengrm.cn/dns/15203.html
评论