凌峰创科服务平台

dns linux 服务器 配置

目录

  1. DNS 基础概念:快速了解 DNS 是什么,以及我们配置的各个部分。
  2. 环境准备:服务器要求、域名注册和准备工作。
  3. 安装 BIND:在您的 Linux 服务器上安装 DNS 软件。
  4. 核心配置文件详解named.conf 和区域文件。
  5. 配置示例:一个完整的、可运行的域名(yourdomain.com)配置示例。
  6. 启动、测试与管理:如何启动服务、排查问题和日常管理。
  7. 安全加固:一些重要的安全配置建议。
  8. 高级配置(可选):配置 DNSSEC 和日志。

DNS 基础概念

在开始配置前,理解几个关键概念至关重要:

dns linux 服务器 配置-图1
(图片来源网络,侵删)
  • 正向解析:将域名(如 www.google.com)解析为 IP 地址(如 250.191.78),这是我们最常用的功能。
  • 反向解析:将 IP 地址解析为域名,常用于邮件服务器反垃圾邮件、服务器管理等。
  • 区域:DNS 数据库的一部分,包含了某个特定域名(如 yourdomain.com)的所有记录。
  • 资源记录:区域文件中的条目,定义了域名与 IP 地址或其他信息的映射关系,常见类型:
    • A 记录:将域名指向一个 IPv4 地址。
    • AAAA 记录:将域名指向一个 IPv6 地址。
    • CNAME 记录:别名记录,将一个域名指向另一个域名。
    • MX 记录:邮件交换记录,指定负责处理该域名邮件的服务器。
    • NS 记录:名称服务器记录,指定哪个 DNS 服务器负责解析该域名。
    • SOA 记录:起始授权机构记录,包含区域的元数据(如管理员邮箱、序列号等)。
  • 权威 DNS 服务器:存储了特定区域最终、官方记录的服务器,我们配置的就是这种。

环境准备

在开始之前,请确保您已准备好以下内容:

  • 一台 Linux 服务器:推荐使用 Ubuntu/Debian 或 CentOS/Rocky Linux,本指南将以 Ubuntu 22.04 为例。
  • 静态公网 IP 地址:您的服务器必须有一个固定的公网 IP,0.113.10
  • 一个已注册的域名yourdomain.com,您需要从这个域名的注册商(如 GoDaddy, Namecheap, 阿里云等)处获取 NS 记录修改权限
  • 服务器管理员权限:需要 sudoroot 权限。

安装 BIND

在 Ubuntu/Debian 系统上,打开终端并执行:

# 更新软件包列表
sudo apt update
# 安装 bind9 (Ubuntu/Debian) 或 bind (CentOS/Rocky)
sudo apt install bind9 -y

在 CentOS/Rocky Linux 系统上:

# 安装 EPEL 仓库(如果尚未安装)
sudo dnf install epel-release -y
# 安装 bind
sudo dnf install bind bind-utils -y

安装完成后,BIND 服务会自动启动,我们可以检查其状态:

dns linux 服务器 配置-图2
(图片来源网络,侵删)
# Ubuntu/Debian
sudo systemctl status bind9
# CentOS/Rocky
sudo systemctl status named

核心配置文件详解

BIND 的主要配置文件是 /etc/bind/named.conf (Ubuntu) 或 /etc/named.conf (CentOS),区域文件通常存放在 /etc/bind/zones/ (Ubuntu) 或 /var/named/ (CentOS)。

1 主配置文件 (named.conf)

这个文件是 BIND 的“大脑”,它告诉服务器去哪里查找区域文件,以及有哪些全局选项。

关键选项解析:

  • listen-on port 53 { any; };:监听所有网络接口的 53 端口。localhost0.0.1 表示只允许本机查询。
  • allow-query { any; };:允许任何 IP 地址查询您的 DNS 服务器,为了安全,可以修改为 localhost; 或您的 IP 地址段。
  • allow-recursion { none; };:递归查询。none 表示不对外提供递归查询服务,这可以防止您的服务器被用于 DNS 放大攻击,如果您的服务器是公共 DNS,则需要设置为 any;localhost;

2 区域文件

这是存储具体域名记录的地方,一个区域文件通常包含:

dns linux 服务器 配置-图3
(图片来源网络,侵删)
  1. SOA 记录:必须放在文件开头。
  2. NS 记录:指定当前域名的权威 DNS 服务器。
  3. 其他记录:A, CNAME, MX 等。

配置示例

假设我们要为域名 yourdomain.com 配置 DNS 服务器,服务器的公网 IP 是 0.113.10

创建区域目录 (如果不存在)

在 Ubuntu 上,BIND 通常会自动创建,如果没有:

sudo mkdir -p /etc/bind/zones

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

使用您喜欢的编辑器(如 nanovim)打开文件:

sudo nano /etc/bind/named.conf

在文件末尾添加以下内容,定义 yourdomain.com 的正向和反向区域。

// 正向区域定义
zone "yourdomain.com" {
    type master;          // 这是一个主权威服务器
    file "/etc/bind/zones/yourdomain.com.db"; // 区域文件路径
    allow-query { any; }; // 允许任何人查询此区域
};
// 反向区域定义 (根据您的IP段)
// 假设您的IP是 203.0.113.10,则网络段是 203.0.113.0/24
// 反向区域名称是 IP 段倒序,加上 in-addr.arpa
zone "113.0.203.in-addr.arpa" {
    type master;
    file "/etc/bind/zones/yourdomain.com.rev";
    allow-query { any; };
};

创建正向区域文件 (/etc/bind/zones/yourdomain.com.db)

sudo nano /etc/bind/zones/yourdomain.com.db

务必修改 ns1.yourdomain.comadmin.yourdomain.com 中的域名

;
; BIND data file for yourdomain.com
;
$TTL    86400
@       IN      SOA     ns1.yourdomain.com. admin.yourdomain.com. (
                              2025051501 ; Serial
                         604800 ; Refresh
                          86400 ; Retry
                        2419200 ; Expire
                         86400 ) ; Negative Cache TTL
;
; Name Servers
@       IN      NS      ns1.yourdomain.com.
@       IN      NS      ns2.yourdomain.com. ; 如果有备用服务器
; A Records for Name Servers (将 ns1 和 ns2 指向您的服务器IP)
ns1     IN      A       203.0.113.10
ns2     IN      A       203.0.113.10 ; 如果只有一个IP,也指向这里
; A Records for other hosts
www     IN      A       203.0.113.10
@       IN      A       203.0.113.10 ; 将根域名也指向IP
ftp     IN      A       203.0.113.11 ; 另一台服务器的IP
; CNAME Record
blog    IN      CNAME   www.yourdomain.com.
; MX Record
@       IN      MX      10 mail.yourdomain.com.
mail    IN      A       203.0.113.12 ; 邮件服务器的IP

注意

  • Serial 号必须每次修改区域文件后递增,否则从服务器不会更新。
  • 符号代表当前区域名(yourdomain.com)。

创建反向区域文件 (/etc/bind/zones/yourdomain.com.rev)

sudo nano /etc/bind/zones/yourdomain.com.rev

确保 IP 地址和主机名与正向区域一致。

;
; BIND reverse data file for 203.0.113.0/24
;
$TTL    86400
@       IN      SOA     ns1.yourdomain.com. admin.yourdomain.com. (
                              2025051501 ; Serial
                         604800 ; Refresh
                          86400 ; Retry
                        2419200 ; Expire
                         86400 ) ; Negative Cache TTL
;
; Name Servers
@       IN      NS      ns1.yourdomain.com.
@       IN      NS      ns2.yourdomain.com.
; PTR Records (反向解析)
10      IN      PTR     ns1.yourdomain.com.
10      IN      PTR     www.yourdomain.com.
10      IN      PTR     yourdomain.com.
11      IN      PTR     ftp.yourdomain.com.
12      IN      PTR     mail.yourdomain.com.

设置文件权限

BIND 进程 (named) 需要能够读取这些区域文件,在 Ubuntu 上,它们通常有正确的权限,如果没有,可以执行:

sudo chown root:bind /etc/bind/zones/yourdomain.com.db
sudo chown root:bind /etc/bind/zones/yourdomain.com.rev
sudo chmod 640 /etc/bind/zones/yourdomain.com.db
sudo chmod 640 /etc/bind/zones/yourdomain.com.rev

