DNS服务部署

以下是CentOS服务器上搭建和管理DNS服务器的详细步骤,包含多域名和多网段支持:

一、部署DNS服务器步骤(使用BIND9)

  1. 安装BIND软件包
sudo yum install bind bind-utils -y
  1. 启动服务并设置开机自启
sudo systemctl start named
sudo systemctl enable named

二、主配置文件 /etc/named.conf

options {
    // 监听所有IPv4和IPv6地址
    listen-on port 53 { any; };
    listen-on-v6 port 53 { ::1; };
    
    // 允许所有内网网段查询
    allow-query {
        localhost;
        192.168.0.0/16;
        172.16.0.0/24;
    };

    // 允许递归查询的网段
    allow-recursion {
        192.168.0.0/16;
        172.16.0.0/24;
    };

    // 资源限制(按需调整)
    max-cache-size  512M;
    recursive-clients 1000;

    // 安全配置
    version "Not disclosed";
    dnssec-validation yes;
    directory "/var/named";
};

// ================= 区域声明 =================
// visionlocal.com 主域配置
zone "visionlocal.com" IN {
    type master;
    file "visionlocal.com.zone";
    allow-update { none; };
};

// visioncall.com 新增域名配置
zone "visioncall.com" IN {
    type master;
    file "visioncall.com.zone";
    allow-update { none; };
};

// 反向解析区域声明
zone "8.168.192.in-addr.arpa" IN {
    type master;
    file "8.168.192.rev";
};

zone "110.168.192.in-addr.arpa" IN {
    type master;
    file "110.168.192.rev";
};

zone "111.168.192.in-addr.arpa" IN {
    type master;
    file "111.168.192.rev";
};

zone "0.16.172.in-addr.arpa" IN {
    type master;
    file "0.16.172.rev";
};

三、区域文件配置

1. 正向解析文件

/var/named/visionlocal.com.zone

$TTL 1D
@    IN  SOA  ns1.visionlocal.com. admin.visionlocal.com. (
             2024072501 ; Serial
             8H         ; Refresh
             2H         ; Retry
             4W         ; Expire
             1D )       ; Minimum TTL

; NS记录
@        IN  NS   ns1.visionlocal.com.

; A记录
ns1     IN  A     192.168.8.88
www     IN  A     192.168.8.20
mail    IN  A     192.168.8.30

; 多网段记录
iot110   IN  A  192.168.110.66
sensor111 IN  A 192.168.111.33
bigserver IN  A 192.168.110.88
            IN  A 192.168.111.88

/var/named/visioncall.com.zone

$TTL 1D
@    IN  SOA  ns1.visioncall.com. admin.visioncall.com. (
             2024072501 ; Serial
             8H
             2H
             4W
             1D )

; NS记录
@        IN  NS   ns1.visioncall.com.

; A记录
ns1     IN  A     192.168.111.254
www     IN  A     192.168.111.254
mail    IN  A     192.168.111.100

2. 反向解析文件

/var/named/8.168.192.rev (192.168.8.0/24)

$TTL 1D
@   IN  SOA  ns1.visionlocal.com. admin.visionlocal.com. (
            2024072501
            8H
            2H
            4W
            1D )
    IN  NS   ns1.visionlocal.com.

88   IN  PTR  ns1.visionlocal.com.
20   IN  PTR  www.visionlocal.com.
30   IN  PTR  mail.visionlocal.com.

/var/named/111.168.192.rev (192.168.111.0/24)

$TTL 1D
@   IN  SOA  ns1.visionlocal.com. admin.visionlocal.com. (
            2024072501
            8H
            2H
            4W
            1D )
    IN  NS   ns1.visionlocal.com.

254  IN  PTR  ns1.visioncall.com.
100  IN  PTR  mail.visioncall.com.
33   IN  PTR  sensor111.visionlocal.com.
88   IN  PTR  bigserver.visionlocal.com.

/var/named/0.16.172.rev (172.16.0.0/24)

