如何在CentOS上搭建本地DNS并确保配件支持到位?
手把手教你用CentOS搭建本地DNS服务器,告别网络延迟烦恼!
最近公司网络总出问题,访问内部系统慢得像蜗牛,排查半天发现是DNS解析太慢,与其天天抱怨,不如自己动手搭个本地DNS服务器!今天就给大家分享下我用CentOS搭建本地DNS的全过程,连小白都能看懂!

为啥要搭本地DNS?
先说说我为啥要折腾这事儿,公司有十几个内部系统,每次访问都要先解析域名,但公网DNS服务器经常抽风,解析时间动不动就3秒起步,更气人的是,有些系统根本不需要对外开放,结果还得绕一圈公网DNS。
搭个本地DNS的好处可太多了:
- 速度起飞:内部域名秒解析,访问速度提升300%
- 安全可控:再也不用担心公网DNS被劫持
- 灵活管理:想改哪个域名解析就改哪个
- 节省带宽:内部流量不走公网,省下不少流量费
准备工作
要搭DNS服务器,得先准备这些:
- 一台CentOS 7/8服务器(虚拟机也行)
- 固定IP地址(我用的192.168.1.100)
- 域名管理权限(公司内部域名.local)
- 基础Linux命令知识(不会也没关系,我教你)
安装BIND软件
CentOS自带BIND软件包,安装超简单:
sudo yum install -y bind bind-utils
安装完记得检查版本:

named -v
看到版本号就说明安装成功了,我装的是BIND 9.11版本,完全够用。
配置主配置文件
BIND的主配置文件在/etc/named.conf
,打开后先改这几个地方:
-
监听地址: 把
listen-on port 53 { 127.0.0.1; };
改成:listen-on port 53 { any; };
这样所有IP都能访问
-
允许查询: 把
allow-query { localhost; };
改成:allow-query { any; };
(生产环境建议改成内网IP段)
-
转发设置: 在最后加上:
forwarders { 8.8.8.8; 8.8.4.4; };
这样解析不了的域名会自动转发给Google DNS
配置区域文件
这是最关键的部分!在/etc/named.rfc1912.zones
里添加:
zone "local" IN { type master; file "local.zone"; allow-update { none; }; };
然后在/var/named
目录下创建local.zone
文件:
$TTL 86400 @ IN SOA ns.local. admin.local. ( 2023100101 ; Serial 3600 ; Refresh 1800 ; Retry 604800 ; Expire 86400 ) ; Minimum TTL @ IN NS ns.local. ns IN A 192.168.1.100 www IN A 192.168.1.10 mail IN A 192.168.1.20
这个配置的意思是:
- 本地域名是
.local
- DNS服务器IP是192.168.1.100
- www.local解析到192.168.1.10
- mail.local解析到192.168.1.20
设置权限并启动服务
配置文件写好后,要改权限:
chown named:named /var/named/local.zone chmod 640 /var/named/local.zone
然后启动服务:
systemctl start named systemctl enable named
检查是否启动成功:
systemctl status named
看到active (running)
就说明OK了。
测试DNS解析
现在来测试下效果:
-
在服务器上用
dig
命令:dig @192.168.1.100 www.local
应该能看到解析结果
-
在其他电脑上改DNS: 把网络设置里的DNS改成192.168.1.100
-
测试访问: 在浏览器输入
www.local
,应该能直接访问到192.168.1.10
遇到的问题及解决方案
我第一次搭建时遇到这些问题:
-
解析失败: 检查
/var/log/messages
日志,发现是SELinux阻止了named访问文件 解决方法:setenforce 0
临时关闭SELinux(生产环境建议配置SELinux策略) -
无法启动服务: 检查
/etc/named.conf
的语法错误 解决方法:用named-checkconf
命令检查配置 -
解析超时: 发现是防火墙阻止了53端口 解决方法:
firewall-cmd --add-port=53/tcp --add-port=53/udp --permanent
进阶配置
等基础功能跑通后,还可以玩这些:
-
负载均衡:
www IN A 192.168.1.10 www IN A 192.168.1.11
这样访问www.local会随机返回两个IP
-
泛域名解析:
.test IN A 192.168.1.200
所有 .test的域名都解析到192.168.1.200
-
反向解析: 在
named.rfc1912.zones
里添加:zone "1.168.192.in-addr.arpa" IN { type master; file "1.168.192.rev"; };
然后创建
168.192.rev
文件:$TTL 86400 @ IN SOA ns.local. admin.local. ( 2023100101 ; Serial 3600 ; Refresh 1800 ; Retry 604800 ; Expire 86400 ) ; Minimum TTL
@ IN NS ns.local. 100 IN PTR ns.local. 10 IN PTR www.local.
### 十、
搭完这个本地DNS服务器后,公司内部系统访问速度明显提升,再也不用等那3秒的解析时间了,而且管理起来特别方便,想改哪个域名解析直接改配置文件就行。
建议大家先在虚拟机里测试,等熟练了再部署到生产环境,记得定期备份配置文件,万一出问题能快速恢复。
最后提醒下,BIND的配置文件对格式要求很严格,每个分号、空格都不能错,建议用文本编辑器(如VSCode)的语法高亮功能,能避免很多低级错误。
希望这篇教程能帮到大家,如果有任何问题欢迎留言交流!下次我准备分享如何用CentOS搭建邮件服务器,感兴趣的朋友记得关注哦!
文章评论