如何在虚拟机终端安装DNS服务器?,详细步骤教程

在虚拟机终端里安装DNS服务器,核心就两步:先给虚拟机配好静态IP,再装BIND9(Ubuntu/Debian系)或bind(CentOS系)并修改配置文件。整个过程不复杂,但坑不少,尤其是网络模式和防火墙,下面按实际踩坑顺序一步步来。

安装前的准备工作:别急着敲命令

很多教程直接让你 apt install bind9,结果装完发现解析不生效,问题多半出在虚拟机网络环境没理顺。

确认虚拟机的网络模式

虚拟机终端安装DNS服务器,首先得搞清楚网络连接方式,多数情况下,你用的是NAT模式或仅主机(Host-Only)模式。

  • NAT模式:虚拟机通过宿主机上网,DNS服务可以对外提供解析,但需要做端口转发,否则外部机器访问不到。
  • 桥接模式:虚拟机直接占用局域网IP,最接近真实服务器场景,推荐练习用。
  • 仅主机模式:只能和宿主机通信,适合测试内部解析,不需要对外。

行业共识认为,学习阶段用桥接模式最省心,IP和宿主机在同一网段,后续调试不用折腾端口映射,你可以在虚拟机设置里把网络改成桥接,然后重启网络服务。

配置静态IP而不是DHCP

DNS服务器必须有一个固定的IP,否则客户端没法填,这是虚拟机装DNS服务器和物理机区别最大的一点,物理机网卡配置一般固定不动,虚拟机如果不做设置,重启后IP可能变。

在终端里编辑网络配置文件,Ubuntu 22.04及以上用netplan:

sudo vim /etc/netplan/01-netcfg.yaml

IP按你的实际网段改):

network:
  version: 2
  ethernets:
    ens33:
      dhcp4: no
      addresses:
        - 192.168.1.100/24
      routes:
        - to: default
          via: 192.168.1.1
      nameservers:
        addresses:
          - 192.168.1.1
          - 223.5.5.5

保存后执行:

sudo netplan apply

CentOS/RHEL系则修改 /etc/sysconfig/network-scripts/ifcfg-ens33,把 BOOTPROTO=dhcp 改成 BOOTPROTO=static,并追加IP、网关和DNS,然后重启网络:

sudo systemctl restart network

这时候用 ip addr 确认一下IP,顺便 ping baidu.com 测通外网,很多人在这一步卡住,虚拟机DNS服务器配置不上怎么办?先检查IP和网关,再翻下面的排查段。

核心安装步骤:Ubuntu与CentOS双版本

这里给出两个主流系统在虚拟机终端里的完整安装路径,选你正在用的那一个,这也是百度上搜索量最大的疑问:虚拟机安装DNS服务器教程里,命令错一个就全盘崩,所以务必逐行确认。

基于Ubuntu/Debian的BIND9安装

先更新软件包索引:

sudo apt update

然后安装BIND9:

sudo apt install bind9 bind9-utils bind9-doc -y

安装完成后,BIND9的主配置文件在 /etc/bind/,先看目录结构:

ls /etc/bind/

你会看到 named.conf、named.conf.options、named.conf.local 等文件。named.conf 是主入口,一般不动,我们改的是剩下两个。

启动服务并设开机自启:

sudo systemctl enable --now named

检查运行状态:

如何在虚拟机终端安装DNS服务器?,详细步骤教程

sudo systemctl status named

如果显示 active (running),说明安装成功,这一步是很多新手最容易忽略的,装完不自启,重启虚拟机DNS服务器就失联了。

基于CentOS/RHEL的bind安装

CentOS系用yum/dnf安装:

sudo yum install bind bind-utils -y

装完后主配置文件在 /etc/named.conf,同样先启动:

sudo systemctl start named
sudo systemctl enable named

CentOS上有个额外步骤,很多人会栽跟头:selinux,如果SELinux是 enforcing 状态,可能会拦截BIND9的某些文件访问,临时测试可以关掉:

sudo setenforce 0

但生产环境不建议,正确做法是调整SELinux布尔值,具体看后面故障排查。

验证安装版本和语法

装完别急着配,先确认版本对不对:

named -v

显示类似 BIND 9.18.x 就说明OK。

接着检查配置文件语法:

sudo named-checkconf

没有输出就是没错误,如果有报错,会提示哪一行有问题,按提示改就行。

配置正向DNS解析:修改named.conf文件

安装只是万里长征第一步,核心重头戏在配置里,我们要实现的效果是:客户端把虚拟机的IP填为DNS服务器后,能通过域名解析到内网Web服务器。

