凌峰创科服务平台

centos dns服务器搭建

在CentOS系统中搭建DNS服务器通常使用BIND(Berkeley Internet Name Domain)软件,它是目前最流行的DNS服务器软件之一,以下将详细介绍在CentOS 7/8系统上搭建DNS服务器的完整步骤,包括安装配置、区域文件管理、安全设置及测试验证等内容。

centos dns服务器搭建-图1
(图片来源网络,侵删)

安装BIND软件包

首先需要更新系统软件包列表并安装BIND相关组件,打开终端,执行以下命令:

sudo yum update -y
sudo yum install bind bind-utils -y

bind是DNS服务器主程序,bind-utils包含客户端工具如nslookupdig等,用于测试DNS服务。

配置BIND主配置文件

BIND的主配置文件位于/etc/named.conf,需要编辑该文件以定义DNS服务器的全局参数和区域配置,使用vimnano编辑器打开文件:

sudo vim /etc/named.conf

主要修改以下内容:

centos dns服务器搭建-图2
(图片来源网络,侵删)
  1. 全局选项:在options段落中设置监听地址、允许查询的客户端等。
    options {
        listen-on port 53 { any; };  // 监听所有网络接口
        listen-on-v6 port 53 { ::1; }; // 监听IPv6
        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";
        allow-query     { any; };  // 允许所有客户端查询
        recursion yes;
    };
  2. 区域定义:在文件末尾添加正向和反向解析区域,为域名example.com创建正向区域,网段168.1.0/24创建反向区域:
    zone "example.com" IN {
        type master;
        file "example.com.zone";
        allow-update { none; };
    };
    zone "1.168.192.in-addr.arpa" IN {
        type master;
        file "192.168.1.rev";
        allow-update { none; };
    };

创建区域数据文件

区域数据文件存储在/var/named目录下,需根据主配置文件中的定义创建正向和反向区域文件。

正向区域文件(example.com.zone)

sudo vim /var/named/example.com.zone
```示例:
```conf
$TTL 86400
@   IN  SOA ns1.example.com. admin.example.com. (
            2025081501  ; Serial
            3600        ; Refresh
            1800        ; Retry
            604800      ; Expire
            86400 )     ; Minimum TTL
    IN  NS  ns1.example.com.
    IN  MX  10 mail.example.com.
ns1 IN  A   192.168.1.10
www IN  A   192.168.1.20
mail IN  A   192.168.1.30

反向区域文件(192.168.1.rev)

sudo vim /var/named/192.168.1.rev
```示例:
```conf
$TTL 86400
@   IN  SOA ns1.example.com. admin.example.com. (
            2025081501  ; Serial
            3600        ; Refresh
            1800        ; Retry
            604800      ; Expire
            86400 )     ; Minimum TTL
    IN  NS  ns1.example.com.
10  IN  PTR ns1.example.com.
20  IN  PTR www.example.com.
30  IN  PTR mail.example.com.

注意:区域文件中的$ORIGIN$TTL可根据需要调整,确保序列号(Serial)唯一且递增。

配置文件权限与SELinux

BIND对文件权限要求严格,需确保区域文件属主为named用户:

sudo chown named:named /var/named/example.com.zone
sudo chown named:named /var/named/192.168.1.rev
sudo chmod 640 /var/named/example.com.zone
sudo chmod 640 /var/named/192.168.1.rev

如果启用了SELinux,需安装policycoreutils-python并设置正确的上下文:

centos dns服务器搭建-图3
(图片来源网络,侵删)
sudo yum install policycoreutils-python -y
sudo semanage fcontext -a -t named_zone_t "/var/named/example.com.zone"
sudo semanage fcontext -a -t named_zone_t "/var/named/192.168.1.rev"
sudo restorecon -v /var/named/example.com.zone /var/named/192.168.1.rev

启动并启用DNS服务

完成配置后,启动BIND服务并设置为开机自启:

sudo systemctl start named
sudo systemctl enable named

检查服务状态:

sudo systemctl status named

防火墙与端口配置

确保防火墙允许DNS流量(默认TCP/UDP 53端口):

sudo firewall-cmd --permanent --add-service=dns
sudo firewall-cmd --reload

测试DNS服务

使用nslookupdig工具测试解析功能:

  1. 正向解析测试

    nslookup www.example.com

    预期返回168.1.20

  2. 反向解析测试

    nslookup 192.168.1.20

    预期返回www.example.com

  3. 测试递归查询

    dig @127.0.0.1 example.com

    检查ANSWER SECTION是否包含正确记录。

常见问题排查

  1. 区域文件语法错误:使用named-checkzone检查区域文件语法:
    sudo named-checkzone example.com /var/named/example.com.zone
  2. 服务无法启动:查看日志/var/log/messagesjournalctl -u named定位错误。

DNS服务安全加固建议

  1. 限制查询范围:将allow-query设置为特定网段(如{ 192.168.1.0/24; })。
  2. 启用DNSSEC:在区域配置中添加dnssec-policy并生成密钥对。
  3. 隐藏版本信息:在options段落中添加version "none";

相关问答FAQs

问题1:如何修改DNS服务器的监听端口?
答:编辑/etc/named.conf文件,在options段落中修改listen-on port 53listen-on-v6 port 53的端口号,例如改为listen-on port 5353,修改后重启named服务:sudo systemctl restart named,同时需在防火墙中开放新端口(如sudo firewall-cmd --permanent --add-port=5353/udp)。

问题2:DNS服务启动失败,提示“permission denied”如何解决?
答:通常是由于区域文件权限或SELinux上下文问题,首先检查文件权限:ls -l /var/named/example.com.zone,确保属主为named且权限为640,若SELinux启用,执行sudo restorecon -Fv /var/named/example.com.zone恢复默认上下文,若问题仍存在,查看日志journalctl -u named进一步排查。

分享:
扫描分享到社交APP
上一篇
下一篇