$TTL 1D
@   IN  SOA  ns1.visionlocal.com. admin.visionlocal.com. (
            2024072501
            8H
            2H
            4W
            1D )
    IN  NS   ns1.visionlocal.com.

100  IN  PTR  dev01.visionlocal.com.
200  IN  PTR  nas.visionlocal.com.

四、部署后操作

# 1. 检查所有配置
sudo named-checkconf
sudo named-checkzone visionlocal.com /var/named/visionlocal.com.zone
sudo named-checkzone visioncall.com /var/named/visioncall.com.zone

# 2. 修复SELinux上下文
sudo restorecon -Rv /var/named

# 3. 重启服务
sudo systemctl restart named

# 4. 防火墙配置(CentOS 7+)
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.0.0/16" service name="dns" accept'
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="172.16.0.0/24" service name="dns" accept'
sudo firewall-cmd --reload

五、验证解析

dig @192.168.8.88 bigserver.visionlocal.com +short
dig @192.168.8.88 ns1.visioncall.com +short

# 反向解析测试
dig -x 192.168.111.254 @192.168.8.88 +short  # 应返回ns1.visioncall.com.
dig -x 172.16.0.200 @192.168.8.88 +short     # 应返回nas.visionlocal.com.

# 跨网段测试(在172.16.0.100客户端执行)
nslookup sensor111.visionlocal.com 192.168.8.88

六、配置管理规范

  1. 序列号管理
    每次修改区域文件后,严格按YYYYMMDDNN格式递增Serial值
  2. 备份策略
# 每日自动备份
sudo crontab -e
0 2 * * * /bin/cp -p /var/named/*.zone /backup/dns/zones/
  1. 监控指标
# 实时监控查询量
sudo rndc stats
grep 'queries' /var/named/data/named_stats.txt

七、关键配置说明

  1. 正向区域文件命名规则
    • 文件名为 visioncall.com.zone,与域名严格对应,方便维护。
  2. SOA记录参数说明
admin.visioncall.com.  ; 管理员邮箱(实际使用需改为真实地址)
2024072501             ; 序列号格式 YYYYMMDDNN,每次修改递增
  1. 复用现有反向区域
    • 192.168.111.254 属于已配置的 111.168.192.in-addr.arpa 反向区域,无需新建反向文件,只需追加PTR记录。
  2. 多服务共用IP场景
    • 示例中 ns1www 均指向 192.168.111.254,实际可根据需求拆分。

八、日常管理命令

场景 命令
修改区域文件后生效 sudo rndc reload visioncall.com
重载DNS服务, 热重载不中断服务 sudo systemctl reload named
监控域名查询日志 `sudo journalctl -u named

九、故障排查指南

现象 检查步骤 解决方案
正向解析失败 dig +trace visioncall.com @192.168.8.88 检查区域文件权限和NS记录
反向解析返回SERVFAIL named-checkzone 111.168.192.in-addr.arpa /var/named/111.168.192.rev 验证PTR记录格式
跨网段客户端无法解析 sudo firewall-cmd --list-all --zone=internal 确认防火墙允许所有内网网段查询
172网段无法解析 sudo tcpdump -i any port 53 and net 172.16.0.0/24 防火墙阻止/ACL未配置
反向解析返回SERVFAIL named-checkzone 0.16.172.in-addr.arpa /var/named/0.16.172.rev 区域文件格式错误
递归查询超时 dig +trace google.com @192.168.8.88 允许递归的网段未包含172.16.0.0/24

建议每月检查所有反向区域文件的serial连续性,可使用以下命令:

sudo grep 'Serial' /var/named/*.rev

按此配置后,visioncall.com 域名及其相关服务的正反向解析即可生效。新增子域名(如 api.visioncall.com)时,只需在正向区域文件中添加对应A记录并递增Serial即可。

该配置方案完整支持:
✅ 多域名解析(visionlocal.com + visioncall.com)
✅ 多网段覆盖(192.168.x.x + 172.16.0.x)
✅ 双向解析验证
✅ 安全防护机制

posted @ 2025-06-24 16:52  youemby  阅读(84)  评论(0)    收藏  举报