检查配置语法

在重启服务前,务必检查配置文件是否有语法错误:

# Ubuntu/Debian
sudo named-checkconf
sudo named-checkzone yourdomain.com /etc/bind/zones/yourdomain.com.db
sudo named-checkzone 113.0.203.in-addr.arpa /etc/bind/zones/yourdomain.com.rev
# CentOS/Rocky
sudo named-checkconf
sudo named-checkzone yourdomain.com /var/named/yourdomain.com.db
sudo named-checkzone 113.0.203.in-addr.arpa /var/named/yourdomain.com.rev

如果命令没有输出任何信息,说明配置正确,如果有错误,它会告诉你哪一行有问题。

重启 BIND 服务

# Ubuntu/Debian
sudo systemctl restart bind9
# CentOS/Rocky
sudo systemctl restart named

启动、测试与管理

1 在服务器上测试

使用 dignslookup 工具进行测试。

# 测试正向解析
dig @localhost yourdomain.com
dig @localhost www.yourdomain.com
# 测试反向解析
dig @localhost -x 203.0.113.10
# 测试 MX 记录
dig @localhost yourdomain.com MX

2 在本地电脑上测试

关键步骤:您需要将您的电脑 DNS 服务器地址修改为您新配置的 DNS 服务器 IP (0.113.10),才能正确测试。

  • Windows: 网络和 Internet -> 网络和共享中心 -> 更改适配器设置 -> 右键点击网络连接 -> 属性 -> Internet 协议版本 4 (TCP/IPv4) -> 属性 -> 使用下面的 DNS 服务器地址 -> 填入 0.113.10
  • macOS: 系统偏好设置 -> 网络 -> 高级 -> DNS -> 点击 号添加 0.113.10

修改后,在命令行中测试:

# 在 Windows (cmd) 或 macOS/Linux (terminal) 中
nslookup yourdomain.com
nslookup 203.0.113.10

如果返回了正确的 IP 地址和域名,说明您的 DNS 服务器配置成功!

3 配置域名注册商

您需要去您的域名注册商(如 GoDaddy)那里,将 yourdomain.com 的 NS 记录修改为您配置的服务器。

通常需要添加两条 NS 记录:

  • ns1.yourdomain.com (指向 0.113.10)
  • ns2.yourdomain.com (也指向 0.113.10,或另一个备用 IP)

注意:DNS 修改可能需要几分钟到 48 小时才能在全球范围内生效(这个过程称为 DNS 传播)。


安全加固

生产环境中,安全性至关重要。

  1. 限制查询:在 named.conf 中,将 allow-query { any; } 修改为只允许您自己的 IP 或信任的 IP。

    allow-query { localhost; 192.168.1.0/24; }; // 允许本机和局域网
  2. 禁止递归:防止您的服务器被用作放大攻击的跳板。

    allow-recursion { none; }; // 或者 { localhost; };
  3. 使用防火墙:只允许 53 端口(TCP/UDP)的访问。

    # Ubuntu (ufw)
    sudo ufw allow 53/tcp
    sudo ufw allow 53/udp
    # CentOS (firewalld)
    sudo firewall-cmd --permanent --add-service=dns
    sudo firewall-cmd --reload
  4. 运行在 Chroot 环境中:这是 BIND 的一个安全特性,将其限制在一个目录中运行,现代版本的 BIND 在某些发行版中默认已启用。


高级配置(可选)

配置 DNSSEC

DNSSEC (DNS Security Extensions) 通过数字签名来验证 DNS 响应的真实性和完整性,可以有效防止 DNS 欺骗攻击,配置过程相对复杂,涉及生成密钥对、将公钥注册到您的域名注册商等,这里不作详述,但强烈建议对重要域名启用。

配置日志

您可以在 named.conf 中配置日志,以便排查问题。

logging {
    channel default_log {
        file "/var/log/named/default.log" versions 3 size 1m; // 日志文件位置和大小
        severity info; // 日志级别
        print-time yes; // 打印时间戳
    };
    category default {
        default_log;
    };
};

创建日志文件并设置权限:

sudo touch /var/log/named/default.log
sudo chown bind:bind /var/log/named/default.log
分享:
扫描分享到社交APP
上一篇
下一篇