编辑named.conf.options

打开 /etc/bind/named.conf.options(Ubuntu)或 /etc/named.conf(CentOS):

sudo vim /etc/bind/named.conf.options

在options块内,修改监听地址和允许查询范围:

options {
        directory "/var/cache/bind";
        recursion yes;
        listen-on port 53 { any; };
        listen-on-v6 port 53 { any; };
        allow-query { any; };
        forwarders {
                223.5.5.5;
                114.114.114.114;
        };
        dnssec-validation auto;
};

这里的关键点是:

  • listen-on:让BIND9监听所有接口的53端口,否则虚拟机终端里服务可能只监听127.0.0.1,外部访问必然失败。
  • allow-query:允许所有客户端发起查询,如果你只想特定网段访问,可以改成 { 192.168.1.0/24; }。
  • forwarders:当内网没有对应解析记录时,会把请求转发给上游DNS,这里填了阿里和114的公共DNS,效果不错。

CentOS用户注意,listen-on port 53 这行在named.conf里可能默认是 { 127.0.0.1; },必须改成 any,否则局域网其他机器无法使用你的DNS。

编辑named.conf.local定义区域

在 /etc/bind/named.conf.local(Ubuntu)或直接在 named.conf 末尾(CentOS)追加一个zone:

zone "lab.local" {
        type master;
        file "/etc/bind/db.lab.local";
};

表示我们要负责维护 lab.local 这个域的权威解析,文件名可以随便起,但路径要对。

创建正向解析数据库文件

把系统的模板拷贝一份来改:

sudo cp /etc/bind/db.local /etc/bind/db.lab.local

然后编辑:

sudo vim /etc/bind/db.lab.local

大致如下:

