@Linux搭建DNS-主从服务器

文章目录

  • Linux搭建DNS主从服务器
    • 一、DNS概述
    • 二、搭建DNS主从服务器详细步骤
      • 环境准备
      • [1. 主DNS服务器配置](#1. 主DNS服务器配置)
        • [1.1 安装BIND软件包](#1.1 安装BIND软件包)
        • [1.2 配置主配置文件named.conf](#1.2 配置主配置文件named.conf)
        • [1.3 创建区域文件配置](#1.3 创建区域文件配置)
        • [1.4 创建正向区域文件](#1.4 创建正向区域文件)
        • [1.5 创建反向区域文件](#1.5 创建反向区域文件)
        • [1.6 设置文件权限和所有权](#1.6 设置文件权限和所有权)
        • [1.7 检查配置文件语法](#1.7 检查配置文件语法)
        • [1.8 启动并启用BIND服务](#1.8 启动并启用BIND服务)
      • [2. 从DNS服务器配置](#2. 从DNS服务器配置)
        • [2.1 安装BIND软件包](#2.1 安装BIND软件包)
        • [2.2 配置主配置文件named.conf](#2.2 配置主配置文件named.conf)
        • [2.3 创建区域文件配置](#2.3 创建区域文件配置)
        • [2.4 检查配置文件语法](#2.4 检查配置文件语法)
        • [2.5 启动并启用BIND服务](#2.5 启动并启用BIND服务)
      • [3. 防火墙配置](#3. 防火墙配置)
      • [4. 测试DNS服务器](#4. 测试DNS服务器)
        • [4.1 在主服务器上测试](#4.1 在主服务器上测试)
        • [4.2 在从服务器上测试](#4.2 在从服务器上测试)
        • [4.3 检查区域传输](#4.3 检查区域传输)
    • 三、常见问题及解决方案
      • [1. 区域传输失败](#1. 区域传输失败)
      • [2. DNS查询不响应](#2. DNS查询不响应)
      • [3. 序列号不匹配](#3. 序列号不匹配)
      • [4. 权限问题](#4. 权限问题)
      • [5. 反向解析不工作](#5. 反向解析不工作)
    • 四、维护与管理
      • [1. 常用命令](#1. 常用命令)
      • [2. 日志管理](#2. 日志管理)
      • [3. 区域文件更新流程](#3. 区域文件更新流程)
    • 五、安全最佳实践
    • 六、总结
    • 通过合理配置和维护,DNS主从服务器能够为企业网络或互联网应用提供高效、可靠的域名解析服务。

Linux搭建DNS主从服务器

一、DNS概述

DNS(Domain Name System,域名系统)是互联网的一项核心服务,它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。

DNS基本概念

  1. 域名空间:采用层次树状结构,从根域向下延伸
  2. 资源记录:DNS数据库中的基本数据单元
  3. 名称服务器:存储域名空间信息的服务器
  4. 解析器:客户端用于查询DNS服务器的程序

DNS服务器类型

  1. 主DNS服务器(Master):权威服务器,维护特定区域的原始记录
  2. 从DNS服务器(Slave):通过区域传输从主服务器获取数据
  3. 缓存DNS服务器:仅缓存查询结果,不管理任何区域
  4. 转发DNS服务器:将查询请求转发到其他DNS服务器

DNS记录类型

  • A记录:将主机名映射到IPv4地址
  • AAAA记录:将主机名映射到IPv6地址
  • CNAME记录:别名记录
  • MX记录:邮件交换记录
  • NS记录:名称服务器记录
  • PTR记录:反向解析记录
  • SOA记录:起始授权机构记录

二、搭建DNS主从服务器详细步骤

环境准备

1. 主DNS服务器配置

1.1 安装BIND软件包

CentOS/RHEL:

bash 复制代码
sudo yum install bind bind-utils -y

Ubuntu/Debian:

bash 复制代码
sudo apt-get install bind9 bind9utils bind9-doc -y
1.2 配置主配置文件named.conf

编辑/etc/named.conf(CentOS)或/etc/bind/named.conf(Ubuntu):

bash 复制代码
options {
    listen-on port 53 { 127.0.0.1; 192.168.1.100; };
    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     { localhost; 192.168.1.0/24; };
    allow-transfer  { 192.168.1.101; }; # 只允许从服务器传输
    
    recursion no;
    dnssec-enable yes;
    dnssec-validation yes;

    /* Path to ISC DLV key */
    bindkeys-file "/etc/named.iscdlv.key";

    managed-keys-directory "/var/named/dynamic";
};

logging {
    channel default_debug {
        file "data/named.run";
        severity dynamic;
    };
};

zone "." IN {
    type hint;
    file "named.ca";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
1.3 创建区域文件配置

/etc/named.rfc1912.zones(CentOS)或/etc/bind/named.conf.local(Ubuntu)末尾添加:

bash 复制代码
zone "example.com" IN {
    type master;
    file "example.com.zone";
    allow-update { none; };
    allow-transfer { 192.168.1.101; };
};

zone "1.168.192.in-addr.arpa" IN {
    type master;
    file "192.168.1.rev";
    allow-update { none; };
    allow-transfer { 192.168.1.101; };
};
1.4 创建正向区域文件

创建/var/named/example.com.zone(CentOS)或/etc/bind/zones/example.com.zone(Ubuntu):

bash 复制代码
$TTL 86400
@       IN SOA  ns1.example.com. admin.example.com. (
                2023071701 ; Serial
                3600       ; Refresh
                1800       ; Retry
                604800     ; Expire
                86400      ; Minimum TTL
)
@       IN NS   ns1.example.com.
@       IN NS   ns2.example.com.
@       IN A    192.168.1.200
ns1     IN A    192.168.1.100
ns2     IN A    192.168.1.101
www     IN A    192.168.1.200
mail    IN A    192.168.1.210
@       IN MX 10 mail.example.com.
1.5 创建反向区域文件

创建/var/named/192.168.1.rev(CentOS)或/etc/bind/zones/192.168.1.rev(Ubuntu):

bash 复制代码
$TTL 86400
@       IN SOA  ns1.example.com. admin.example.com. (
                2023071701 ; Serial
                3600       ; Refresh
                1800       ; Retry
                604800     ; Expire
                86400      ; Minimum TTL
)
@       IN NS   ns1.example.com.
@       IN NS   ns2.example.com.
100     IN PTR  ns1.example.com.
101     IN PTR  ns2.example.com.
200     IN PTR  www.example.com.
210     IN PTR  mail.example.com.
1.6 设置文件权限和所有权
bash 复制代码
chown root:named /var/named/example.com.zone
chown root:named /var/named/192.168.1.rev
chmod 640 /var/named/example.com.zone
chmod 640 /var/named/192.168.1.rev
1.7 检查配置文件语法
bash 复制代码
named-checkconf
named-checkzone example.com /var/named/example.com.zone
named-checkzone 1.168.192.in-addr.arpa /var/named/192.168.1.rev
1.8 启动并启用BIND服务
bash 复制代码
systemctl start named
systemctl enable named

2. 从DNS服务器配置

2.1 安装BIND软件包

同主服务器安装步骤

2.2 配置主配置文件named.conf

与主服务器类似,但修改以下部分:

bash 复制代码
options {
    listen-on port 53 { 127.0.0.1; 192.168.1.101; };
    allow-query     { localhost; 192.168.1.0/24; };
    allow-transfer  { none; }; # 从服务器通常不允许传输
};
2.3 创建区域文件配置

/etc/named.rfc1912.zones/etc/bind/named.conf.local中添加:

bash 复制代码
zone "example.com" IN {
    type slave;
    file "slaves/example.com.zone";
    masters { 192.168.1.100; };
};

zone "1.168.192.in-addr.arpa" IN {
    type slave;
    file "slaves/192.168.1.rev";
    masters { 192.168.1.100; };
};
2.4 检查配置文件语法
bash 复制代码
named-checkconf
2.5 启动并启用BIND服务
bash 复制代码
systemctl start named
systemctl enable named

3. 防火墙配置

CentOS/RHEL:
bash 复制代码
firewall-cmd --permanent --add-port=53/tcp
firewall-cmd --permanent --add-port=53/udp
firewall-cmd --reload
Ubuntu:
bash 复制代码
ufw allow 53/tcp
ufw allow 53/udp
ufw reload

4. 测试DNS服务器

4.1 在主服务器上测试
bash 复制代码
dig @192.168.1.100 example.com
dig @192.168.1.100 -x 192.168.1.100
4.2 在从服务器上测试
bash 复制代码
dig @192.168.1.101 example.com
dig @192.168.1.101 -x 192.168.1.101
4.3 检查区域传输

查看从服务器上的/var/named/slaves/目录,确认区域文件已传输。

bash 复制代码
ls -l /var/named/slaves/

三、常见问题及解决方案

1. 区域传输失败

问题现象:从服务器无法获取区域文件

解决方案

  • 检查主服务器allow-transfer设置
  • 检查从服务器mastersIP是否正确
  • 检查防火墙是否阻止了TCP 53端口
  • 查看日志/var/log/messages(CentOS)或/var/log/syslog(Ubuntu)

2. DNS查询不响应

问题现象:dig命令无响应或超时

解决方案

  • 检查named服务是否运行systemctl status named
  • 检查listen-on是否包含正确的IP
  • 检查allow-query是否包含客户端IP段
  • 检查防火墙设置

3. 序列号不匹配

问题现象:从服务器数据未更新

解决方案

  • 确保每次修改主服务器区域文件后增加SOA记录中的序列号
  • 在从服务器上执行rndc refresh example.com强制刷新

4. 权限问题

问题现象:named服务无法读取区域文件

解决方案

  • 确保区域文件所有者为root:named
  • 确保区域文件权限为640
  • 检查SELinux状态(CentOS)setenforce 0临时关闭测试

5. 反向解析不工作

问题现象:PTR查询无结果

解决方案

  • 检查反向区域文件是否正确
  • 确保每个A记录都有对应的PTR记录
  • 检查反向区域是否正确定义在named.conf中

四、维护与管理

1. 常用命令

  • 重新加载配置:rndc reloadsystemctl reload named
  • 重新加载特定区域:rndc reload example.com
  • 强制区域传输:rndc retransfer example.com
  • 查看统计信息:rndc stats
  • 清空缓存:rndc flush

2. 日志管理

BIND日志通常位于:

  • CentOS/RHEL: /var/log/messages
  • Ubuntu: /var/log/syslog

可以配置更详细的日志记录,在named.conf中添加:

bash 复制代码
logging {
    channel query.log {
        file "/var/log/named/query.log" versions 3 size 20m;
        severity info;
        print-time yes;
        print-category yes;
    };
    category queries { query.log; };
};

3. 区域文件更新流程

  1. 编辑区域文件
  2. 增加SOA序列号(建议使用YYYYMMDDNN格式)
  3. 检查语法:named-checkzone
  4. 重新加载区域:rndc reload example.com
  5. 验证从服务器是否自动更新

五、安全最佳实践

  1. 禁用递归查询 :对权威DNS服务器设置recursion no;
  2. 限制区域传输:仅允许从服务器IP
  3. 使用TSIG密钥:对区域传输进行认证
  4. 启用DNSSEC:提供数据来源验证和数据完整性保护
  5. 定期更新BIND:及时应用安全补丁
  6. 使用非root用户运行named -u named
  7. 限制查询 :通过allow-query限制可查询的客户端
  8. 隐藏版本信息 :在options中添加version "unknown";

六、总结

搭建DNS主从服务器是构建可靠域名解析服务的基础。通过本指南,我们完成了:

  1. 安装和配置BIND DNS服务器软件
  2. 设置主DNS服务器和从DNS服务器
  3. 配置正向和反向解析区域
  4. 实现区域自动传输
  5. 处理常见问题并实施安全最佳实践

DNS主从架构提供了冗余和负载均衡,当主服务器不可用时,从服务器可以继续提供解析服务。为确保服务稳定性,应:

  • 定期检查DNS服务器状态
  • 监控区域传输是否正常
  • 及时更新软件和安全补丁
  • 定期审核DNS记录
  • 实施备份策略

通过合理配置和维护,DNS主从服务器能够为企业网络或互联网应用提供高效、可靠的域名解析服务。

相关推荐
测试界清流7 分钟前
Jmeter socket接口测试
运维·服务器·网络
varphp40 分钟前
宝塔申请证书错误,提示 module ‘OpenSSL.crypto‘ has no attribute ‘sign‘
服务器·python·宝塔
运维有小邓@1 小时前
内部文件审计:企业文件服务器审计对网络安全提升有哪些帮助?
运维·服务器·web安全
共享家95271 小时前
linux_线程同步
java·linux·服务器
紫云无堤2 小时前
20250717 Ubuntu 挂载远程 Windows 服务器上的硬盘
服务器·windows·ubuntu
哔哥哔特商务网2 小时前
从12kW到800V,AI服务器电源架构变革下,功率器件如何解题?
服务器·人工智能·架构
kfepiza3 小时前
Linux的服务管理工具:`systemd`(`systemctl`)和`SysVinit ` 笔记250718
linux·shell
添乱3 小时前
「Linux命令基础」Shell常见命令
linux
deeper_wind3 小时前
ELK日志分析部署(小白的“升级打怪”成长之路)
运维·elk
小周学学学4 小时前
zabbix以SNMP(V2C)监控网络设备,以华为设备为例
服务器·华为·zabbix