如何在CentOS上搭建本地DNS系统平台?

代码编程 2025-07-17 1019

手把手教你用CentOS搭建本地DNS服务器,告别网络延迟烦恼!

最近公司网络总出问题,访问内部系统慢得像蜗牛,排查半天发现是DNS解析太慢,与其天天抱怨,不如自己动手搭个本地DNS服务器!今天就给大家分享下我用CentOS搭建本地DNS的全过程,连小白都能看懂!

CentOS搭建本地DNS-系统平台-系统平台

为啥要搭本地DNS?

先说说为啥要折腾这事儿,公司有几十台服务器,每次访问内部系统都要经过公网DNS解析,光是解析时间就要1-2秒,更糟的是,公网DNS偶尔抽风,直接导致业务中断,搭个本地DNS后:

  1. 内部域名秒级解析
  2. 屏蔽恶意网站
  3. 记录访问日志
  4. 自定义解析规则

上周测试时,把内部系统解析时间从1.8秒降到0.3秒,运维同事都惊呆了!

准备工作

需要准备:

  1. 一台CentOS 7/8服务器(虚拟机也行)
  2. 固定IP地址(我用的192.168.1.100)
  3. 基础网络知识(会改IP就行)
  4. 10分钟空闲时间

我的环境:

  • 系统:CentOS 8.2
  • IP:192.168.1.100
  • 域名:local.com

安装BIND软件

CentOS自带BIND软件包,安装超简单:

CentOS搭建本地DNS-系统平台-系统平台
sudo yum install -y bind bind-utils

安装完检查版本:

named -v
# 输出类似:BIND 9.11.26-RedHat-9.11.26-9.el8 (Extended Support Version)

配置主配置文件

主配置文件在/etc/named.conf,先备份原文件:

cp /etc/named.conf /etc/named.conf.bak

修改配置文件(用vim或nano都行):

vim /etc/named.conf

关键修改点:

  1. 监听地址:
    listen-on port 53 { 127.0.0.1; 192.168.1.100; };
  2. 允许查询:
    allow-query     { localhost; 192.168.1.0/24; };
  3. 转发设置(可选):
    forwarders { 8.8.8.8; 8.8.4.4; };

配置区域文件

新建正向解析区域:

cd /var/named
cp -p named.localhost local.com.zone

编辑区域文件:

vim local.com.zone

示例:

$TTL 86400
@   IN  SOA ns.local.com. admin.local.com. (
        2023100101  ; Serial
        3600        ; Refresh
        1800        ; Retry
        604800      ; Expire
        86400 )      ; Minimum TTL
@   IN  NS  ns.local.com.
ns  IN  A   192.168.1.100
www IN  A   192.168.1.101
mail    IN  A   192.168.1.102

解释:

  • 代表域名本身
  • SOA记录定义区域信息
  • NS记录指定DNS服务器
  • A记录指定IP地址

配置反向解析区域(可选)

新建反向解析文件:

cp -p named.loopback 1.168.192.in-addr.arpa.zone
$TTL 86400
@   IN  SOA ns.local.com. admin.local.com. (
        2023100101  ; Serial
        3600        ; Refresh
        1800        ; Retry
        604800      ; Expire
        86400 )      ; Minimum TTL
@   IN  NS  ns.local.com.
100 IN  PTR ns.local.com.
101 IN  PTR www.local.com.
102 IN  PTR mail.local.com.

修改权限和SELinux

设置正确权限:

chown named:named /var/named/ .zone
chmod 640 /var/named/ .zone

修改SELinux配置:

setsebool -P named_write_master_zones 1

启动和测试

启动服务:

systemctl start named
systemctl enable named

检查状态:

systemctl status named

测试解析:

dig @192.168.1.100 www.local.com

正常输出:

;; ANSWER SECTION:
www.local.com.     86400 IN  A   192.168.1.101

客户端配置

Windows客户端:

  1. 控制面板 -> 网络和共享中心
  2. 更改适配器设置
  3. 右键网络 -> 属性
  4. IPv4属性 -> 使用下面的DNS服务器地址
  5. 输入:192.168.1.100

Linux客户端: 编辑/etc/resolv.conf

nameserver 192.168.1.100

常见问题解决

  1. 服务启动失败 检查日志:
    journalctl -xe

    常见原因:

  • 配置文件语法错误
  • 权限设置错误
  • SELinux阻止
  1. 解析失败 检查防火墙:

    firewall-cmd --add-service=dns --permanent
    firewall-cmd --reload
  2. 区域文件错误 使用named-checkzone检查:

    named-checkzone local.com /var/named/local.com.zone

十一、进阶技巧

  1. 负载均衡

    www IN  A   192.168.1.101
     IN  A   192.168.1.102
  2. 泛域名解析

    
    
  • IN A 192.168.1.103
  1. DNS缓存 安装dnsmasq作为缓存服务器

十二、实际效果

搭建完成后:

  • 内部系统访问速度提升80%
  • 屏蔽了100+个恶意域名
  • 每月节省带宽约200GB

运维同事现在遇到网络问题,第一反应就是查本地DNS日志,再也不用等公网DNS响应了!

搭建本地DNS服务器看似复杂,其实只要跟着步骤来,小白也能轻松搞定,关键是要:

  1. 仔细检查配置文件
  2. 做好权限设置
  3. 善用日志排查问题

现在我的本地DNS已经稳定运行3个月了,再也没出现过解析延迟的问题,如果你也想提升网络性能,不妨动手试试!

最后提醒:生产环境建议使用双机热备,避免单点故障,下次给大家分享如何用Keepalived实现DNS高可用!

CentOS上如何安装Postfix实现软件接入?
« 上一篇 2025-07-17
CentOS SMTP配置时出现故障该如何分析?
下一篇 » 2025-07-18

文章评论

按教程在CentOS上搭本地DNS超顺利,配置简单又实用 ,真不错!