如何在Linux上配置从DNS?

HCRM技术_小炮 DNS 2025-09-08 2 0

最常用的 DNS 软件是BIND9 (Berkeley Internet Name Domain),下面我将以 BIND9 为例,详细讲解配置步骤。

整体概念

linux从dns怎么配置

主 DNS服务器 (Master)拥有区域文件(Zone File)的原始版本,并允许对其进行修改。

从 DNS服务器 (Slave)从主服务器接收区域文件的副本(通过“区域传输”),并提供只读的 DNS 解析服务。

区域传输 (Zone Transfer)主服务器将区域文件数据发送到从服务器的过程。

配置步骤

以下操作需要在你的从DNS服务器 上进行,假设:

主服务器IP192.168.1.10

linux从dns怎么配置

从服务器IP192.168.1.20

域名example.com

区域文件db.example.com (将从主服务器自动获取,无需手动创建)

第 1 步:安装 BIND9

在基于 Debian/Ubuntu 的系统上:

sudo apt update
sudo apt install bind9

在基于 RHEL/CentOS/Rocky Linux 的系统上:

linux从dns怎么配置
sudo dnf install bind bind-utils  # 对于 CentOS 7/8 或 Rocky Linux 8/9
或者
sudo yum install bind bind-utils  # 对于旧版本

安装后,BIND9 服务通常名为namedbind9

第 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

第 6 步:查看日志并验证同步

重启后,查看系统日志或 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 文件

使用dignslookup 测试从服务器是否能正常解析域名。

使用 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 进程(用户bindnamed)对保存区域文件的目录(如/var/cache/bind)有写入权限。

3、配置文件语法错误

* 始终使用named-checkconf 来验证配置文件语法。

通过以上步骤,你应该可以成功配置一个 Linux 从 DNS 服务器。

文章摘自:https://idc.huochengrm.cn/dns/15203.html

评论