虚拟机搭建DNS服务器,解析区域从哪开始配置
在虚拟机里装DNS服务器,核心工作是创建并配置解析区域你把域名和IP的对应关系写进去,DNS才能替你干活。不管是Windows Server还是Linux发行版,主流做法都是在虚拟机里装好DNS服务角色,然后手动创建正向解析区域(域名转IP)和反向解析区域(IP转域名),最后验证解析是否生效,下面把每一步掰开揉碎,照着操作就能跑通。
配置前先想清楚:你的DNS解析区域需要哪种类型
在动手之前,搞清楚你要建的解析区域是给谁用的,不同使用场景对应不同的区域类型,选错了后面会浪费不少时间。
主要区域、辅助区域、存根区域怎么选
这是Windows Server DNS管理器里的三兄弟,行业共识认为它们的定位完全不同:
- 主要区域:权威数据存储在本机,你的域名解析记录直接写在这里,修改即时生效,大多数自建DNS场景都用这个。
- 辅助区域:从另一台DNS服务器复制数据,本机是只读副本,适合做负载均衡或多节点容灾。
- 存根区域:只保存权威服务器的名称和IP指针,用于快速转发查询,不存储完整记录。
业内专家指出,个人测试或中小型内网环境,选择主要区域就够了,如果你打算在虚拟机里练手,直接选主要区域,省事又直观。
正向解析区域和反向解析区域分别解决什么
正向解析是把域名翻译成IP,比如访问www.example.com会指向192.168.1.10,反向解析则是把IP翻译成域名,邮件服务器做反垃圾邮件验证时常用。
实际运维中,用户问到虚拟机怎么安装DNS服务器的解析区域时,多数指正向解析区域,但如果你要搭邮件服务,反向区域就是刚需,建议两个都建,成本不高,之后用起来省心。
在Windows Server虚拟机里创建DNS解析区域,步骤拆解
Windows Server的DNS管理器是图形化界面,不需要记命令,适合新手入门,整个过程分三步:装角色、建区域、加记录。
第一步:确认DNS服务角色已安装
打开服务器管理器,点击“添加角色和功能”,一路下一步到“服务器角色”页面,勾选“DNS服务器”,安装完成后,在“工具”菜单里就能看到DNS管理器入口。
如果你在Windows 10或11的专业版虚拟机里做测试,也能通过“启用或关闭Windows功能”勾选DNS服务器,但功能比Server版精简,正式环境不建议这么干。
第二步:新建正向解析区域
打开DNS管理器,点击计算机名展开,右键“正向查找区域”,选“新建区域”,向导会问你三个问题:
- 区域类型:选“主要区域”,如果要兼容老式DNS动态更新,勾选“在Active Directory中存储区域”选项(仅域环境可用)。
- 区域名称:写你的域名,比如dns-test.com,注意是二级域名格式,不带www。
- 区域文件:默认让它自动创建新文件就行,文件名是“区域名.dns”,放在C:WindowsSystem32dns目录下。
完成向导后,区域就出现在左侧列表里,但此时它是空的,还没有解析记录。
第三步:添加A记录和CNAME记录
右键区域名,选“新建主机(A或AAAA)”,这里要填两个字段:
- 名称:填主机名,比如www,留空代表根域。
- IP地址:填这台虚拟机或局域网内目标机器的实际IP。
填完点“添加主机”,看到“已成功创建”提示就完成了,CNAME记录类似,右键区域选“新建别名”,填写别名和目标的FQDN格式,即完整域名。
反向区域在同样位置操作,只是会多一步“网络ID”,你要填IP的前三段,比如192.168.1,系统会自动换算成子网。
Linux虚拟机里配置DNS解析区域,比你想的简单
Ubuntu或CentOS虚拟机装DNS服务器,主流方案是BIND9,它的配置文件是纯文本,掌握核心语法后,可定制性比Windows图形界面高不少。
安装Bind9并启动服务
Ubuntu/Debian系执行:
sudo apt update && sudo apt install bind9 -y
CentOS/RHEL系执行:
sudo yum install bind bind-utils -y
启动服务用systemctl命令:
sudo systemctl start named
sudo systemctl enable named
装好之后,所有的区域配置都在/etc/bind目录下,核心文件是named.conf.local,你新建的区域都要在这里声明。
在named.conf.local里声明解析区域
编辑/etc/bind/named.conf.local,添加以下内容:
zone "dns-test.com" { type master; file "/etc/bind/db.dns-test.com"; }; zone "1.168.192.in-addr.arpa" { type master; file "/etc/bind/db.192"; };
第一段是正向解析区域,第二段是反向解析区域,注意反向区域的名称是IP反写加上in-addr.arpa后缀。
编写区域数据文件
创建/etc/bind/db.dns-test.com,内容参考如下:
$TTL 604800
@ IN SOA ns1.dns-test.com. admin.dns-test.com. (
2026010101 ; 序列号
3600 ; 刷新时间
1800 ; 重试时间
604800 ; 过期时间
86400 ) ; 最小TTL
;
@ IN NS ns1.dns-test.com.
@ IN A 192.168.1.10
ns1 IN A 192.168.1.10
www IN A 192.168.1.10
每一行含义明确:SOA记录是区域的起始授权,NS记录指定权威服务器,A记录把主机名和IP绑定,修改完文件后,记得用sudo named-checkzone dns-test.com /etc/bind/db.dns-test.com 检查语法。
重启服务让配置生效
sudo systemctl restart named
然后看日志有没有报错:
sudo journalctl -u named --no-pager -n 20
如果日志干净,说明区域加载正常,接着用dig命令验证解析结果:
dig www.dns-test.com @localhost
返回状态NOERROR且有A记录,就是通了。
虚拟机DNS解析区域故障排查,这几个坑最常遇到
配置过程看起来顺利,但实际跑起来总会有幺蛾子,最常见的问题集中在权限、防火墙和配置文件语法上。
查询超时或SERVFAIL怎么处理
先用dig追查,看返回信息卡在哪一步,多数情况下是named服务没起来,或者区域文件内容有误,检查系统日志时重点看包含error或denied字样的行。
运行时权限问题也很典型,区域文件所在目录的所有者必须是bind用户,否则读不到文件,执行以下命令修正:
sudo chown bind:bind /etc/bind/db.
sudo chmod 644 /etc/bind/db.
防火墙拦截导致客户机无法查询
虚拟机内部DNS服务正常,但其他机器来查就超时,八九不离十是防火墙没放行TCP/UDP 53端口,Ubuntu的ufw加规则:
sudo ufw allow 53/tcp
sudo ufw allow 53/udp
CentOS的firewalld则执行:
sudo firewall-cmd --permanent --add-port=53/tcp sudo firewall-cmd --permanent --add-port=53/udp sudo firewall-cmd --reload
nslookup能解析名字但反向解析失败
这种情况多半是反向区域的记录没配对,检查反向区域文件里PTR记录的IP尾数和主机名是否一一对应,少一条或者IP写错都会导致解析失败。
Q&A:虚拟机安装DNS服务器解析区域,高频疑问集中解答
在虚拟机里搭DNS服务器,解析区域建在宿主机还是虚拟机里
虚拟机里,DNS服务这个角色运行在你创建的那台虚拟机上,它的解析区域数据文件也存放在虚拟机的磁盘里,宿主机在这里只充当硬件资源提供方,不参与DNS逻辑处理,唯一需要你在宿主机操作的是网络设置确保VMware或VirtualBox的虚拟网卡模式能支撑DNS通信,NAT模式就让DNS服务只在虚拟机之间生效,桥接模式才能让DNS映射的路由器暴露给外部设备,目标设备尝试访问你创建的解析域名时,需要修改主机伪装,让它们的网络配置指向这台虚拟机的IP,这样查询流量才会被送到你的DNS区域。
虚拟机DNS服务器的解析区域数据文件丢失了,怎么恢复
看有没有导出过区域副本,或者做过快照,VMware和VirtualBox的快照功能能在关键时刻救你一命,配置出错时回滚到正常状态,如果没有快照,Windows Server上可以在DNS管理器里右键区域导出为文本文件,但前提是你手工备份过,恢复思路是重新新建同名区域,然后把导出的文件内容手工粘贴回去,A记录、CNAME、MX这些一条条重新加,比导出更省心的办法是整合虚拟机的自动备份策略,同时把DNS配置文件所在目录加入备份任务,Windows在C:WindowsSystem32dns,Linux在/etc/bind下。
虚拟机里存在多张虚拟网卡时,DNS解析区域应该绑定哪张网卡
这是典型的多用网络环境搭建场景,默认回应所有网卡可以工作,但生产环境使用要注意,BIND9默认监听所有接口,named进程的协议流量会出现在每张虚拟网卡上,如果你希望DNS只服务特定网段,比如内网网段给办公用、外网网段给DMZ区用,修改/etc/bind/named.conf.options中的listen-on选项,逐一列出允许查询的IP地址,Windows Server同理,DNS管理器里右键服务器属性,切到“接口”页签,指定只在某个IP上监听查询流量,配置之后用ss -lunt | grep 53验证一下,确认服务只在指定地址上开放,避免私网泄露公网的真实地址。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/691695.html





