如何在虚拟机终端安装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
简米云服务器幻兽帕鲁怎么装mod?, mod安装教程在哪
下一篇 2026年10月5日 17:27

相关推荐

  • ECS服务器显示8个待处理漏洞怎么办,修复方法有哪些

    ECS服务器提示待处理漏洞8个,核心解法是:登录云安全中心漏洞修复页面,先按严重程度排序,优先修复高危及可被远程利用的漏洞,使用云平台自带的“一键修复”功能或手动执行yum/apt更新命令完成补丁升级,修复后重启实例并复查漏洞状态,为什么ECS漏洞不能拖延处理:先搞懂这8个漏洞意味着什么服务器不像办公电脑,它2……

    2026年10月20日
    100
  • AI人工智能平台哪个好?国内十大AI智能平台推荐

    在数字化转型的浪潮中,企业要想实现效率的指数级增长与商业模式的根本性变革,核心在于选择并深度应用合适的AI人工智能平台,这不仅是技术工具的迭代,更是企业构建未来竞争力的关键基础设施,一个优秀的平台能够将复杂的算法能力转化为直接的生产力,降低技术门槛,让数据真正成为驱动决策的燃料,核心结论:AI人工智能平台是企业……

    2026年3月5日
    13700
  • PS5游戏GT7连不上服务器怎么办?,是什么原因?

    GT7连不上服务器,绝大多数情况是本地网络配置或DNS问题,偶尔是服务器维护,按以下六步排查基本能解决,哪些原因会导致GT7连不上服务器先搞清楚问题出在哪儿,再动手不迟,GT7连不上服务器,原因集中在以下几类,网络环境不稳定PS5对网络质量要求不低,尤其是GT7这类实时联机赛车游戏,Wi-Fi信号弱、丢包率高……

    2026年7月25日
    9900
  • w10服务器连接错误代码怎么办,什么原因

    w10服务器连接错误代码的核心结论是:绝大多数报错都指向SMB协议版本不匹配、凭据缓存冲突或防火墙拦截这三个方向,按本文的排查顺序操作,多数情况下能在十分钟内定位问题,w10服务器连接错误代码0x80070035怎么解决这个错误代码在局域网环境中出现频率最高,提示文字通常是“找不到网络路径”,行业共识认为,0x……

    程序编程 2026年10月21日
    200
  • 怎么才能优先进入2b2t服务器?,2b2t秒进方法

    想优先进入2b2t,最稳定且唯一官方认可的方法就是购买服务器官方的优先队列权限,这能让你从数千人的排队序列中直接跳至最前端,实现秒进服,我最初玩2b2t的时候也和大家一样,看着客户端右下角的排队数字从“你的位置:9999”慢慢往下磨,中途还得挂机守着,生怕掉线重排,那种等待的滋味,跟看着一锅水慢慢烧开却始终不见……

    2026年10月16日
    200
  • Excel列名怎么改?Excel表格列号字母怎么变

    在 Excel 中,列的命名(即列标)遵循特定的字母组合规则,以下是详细的说明和规律:基本规则单字母列:A 到 Z(共 26 列),双字母列:AA 到 ZZ(共 676 列),三字母列:AAA 到 XFD(Excel 2007 及以后版本最多支持 16,384 列,最后一列是 XFD),命名规律(类似进制转换……

    2026年7月11日
    17900
  • opc服务器其他电脑连不上网?,网络故障排查方法

    OPC服务器其他电脑连不上网,绝大多数情况下不是软件“坏了”,而是网络层不通、DCOM权限配置不对、防火墙拦路这三件事在作怪,作为工业现场最常见的通讯故障,它有个特点:OPC服务器本机一切正常,客户端一跨电脑访问就掉链子,下面按排查顺序把这块硬骨头啃干净,先从网络通断查起,90%的问题出在这很多维护兄弟第一反应……

    2026年10月14日
    000
  • 酷鸭香港新加坡VPS首月1元是真的吗?香港VPS租用推荐

    酷鸭数据新推香港/新加坡VPS主打原生IP与无限流量,首月低至1元,是追求低成本出海与稳定网络环境的用户首选方案,在服务器租赁市场,价格战往往伴随着性能的妥协,但酷鸭数据此次推出的新品似乎打破了这一常规,对于需要搭建跨境电商、海外社交应用或进行数据爬取的用户来说,寻找一款既便宜又稳定的VPS并非易事,这次的新品……

    2026年7月5日
    13800
  • id密码连接服务器失败怎么回事,连接不上怎么解决?

    服务器连接失败绝大多数情况下不是服务器“死”了,而是id或密码的认证环节出了问题,解决方案核心就三个字:重置、核对、换方式,很多朋友在后台留言问“id密码连接服务器失败怎么回事啊”,我翻了一圈工单记录,发现超过一半的案例都是同一个套路:密码里藏了个看不见的坑,今天就掰开揉碎聊清楚,先搞清楚:是连不上,还是登不进……

    程序编程 2026年10月22日
    100
  • 服务器dc电源灯闪烁是什么原因?怎么解决?

    服务器DC电源灯闪烁通常意味着电源子系统检测到了异常状态,这并非简单的电源故障,而是服务器发出的“求救信号”,必须立即进行排查以防止硬件损坏或数据丢失,核心结论是:电源灯闪烁往往指向电源模块故障、供电电压不稳、负载过载或电源冗余配置失效,解决问题的关键在于通过指示灯代码定位故障源,并采取模块化替换或环境检测措施……

    2026年4月10日
    9700

发表回复

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