$TTL    604800
@       IN      SOA     lab.local. admin.lab.local. (
              

如何在虚拟机终端安装DNS服务器?,详细步骤教程

2026012001 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS ns.lab.local. ns IN A 192.168.1.100 www IN A 192.168.1.101 db IN A 192.168.1.102

解释一下:

  • SOA:起始授权记录,域名、管理员邮箱(用点代替@)。
  • NS:声明该域的DNS服务器主机名。
  • A记录:把 www.lab.local 解析到 168.1.101,把 db.lab.local 解析到 168.1.102。

保存后检查语法:

sudo named-checkzone lab.local /etc/bind/db.lab.local

输出 OK 就过关,然后重载配置:

sudo systemctl reload named

配置反向DNS解析:提供PTR记录

反向解析不是必须的,但如果你的内网有邮件服务器或者业务依赖IP反查域名,就需要配,这里以 168.1.0/24 网段为例。

在 named.conf.local 中追加:

zone "1.168.192.in-addr.arpa" {
        type master;
        file "/etc/bind/db.192.168.1";
};

注意网段写法要反着来,接着创建文件:

sudo cp /etc/bind/db.127 /etc/bind/db.192.168.1
$TTL    604800
@       IN      SOA     lab.local. admin.lab.local. (
                              2026012001
                              604800
                              86400
                              2419200
                              604800 )
;
@       IN      NS      ns.lab.local.
100     IN      PTR     ns.lab.local.
101     IN      PTR     www.lab.local.
102     IN      PTR     db.lab.local.

这里 100 对应IP 168.1.100,解析出其主机名。

再次检查并重载:

sudo named-checkzone 1.168.192.in-addr.arpa /etc/bind/db.192.168.1
sudo systemctl reload named

防火墙放行53端口:虚拟机终端里的硬门槛

就算BIND9配置全对,防火墙一拦,客户端照样无法用,这一步在虚拟机环境中特别容易漏。

Ubuntu的UFW:

sudo ufw allow 53/tcp
sudo ufw allow 53/udp
sudo ufw reload

CentOS的firewalld:

sudo firewall-cmd --permanent --add-port=53/tcp
sudo firewall-cmd --permanent --add-port=53/udp
sudo firewall-cmd --reload

如果不放行,你会在客户端上看到 dig 超时的提示,或者 ping 域名报 server can't find。

测试监听状态:

sudo ss -lnp | grep :53

看到 0.0.1:53 和 168.1.100:53 都在监听,说明防火墙和设备层面都OK了。

客户端验证和常见故障排查

配置全完成后,在另一台虚拟机或宿主机终端里,把DNS改成你新建的服务器IP,然后测试。

nslookup www.lab.local 192.168.1.100

或者用dig:

dig @192.168.1.100 www.lab.local

返回 status: NOERROR 且A记录正确,说明你的内网DNS服务已经生效。

虚拟机DNS服务器配置不上怎么办

如果dig返回 connection timed out,按顺序排查:

如何在虚拟机终端安装DNS服务器?,详细步骤教程

  1. 先 ping 192.168.1.100,不通就去检查虚拟机网络模式和防火墙。
  2. 通了但超时,去虚拟机上运行 named-checkconf,看看语法有没有错。
  3. 语法没错,看 systemctl status named,如果服务挂了,查日志:
sudo journalctl -u named -f

或看 /var/log/syslog(Ubuntu)、/var/log/messages(CentOS)。

实际案例中,相当一部分问题出在SELinux,CentOS上如果日志里有 Permission denied,试一下:

sudo setsebool -P named_write_master_zones 1

这个命令允许BIND9写主zone文件,是我见过的高频修复项之一,不过这只是众多解法中的一种,具体还是以错误日志为准。

虚拟机装DNS服务器和物理机区别

练习用的虚拟机性能和物理机没法比,但在DNS这个场景下,区别不在性能,而在IP稳定性,物理机IP基本固定,虚拟机如果你不小心把网络模式从桥接改回NAT,或者重启后DHCP分配了新IP,客户端那边需要跟着改,行业共识,把虚拟机的IP在路由器上做静态绑定,是解决这个对比场景里最有用的手段。

几个实用建议

内存分配:BIND9占用的内存不大,但也不是不吃内存,虚拟机至少分配512MB给DNS专用,如果同时跑Web服务,1GB起步,在虚拟机设置里调整内存后,记得重启。

配置备份:在改动 named.conf.local 前,养成备份习惯:

sudo cp /etc/bind/named.conf.local /etc/bind/named.conf.local.bak

这个习惯在测试环境无所谓,一旦你在公司或生产机上操作,救命的概率很大。

常见问题Q&A

问:内网DNS服务器搭建价格高吗,商用和自建怎么选?

自建的话,成本只有虚拟机的硬件资源,内存、CPU带宽共享宿主机,基本是零额外花费,如果买商业内网DNS软件或云服务,视功能和节点数不同,价格从每年几百元到数千元不等,自建能学到完整的解析流程和控制权,但维护成本高,需自己处理高可用和安全问题;商用方案省心但花钱,对多数中小企业来说,先自建一台BIND9撑起内网解析是主流路线,后续规模大了再考虑冗余或商业化产品。

问:虚拟机里的DNS服务器重启后总是失效,怎么解决?

先确认你设置了静态IP而不是DHCP,这是重启后失效的主要原因,其次确认named服务已设为开机自启,Ubuntu用 systemctl enable named,CentOS用 systemctl enable named,最后打开/etc/resolv.conf看看,如果里面被NetworkManager自动改写了,可以在netplan或ifcfg文件里配置DNS,或者用 nmcli 把它设为manual。

问:BIND9和dnsmasq在虚拟机上选哪个更适合内网环境?

如果只做单纯的域名解析、客户端数量不多,dnsmasq更轻量,配置也简单,但如果涉及多区域、子域授权、增量传输这类复杂需求,BIND9更合适,选择依据是需求复杂度:测试学习用dnsmasq足够,正式环境或未来要扩展的场景建议直接用BIND9,免得后续迁移成本高。

虚拟机终端里折腾DNS服务器,最大的成就感不是敲完命令,而是当你从宿主机或另一台虚拟机用 dig 查到域名成功解析时,概念终于落地了,先按上面步骤把基础跑通,再去研究主从同步、动态更新、日志切割这些进阶玩法,会顺畅得多。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://idctop.com/article/711684.html

赞 (0)
服务器一般能存多少g,怎么选容量才够用?
上一篇 2026年10月5日 17:24
AIoT扩声主机多少钱一台?2026最新报价及选购指南
下一篇 2026年6月13日 06:25

相关推荐

  • cf老是连接服务器失败是什么原因,cf连接服务器失败怎么解决

    CF连接服务器失败的核心原因,九成出在本地网络与加速节点之间,游戏服务器本身很少背锅,下面按“为什么失败”和“怎么解决”两条线展开,从最常见到最冷门,一步步帮你把问题抠干净,为什么cf老是连接服务器失败?先排除这三个“拦路虎”CF对网络抖动极其敏感,哪怕你宽带再大,只要中间任何一个环节丢包,就会出现“连接服务器……

    2026年9月24日
    000
  • AIoT智联网赛道是什么?AIoT智联网行业发展前景分析

    AIoT智联网赛道正处于从“连接爆发”向“智能价值创造”跨越的关键分水岭,未来的核心红利将不再属于单纯的硬件制造商或单一的云平台,而是属于那些能够实现“端边云”深度融合、提供全栈式行业解决方案的生态构建者,企业若想在这一赛道突围,必须摒弃单纯的设备联网思维,转而聚焦于数据价值挖掘与场景化落地,构建起具备自进化能……

    2026年3月22日
    10900
  • 服务器mhtml文件打不开怎么办?,常见解决方法有哪些?

    服务器mhtml是服务器端将网页完整打包为MHTML格式文件的技术方案,用于网页存档、静态化导出和离线浏览, 这个方案解决了多个资源文件分散管理的痛点,让网页内容变成一个独立单元,便于存储和分发,服务器mhtml是什么?解析核心概念MHTML(MIME HTML)是一种基于MIME协议的网页存档格式,它将HTM……

    2026年7月16日
    1200
  • 炸我的世界ice服务器的人最终怎么样了,会坐牢吗

    炸过我的世界ice服务器的人,只要被揪出来,结局基本是永久封禁、公开挂名,运气差一点的直接吃官司赔钱,没有一个能全身而退,我混迹MC圈这么多年,见过太多熊孩子以为炸了服务器就万事大吉,结果没过几天就哭着找人求情,今天不聊虚的,就聊聊这些炸服的人到底怎么样了,顺带把“我的世界服务器被炸了怎么办”和“mc服务器遭攻……

    2026年9月15日
    300
  • 如何利用机器学习分析负荷数据,电力负荷预测模型有哪些?

    负荷数据机器学习的核心在于通过历史时序数据与环境特征的深度融合,利用非线性映射能力,将传统统计学预测的误差率降低至行业领先水平,是实现电网调度与工业节能的关键技术,负荷数据机器学习的技术演进逻辑电力负荷预测早已告别了单一的线性回归时代,传统统计学方法如ARIMA(自回归积分滑动平均模型)在处理平稳序列时表现尚可……

    2026年7月14日
    1300
  • Excel调颜色怎么操作,有什么简单实用的技巧?

    Excel调颜色并不是什么高深莫测的功能,你只需要掌握填充色、字体色和条件格式这三大核心,就能让表格瞬间变得清晰易读,excel怎么调颜色?从基础到条件格式全覆盖很多人打开Excel面对一堆数据时,第一反应就是给报表加颜色,但颜色加得对不对直接影响阅读效率,正确的做法是:先明确哪些数据需要突出,再选择对应的颜色……

    2026年7月21日
    2100
  • win10如何添加服务器网络打印机驱动?,详细步骤是什么?

    在Win10中添加服务器网络打印机驱动,最稳路径是通过“设置-设备-打印机和扫描仪-添加打印机或扫描仪”,选择“我需要的打印机不在列表中”,按名称或TCP/IP地址添加服务器共享打印机,系统自动拉取驱动;拉取失败时手动从制造商官网下载对应型号的.inf文件并指定安装,win10连接共享打印机需要安装驱动吗?多数……

    2026年9月15日
    200
  • 存储卷队列深度不足会限制数据库并发吗,数据库并发如何提升?

    数据库并发能力受限往往不是计算资源不够,而是存储卷的队列深度先把请求堵在了门外,对多数中低端存储卷来说,队列深度不足导致的IO排队延迟,比磁盘本身速度不够更隐蔽且更致命,存储卷队列深度不足怎么排查当数据库出现并发提升后性能骤降的情况,很多人第一反应是加CPU或扩内存,但有一种更典型的场景:数据库的连接数从100……

    2026年9月10日
    200
  • AIoT物联网应用有哪些?智能家居解决方案大全

    AIoT物联网应用的核心价值在于通过人工智能与物联网的深度融合,实现设备智能化、数据价值化和决策自动化,最终推动产业效率的指数级提升,这一技术组合不仅是连接物理世界与数字世界的桥梁,更是企业数字化转型的关键引擎,核心结论:AIoT重构产业逻辑,从“万物互联”迈向“万物智联”传统的物联网解决了设备连接和数据采集的……

    2026年3月20日
    11900
  • asp三维数组在编程中的应用和实现原理有何特点?

    ASP三维数组是Active Server Pages(ASP)中用于存储和操作多维度数据集合的核心数据结构,它通过三个索引维度(行、列、层)来组织数据,适用于复杂的数据建模场景,如三维坐标系统、多层表格数据或时间序列分析,在ASP环境下,三维数组通常通过VBScript或JScript实现,提供高效的数据管理……

    2026年2月4日
    11300

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注