云计算百科
云计算领域专业知识百科平台

@Linux搭建DNS-主从服务器

文章目录

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

Linux搭建DNS主从服务器

一、DNS概述

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

DNS基本概念

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

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

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

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

    环境准备

    • 主服务器:192.168.1.100(hostname: ns1.example.com)
    • 从服务器:192.168.1.101(hostname: ns2.example.com)
    • 域名:example.com
    • 操作系统:CentOS 7/RHEL 7或Ubuntu 20.04 LTS

    1. 主DNS服务器配置

    1.1 安装BIND软件包

    CentOS/RHEL:

    sudo yum install bind bind-utils -y

    Ubuntu/Debian:

    sudo apt-get install bind9 bind9utils bind9-doc -y

    1.2 配置主配置文件named.conf

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

    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)末尾添加:

    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):

    $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):

    $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 设置文件权限和所有权

    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 检查配置文件语法

    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服务

    systemctl start named
    systemctl enable named

    2. 从DNS服务器配置

    2.1 安装BIND软件包

    同主服务器安装步骤

    2.2 配置主配置文件named.conf

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

    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中添加:

    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 检查配置文件语法

    named-checkconf

    2.5 启动并启用BIND服务

    systemctl start named
    systemctl enable named

    3. 防火墙配置

    CentOS/RHEL:

    firewall-cmd –permanent –add-port=53/tcp
    firewall-cmd –permanent –add-port=53/udp
    firewall-cmd –reload

    Ubuntu:

    ufw allow 53/tcp
    ufw allow 53/udp
    ufw reload

    4. 测试DNS服务器

    4.1 在主服务器上测试

    dig @192.168.1.100 example.com
    dig @192.168.1.100 -x 192.168.1.100

    4.2 在从服务器上测试

    dig @192.168.1.101 example.com
    dig @192.168.1.101 -x 192.168.1.101

    4.3 检查区域传输

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

    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 reload 或 systemctl 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中添加:

    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. 区域文件更新流程

  • 编辑区域文件
  • 增加SOA序列号(建议使用YYYYMMDDNN格式)
  • 检查语法:named-checkzone
  • 重新加载区域:rndc reload example.com
  • 验证从服务器是否自动更新
  • 五、安全最佳实践

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

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

  • 安装和配置BIND DNS服务器软件
  • 设置主DNS服务器和从DNS服务器
  • 配置正向和反向解析区域
  • 实现区域自动传输
  • 处理常见问题并实施安全最佳实践
  • DNS主从架构提供了冗余和负载均衡,当主服务器不可用时,从服务器可以继续提供解析服务。为确保服务稳定性,应:

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

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

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » @Linux搭建DNS-主从服务器
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!