红帽Linux如何搭建DNS服务器?

HCRM技术_小炮 DNS 2026-03-16 46 1

在红帽Linux(如RHEL、CentOS、AlmaLinux、Rocky Linux等)上搭建DNS服务器,最常用的是使用BIND(Berkeley Internet Name Domain),以下是详细的搭建步骤:

一、安装BIND软件包

安装BIND及相关工具
sudo yum install bind bind-utils -y
或使用dnf(RHEL 8+)
sudo dnf install bind bind-utils -y

二、配置主配置文件 named.conf

编辑主配置文件/etc/named.conf

sudo vi /etc/named.conf

基本配置示例:

options {
    listen-on port 53 { any; };  # 监听所有IP
    listen-on-v6 port 53 { any; };
    directory       "/var/named";
    dump-file       "/var/named/data/cache_dump.db";
    statistics-file "/var/named/data/named_stats.txt";
    memstatistics-file "/var/named/data/named_mem_stats.txt";
    recursing-file  "/var/named/data/named.recursing";
    secroots-file   "/var/named/data/named.secroots";
    allow-query     { any; };    # 允许查询
    recursion yes;               # 允许递归查询
    dnssec-enable yes;
    dnssec-validation yes;
    managed-keys-directory "/var/named/dynamic";
    pid-file "/run/named/named.pid";
    session-keyfile "/run/named/session.key";
};
logging {
    channel default_debug {
        file "data/named.run";
        severity dynamic;
    };
};
根区域
zone "." IN {
    type hint;
    file "named.ca";
};
本地回环区域
zone "localhost" IN {
    type master;
    file "localhost.zone";
    allow-update { none; };
};
zone "0.0.127.in-addr.arpa" IN {
    type master;
    file "named.local";
    allow-update { none; };
};
自定义正向解析区域(示例:example.com)
zone "example.com" IN {
    type master;
    file "example.com.zone";
    allow-update { none; };
};
自定义反向解析区域(示例:192.168.1.0/24)
zone "1.168.192.in-addr.arpa" IN {
    type master;
    file "192.168.1.rev";
    allow-update { none; };
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

三、创建区域文件

创建正向解析区域文件

sudo vi /var/named/example.com.zone
示例:

$TTL 86400
@       IN SOA  ns1.example.com. admin.example.com. (
                2024010101      ; Serial
                3600            ; Refresh
                1800            ; Retry
                604800          ; Expire
                86400 )         ; Minimum TTL
; Name Servers
        IN NS   ns1.example.com.
        IN NS   ns2.example.com.
; A Records
@       IN A    192.168.1.10
ns1     IN A    192.168.1.10
ns2     IN A    192.168.1.11
www     IN A    192.168.1.100
mail    IN A    192.168.1.200
ftp     IN CNAME www.example.com.
; MX Records
@       IN MX 10 mail.example.com.

创建反向解析区域文件

sudo vi /var/named/192.168.1.rev
示例:

$TTL 86400
@ IN SOA ns1.example.com. admin.example.com. (
    2024010101
    3600
    1800
    604800
    86400 )
@ IN NS ns1.example.com.
@ IN NS ns2.example.com.
10      IN PTR ns1.example.com.
11      IN PTR ns2.example.com.
100     IN PTR www.example.com.
200     IN PTR mail.example.com.

四、设置权限

修改文件所有权
sudo chown named:named /var/named/example.com.zone
sudo chown named:named /var/named/192.168.1.rev
设置正确权限
sudo chmod 640 /var/named/*.zone
sudo chmod 640 /var/named/*.rev

五、检查配置文件语法

检查主配置
sudo named-checkconf /etc/named.conf
检查正向区域文件
sudo named-checkzone example.com /var/named/example.com.zone
检查反向区域文件
sudo named-checkzone 1.168.192.in-addr.arpa /var/named/192.168.1.rev

六、启动和启用服务

启动服务
sudo systemctl start named
设置开机自启
sudo systemctl enable named
查看服务状态
sudo systemctl status named

七、防火墙配置

开放DNS端口(53/tcp, 53/udp)
sudo firewall-cmd --permanent --add-service=dns
sudo firewall-cmd --reload
或直接开放端口
sudo firewall-cmd --permanent --add-port=53/tcp
sudo firewall-cmd --permanent --add-port=53/udp
sudo firewall-cmd --reload

八、客户端测试

测试正向解析
nslookup www.example.com 127.0.0.1
dig @127.0.0.1 www.example.com
测试反向解析
nslookup 192.168.1.100 127.0.0.1
dig -x 192.168.1.100 @127.0.0.1
测试递归查询
dig @127.0.0.1 google.com

九、配置系统使用自己的DNS

编辑/etc/resolv.conf

sudo vi /etc/resolv.conf

添加:

nameserver 127.0.0.1

注意:在某些系统中,/etc/resolv.conf可能由NetworkManager管理,可以使用以下方法:

对于NetworkManager管理的系统
sudo nmcli con mod "连接名称" ipv4.dns "127.0.0.1"
sudo nmcli con up "连接名称"

十、高级配置选项(可选)

配置转发器(递归DNS)

/etc/named.conf 的 options 部分添加:

forwarders {
    8.8.8.8;
    8.8.4.4;
};
forward only;  # 或 forward first;

配置从服务器

在主服务器的zone配置中添加:

zone "example.com" IN {
    type master;
    file "example.com.zone";
    allow-transfer { 192.168.1.11; };  # 从服务器IP
};

在从服务器的配置中添加:

zone "example.com" IN {
    type slave;
    file "slaves/example.com.zone";
    masters { 192.168.1.10; };  # 主服务器IP
};

十一、日志查看

查看BIND日志
sudo journalctl -u named -f
或查看特定日志文件
sudo tail -f /var/named/data/named.run

快速验证脚本

创建一个测试脚本dns_test.sh

#!/bin/bash
echo "=== DNS服务器状态 ==="
systemctl status named --no-pager
echo -e "\n=== 测试本地解析 ==="
nslookup localhost 127.0.0.1
echo -e "\n=== 测试正向解析 ==="
nslookup www.example.com 127.0.0.1
echo -e "\n=== 测试反向解析 ==="
nslookup 192.168.1.100 127.0.0.1
echo -e "\n=== 检查端口监听 ==="
netstat -tulpn | grep :53

给脚本执行权限并运行:

chmod +x dns_test.sh
./dns_test.sh

故障排除

1、服务启动失败

   # 查看详细错误
   sudo named-checkconf
   sudo journalctl -xe

2、无法解析

   # 检查防火墙
   sudo firewall-cmd --list-all
   
   # 检查SElinux
   sudo setsebool -P named_write_master_zones on

3、权限问题

   # 恢复SELinux上下文
   sudo restorecon -Rv /var/named

按照以上步骤,您应该可以在红帽Linux上成功搭建DNS服务器,根据实际需求调整区域文件和配置参数。

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

评论

精彩评论
  • 2026-03-19 19:04:41

    在红帽Linux上搭建DNS服务器,需安装bind软件包,配置bind配置文件,并启动bind服务。