5154

Good Luck To You!

centos7搭建dns环境

CentOS 7上搭建DNS环境,需安装bind相关包,配置主文件及区域文件,重启服务并测试解析

CentOS7搭建DNS环境详细指南

前期准备与系统设置

关闭防火墙及SELinux(可选但推荐)

为避免干扰DNS服务运行,建议暂时关闭防火墙和SELinux,执行以下命令:

systemctl disable firewalld     # 禁用防火墙自启动
systemctl stop firewalld        # 停止防火墙服务
setenforce 0                   # 临时关闭SELinux
vi /etc/selinux/config         # 永久关闭,将SELINUX=enforcing改为SELINUX=disabled

注意:生产环境中需谨慎操作,仅用于测试可忽略此步骤。

安装必要软件包

使用YUM安装BIND及其工具:

yum y install bind bindutils   # 基础组件
yum y install bind*            # 安装所有相关依赖(含文档等)

配置主文件/etc/named.conf

该文件定义全局参数,关键项如下表所示: | 参数 | 作用说明 | 示例值 | |||| | listenon port 53 | 指定监听的IP地址和端口 | { any; };(允许所有IP访问) | | directory | 区域数据文件存储路径 | "/var/named" | | allowquery | 允许发起查询的客户机范围 | { any; };(允许任意主机查询) | | recursion yes | 启用递归解析能力(若作为缓存服务器必开) | — | | forwarders | 上游DNS服务器列表(当本地无记录时转发请求) | { 114.114.114.114; }; | | dnssecenable | 是否支持DNSSEC安全验证 | yes | | dnssecvalidation| 是否强制验证签名 | no(提高解析速度) |

修改完成后运行namedcheckconf检查语法错误。

定义区域配置/etc/named.rfc1912.zones

在此文件中声明需要管理的域名或子网,例如添加两个典型场景:

正向解析示例(如wifite.cn):

zone "wifite.cn" IN {
    type master;              # 主服务器模式
    file "named.wifite.cn";   # 对应的数据文件名必须一致
    allowupdate { none; };   # 禁止动态更新(根据需求调整)
};

反向解析示例(对应192.168.0.0/24网段):

zone "0.168.192.inaddr.arpa" IN {
    type master;
    file "named.192.168.0";    # 注意文件名格式规范
    allowupdate { none; };
};

提示:多个区域之间用分号隔开,确保缩进清晰易读。

创建区域数据文件并设置权限

所有自定义的区域文件默认存放在/var/named目录下,需手动创建并配置内容,以下是具体操作步骤:

正向解析文件(以named.wifite.cn为例):

  1. 基于模板复制:
    cp p /var/named/named.localhost /var/named/named.wifite.cn
    $TTL 1D
    @       IN SOA  @ rname.invalid. (
                                               0       ; serial(每次修改递增)
                                               1D      ; refresh(刷新间隔)
                                               1H      ; retry(重试延迟)
                                               1W      ; expire(过期时间)
                                               3H )    ; minimum(最小缓存时间)
       NS      @               ; Name Server记录指向自身
       A       127.0.0.1       ; Localhost解析
       AAAA    ::1             ; IPv6本地环回地址
       mes     A       192.168.0.8 ; 自定义主机名映射到指定IP
  2. 校验并更改属主:
    chown :named /var/named/named.wifite.cn      # 授权给named用户组
    namedcheckzone "wifite.cn" /var/named/named.wifite.cn verbose

反向解析文件(以named.192.168.0为例):

  1. 同样基于模板创建:
    cp p /var/named/named.localhost /var/named/named.192.168.0
    ```关键区别在于使用PTR记录):
    ```dns
    $TTL 1D
    @       IN SOA  @ rname.invalid. (
                                               0       ; serial
                                               1D      ; refresh
                                               1H      ; retry
                                               1W      ; expire
                                               3H )    ; minimum
       NS      @
       A       127.0.0.1
       AAAA    ::1
       8       PTR     mes.wifite.cn. ; IP反查域名
  2. 设置权限并验证:
    chown :named /var/named/named.192.168.0
    namedcheckzone "0.168.192.inaddr.arpa" /var/named/named.192.168.0 verbose

开放防火墙端口并重启服务

为了让外部设备能够正常访问DNS服务,需要在防火墙中放行TCP/UDP的53端口:

firewallcmd permanent addport=53/tcp
firewallcmd permanent addport=53/udp
firewallcmd reload                 # 重新加载规则使配置生效

启动/重启BIND服务:

systemctl start named         # 立即启动服务
systemctl enable named        # 设置为开机自启
systemctl restart named       # 应用新配置后重新启动(或用rndc reload平滑加载)

状态检查命令:systemctl status namedrndc status

客户端验证与常见问题排查

Linux客户端测试方法:

编辑/etc/resolv.conf,添加DNS服务器IP:

nameserver <你的DNS服务器IP>

保存后测试解析效果:

nslookup www.example.com         # 正向查询域名对应IP
dig x <IP地址>                  # 反向查询IP对应的域名
ping <域名>                     # 通过域名能否连通目标主机

Windows客户端设置:

进入网络连接属性→IPv4设置→手动指定DNS服务器地址为CentOS机的IP。

相关问题与解答

Q1: 为什么修改了配置文件但服务不生效?

A: 可能原因包括:①未重新加载配置(应使用rndc reload或重启服务);②语法错误导致命名守护进程崩溃(需用namedcheckconfnamedcheckzone逐层排查);③防火墙未放行53端口;④SELinux阻止了绑定操作(查看审计日志ausearch m avc),建议按顺序执行以下操作:

namedcheckconf          # 检查主配置文件语法
namedcheckzone ZONEFILE # 验证特定区域的完整性
journalctl u named      # 查看详细错误日志

Q2: 如何实现负载均衡或高可用架构?

A: 可通过两种方式扩展:①搭建从服务器进行区域传输(配置slave类型并在主服添加alsonotify指令);②使用keepalived实现故障转移,例如在从服务器的named.conf中配置:

zone "example.com" IN {
    type slave;
    masters { primary_ip; };
    file "slave.example.com";
};

然后在主服务器的SOA记录中加入`alsonotify { slave_ip;

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-BlogPHP 1.7.3

Copyright Your WebSite.Some Rights Reserved.