5154

Good Luck To You!

centos7安装dns服务

entOS7安装DNS服务:先装bind包,改配置文件,建区域文件,启服务并测试

CentOS 7安装DNS服务详细指南

前期准备

1 关闭防火墙与SELinux

为了避免干扰DNS服务的正常运行,建议先关闭防火墙和SELinux:

systemctl stop firewalld         # 停止防火墙服务
setenforce 0                     # 临时禁用SELinux强制模式

注意:生产环境中请根据安全策略谨慎操作,此处仅为测试环境简化步骤。

2 配置静态IP地址

DNS服务器必须使用固定IP,动态获取可能导致解析异常,编辑网卡配置文件(以ens33为例):

vim /etc/sysconfig/networkscripts/ifcfgens33
```如下:
| 参数                | 值                          | 说明                     |
||||
| `BOOTPROTO`         | `static`                    | 启用静态IP               |
| `ONBOOT`            | `yes`                       | 开机启动该网络接口       |
| `IPADDR`            | *您的服务器IP*              | 如 `192.168.52.11`       |
| `NETMASK`          | `255.255.255.0`             | 子网掩码                 |
| `GATEWAY`          | *网关地址*                  | 通常为路由器LAN口IP      |
| `DNS1`/`DNS2`      | 留空或注释掉其他公共DNS      | 确保优先使用本地DNS服务  |
保存后重启网络服务使配置生效:
```bash
systemctl restart network

安装BIND软件包

BIND(Berkeley Internet Name Domain)是广泛使用的DNS实现方案,通过YUM仓库快速安装:

yum install y bind bindutils      # bind提供核心组件,bindutils含调试工具如nslookup、dig等

验证安装结果:

rpm qa | grep bind                 # 应显示已安装的版本信息,bind9.9.450.el7...

配置文件修改

1 主配置文件 /etc/named.conf

这是DNS服务的主要控制文件,关键改动包括:

  • 监听地址扩展:将默认的本地回环改为所有接口监听;
  • 允许查询范围调整:从仅本地扩展到任意客户端。

示例修改片段:

options {
    listenon port 53 { any; };      // 原为127.0.0.1,改为any表示接受所有网络接口的请求
    allowquery { any; };            // 允许任何主机发起递归查询
    ...                             // 其他保持默认即可
};

提示:若需限制特定网段访问,可用CIDR表示法替代any168.0.0/24

2 区域定义文件 /etc/named.rfc1912.zones

此文件用于声明管理的域名及对应数据源位置,添加以下两行定义正向/反向解析区域:

zone "example.com" IN {             // 正向解析域(自定义你的域名)
    type master;                    // 主服务器模式
    file "example.com.zone";         // 关联的数据文件路径
};
zone "1.168.192.inaddr.arpa" IN {   // 反向解析段(对应子网192.168.1.0/24)
    type master;
    file "revzone.zone";             // 反向解析的数据文件名
};

命名规则:“域名”部分需与实际需求匹配;“file”项后缀必须为.zone且存放于/var/named目录下。

3 创建正向解析文件 /var/named/example.com.zone

复制模板并编辑内容:

cd /var/named && cp named.localhost example.com.zone
vim example.com.zone
```假设Web服务器IP为192.168.52.11):
```dns
$TTL 86400                   // TTL生存时间(秒)
@   IN SOA     ns.example.com. admin.example.com. (   // SOA记录:起始授权机构
        2025080601 ;Serial          // 序列号随每次更新递增
        3600       ;Refresh          // 刷新间隔(秒)
        1800       ;Retry            // 重试间隔(秒)
        604800    ;Expire           // 过期时间(周)
        86400 )   ;Minimum TTL      // 最小缓存时间(天)
; Name Server Records
@       IN NS      ns.example.com.     // NS记录:指定名称服务器
ns     IN A       192.168.52.11       // A记录:将别名映射到IP地址
@       IN A       192.168.52.11      // 直接解析域名到同一台机器的不同服务端口
www    IN A       192.168.52.11       // www子域同样指向该IP

关键点:① 代表当前域(即example.com);② SOA中的邮箱地址用点号分隔代替@符号,如admin变成admin.example.com.。

4 创建反向解析文件 /var/named/revzone.zone

同样基于现有模板创建:

cp named.empty revzone.zone
vim revzone.zone

填写反向映射关系:

$TTL 86400
@   IN SOA     ns.example.com. admin.example.com. (
        2025080601 ;Serial
        3600       ;Refresh
        1800       ;Retry
        604800    ;Expire
        86400 )   ;Minimum TTL
; Name Server Records
@       IN NS      ns.example.com.
11      IN PTR     ns.example.com.      // PTR指针:将IP反查到域名

注意:PTR记录中的IP地址需与正向解析中的A记录一致。

权限设置与服务启动

确保数据文件归属正确:

chown root:named /var/named/*.zone    # 赋予named用户组读写权限
chmod 640 /var/named/*.zone           # 设置合理权限模式

启动并启用开机自启:

systemctl start named                # 立即启动服务
systemctl enable named               # 加入开机启动项

检查运行状态:

systemctl status named               # 确认进程是否存活且无错误日志

客户端验证测试

1 Linux系统测试命令

使用nslookupdig工具验证解析效果:

nslookup www.example.com             # 应返回192.168.52.11
nslookup 192.168.52.11               # 应返回ns.example.com或其他定义的名称
dig +short example.com               # 简洁输出格式查看详细信息

如果出现超时错误,检查以下几点:

  • 防火墙是否放行UDP/TCP 53端口;
  • SELinux是否仍处于Enforcing模式阻止了网络连接;
  • 主配置文件中的allowquery是否包含客户端所在网段。

2 Windows系统测试方法

修改客户端的本地连接属性,手动指定DNS服务器地址为本机IP,然后在命令提示符下执行:

ping www.example.com                 # 若能成功解析并连通,则说明配置有效
nslookup 192.168.52.11              # 查看反向解析结果是否符合预期

相关问题与解答

Q1: DNS服务启动失败怎么办?如何排查错误原因?

解答:首先查看日志获取线索:journalctl u named,常见原因包括语法错误(用namedcheckconf /etc/named.conf校验)、端口被占用(netstat tulnp | grep :53)、权限不足(检查/var/named目录属主),若提示“SELinux denied”,可尝试进一步放宽策略或暂时禁用SELinux。

Q2: 为什么客户端无法解析新添加的域名记录?

解答:可能原因有三:① 区域文件中未正确保存修改(确保:wq!强制写入);② TTL过长导致旧缓存未过期(降低测试时的TTL值加速刷新);③ 客户端未更新缓存(Windows下运行ipconfig /flushdns强制清空缓存),还需确认客户端的DNS设置

发表评论:

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

Powered By Z-BlogPHP 1.7.3

Copyright Your WebSite.Some Rights Reserved.