凌峰创科服务平台

Linux如何配置DNS服务器?

在Linux系统中配置DNS服务器通常使用BIND(Berkeley Internet Name Domain)软件,它是目前最广泛使用的DNS服务器软件之一,下面将详细介绍在Linux系统上安装、配置和管理DNS服务器的完整步骤,包括主配置文件、区域文件设置、启动服务及常见问题处理。

Linux如何配置DNS服务器?-图1
(图片来源网络,侵删)

安装BIND软件

首先需要确保系统已安装BIND相关软件包,以Ubuntu/Debian系统为例,使用以下命令安装:

sudo apt update
sudo apt install bind9 bind9utils bind9-doc

对于CentOS/RHEL系统,则使用:

sudo yum install bind bind-utils

安装完成后,BIND服务会自动启动,可通过systemctl status bind9(Ubuntu)或systemctl status named(CentOS)检查服务状态。

主配置文件解析

BIND的主配置文件为/etc/bind/named.conf(Ubuntu)或/etc/named.conf(CentOS),该文件包含全局参数、区域声明和选项设置,以下是关键配置项说明:

Linux如何配置DNS服务器?-图2
(图片来源网络,侵删)
配置项 说明 示例
options 定义服务器全局行为 directory "/var/cache/bind"; 指定区域文件存储目录
zone 定义DNS区域 zone "example.com" { type master; file "/etc/bind/db.example.com"; };
acl 访问控制列表 acl "trusted" { 192.168.1.0/24; localhost; };

options段落中,需修改listen-onallow-query参数以限制访问:

listen-on port 53 { 127.0.0.1; 192.168.1.1; }; // 监听特定IP
allow-query { localhost; 192.168.1.0/24; }; // 允许查询的网段

创建区域文件

区域文件存储DNS记录的详细信息,以正向区域example.com为例,创建文件/etc/bind/db.example.com

$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      A       192.168.1.1
ns1     IN      A       192.168.1.1
www     IN      A       192.168.1.10
mail    IN      CNAME   www.example.com.

反向区域文件/etc/bind/db.192.168.1用于解析IP到域名:

$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.
1       IN      PTR     ns1.example.com.
10      IN      PTR     www.example.com.

配置区域声明

named.conf中添加正向和反向区域声明:

Linux如何配置DNS服务器?-图3
(图片来源网络,侵删)
zone "example.com" {
    type master;
    file "/etc/bind/db.example.com";
    allow-transfer { 192.168.1.2; }; // 允许从服务器同步
};
zone "1.168.192.in-addr.arpa" {
    type master;
    file "/etc/bind/db.192.168.1";
};

启动与测试服务

配置完成后,检查语法错误并重启服务:

sudo named-checkconf  // 检查主配置文件
sudo named-checkzone example.com /etc/bind/db.example.com  // 检查区域文件
sudo systemctl restart bind9

使用dignslookup测试解析:

dig @127.0.0.1 www.example.com
nslookup 192.168.1.10

安全加固建议

  1. 限制查询范围:在options中设置allow-query { localhost; trusted; };仅允许授权客户端查询。
  2. 启用DNSSEC:通过dnssec-keygen生成密钥并在区域中添加DNSKEYRRSIG记录。
  3. 日志监控:配置logging段落记录查询日志,便于审计。

常见问题处理

  1. 服务启动失败:检查/var/log/syslog/var/log/named/named.log中的错误信息,常见问题包括权限错误或区域文件语法错误。
  2. 解析超时:确认防火墙(如ufw)允许53端口通信,检查allow-query设置是否正确。

相关问答FAQs

Q1: 如何配置DNS服务器实现域名转发?
A1: 在named.confoptions段落中添加forwarders指令,

forwarders { 8.8.8.8; 114.114.114.114; };
forward only; // 仅转发不递归

这样所有无法本地解析的查询将转发至指定的上游DNS服务器。

Q2: 如何为子域(如test.example.com)创建独立的DNS区域?
A2: 需在named.conf中新增子域区域声明,并创建对应的区域文件。

zone "test.example.com" {
    type master;
    file "/etc/bind/db.test.example.com";
};

在区域文件中添加子域的NS和A记录,同时确保父域example.com的NS记录指向子域的权威服务器。

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