配置DNS服务器并不复杂,核心路径是安装DNS服务、创建区域和记录、最后把客户端指向它;想省事就用路由器或云解析,想可控就自己装Windows Server或Linux的BIND。
动手前先想清楚:你的DNS服务器要管什么
很多人一搜“dns服务器怎么设置”就直接找教程,结果跟着敲了半天命令,发现自己根本不需要一个独立服务器,先花两分钟想清楚你的场景。
家庭或小办公室:用路由器自带的DNS就行
绝大多数家用路由器都有内置DNS转发功能,登录后台(一般是192.168.1.1或192.168.31.1),在“DHCP服务器”设置里,把DNS服务器地址改成你想要的公共DNS,比如114.114.114或5.5.5,保存重启就能生效,这种方案零成本、零维护,缺点是没法定制内网域名,比如把“files.local”指向你家的NAS。
企业内网或开发测试环境:建议自己搭一个
需要把内部服务用有意义的名字访问,比如gitlab.company.local指向168.10.15,同时不想让内网查询请求都跑到公网上,这时候就需要一台真正的DNS服务器。行业共识认为,自建内网DNS是隔离内外网解析最稳妥的办法,既降低外网依赖,也方便统一管控。
公网域名:直接用云解析,别自己搭
如果你的域名要被互联网上的用户访问,别自建权威DNS,自建公网DNS需要至少两台独立IP的服务器做主备,还得处理DDoS攻击、DNSSEC签名、地域分流这类复杂问题,而简米云、酷番云、Cloudflare的免费DNS解析服务已经能覆盖绝大多数需求,稳定性和抗攻击能力远超自建。
dns服务器怎么设置:从零开始的Windows Server实操
这是百度上搜“dns服务器怎么设置”的人最常问的场景,下面以Windows Server 2019/2026为例,走一遍完整流程。
第一步:给服务器配静态IP
DNS服务器必须有固定IP,否则客户端一重启IP变了,整个解析就崩了。
- 打开“控制面板 → 网络和共享中心 → 更改适配器设置”
- 右键“以太网” → “属性” → 双击“Internet协议版本4 (TCP/IPv4)”
- 填写固定IP,比如
168.1.10,子网掩码255.255.0,网关填路由器IP - DNS服务器暂时填
0.0.1,等装好DNS服务后再改
第二步:安装DNS服务器角色
- 打开“服务器管理器” → 点击“添加角色和功能”
-

一路下一步,在“服务器角色”中勾选DNS服务器
- 安装完成后,在“工具”菜单中找到“DNS”管理器
第三步:创建正向查找区域
这是整个配置的核心,右键“正向查找区域” → “新建区域”:
- 区域类型选主要区域
- 区域名称填你的内网域名,比如
company.local - 区域文件保持默认,动态更新选“允许安全动态更新”(域环境)或“不允许”(工作组环境)
第四步:添加主机记录(A记录)
在company.local区域中右键“新建主机”:
- 名称填服务名,比如
gitlab - IP地址填
168.10.15 - 点击“添加主机”
这样就完成了gitlab.company.local的解析,同理,你可以为打印机、ERP系统、文件服务器一一添加记录。
第五步:修改客户端DNS指向
在需要解析内网域名的电脑上,把“首选DNS服务器”改成168.1.10,在Windows上执行ipconfig /flushdns清一下缓存就能立刻生效。
Linux下搭建内网dns服务器:用BIND9实现完整解析
生产环境里Linux方案更常见,CentOS、Ubuntu、Debian都默认提供了BIND9软件包,这个方案特别适合“内网dns服务器搭建”的搜索场景,因为很多人就是想绕过Windows授权,用开源方案解决。
安装与启动BIND9
以Ubuntu 22.04为例:
sudo apt update sudo apt install bind9 bind9-utils dnsutils -y sudo systemctl enable named sudo systemctl start named
修改主配置文件
编辑/etc/bind/named.conf.options,写入以下基础配置:
options {
directory "/var/cache/bind";
recursion yes;
allow-query { localhost; 192.168.0.0/16; };
forwarders {
223.5.5.5;
119.29.29.29;
};
dnssec-validation auto;
listen-on { any; };
};
这里的要点是allow-query只开放给内网网段,forwarders指定上游DNS,外网查询会转发给阿里DNS和腾讯DNS,这样配置既满足了内网解析速度,又保证了公网域名能正常访问。
创建内网区域文件
编辑/etc/bind/named.conf.local,添加区域声明:
zone "internal.corp" {
type master;
file "/etc/bind/zones/db.internal.corp";
};

然后创建区域文件:
sudo mkdir -p /etc/bind/zones sudo nano /etc/bind/zones/db.internal.corp
$TTL 604800
@ IN SOA dns1.internal.corp. admin.internal.corp. (
2026010101 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800) ; Negative Cache TTL
@ IN NS dns1.internal.corp.
@ IN A 192.168.1.10
dns1 IN A 192.168.1.10
nas IN A 192.168.1.88
erp IN A 192.168.1.155
保存后重启服务:
sudo systemctl restart named
用dig nas.internal.corp @192.168.1.10验证,能返回168.1.88就说明解析成功了。
排障手册:dns服务器不生效怎么办
搭建过程中一定会遇到问题,这里的排查顺序是经过大量实践检验的,建议按顺序查。
先确认服务进程是否存活
- Windows:打开“服务”管理器,看“DNS Server”是否在运行
- Linux:执行
systemctl status named,看到active (running)才正常
再查防火墙
很多人在这一步翻车。记住一条铁律:DNS走的是UDP和TCP的53端口,Windows服务器需要在“高级安全Windows防火墙”中放行,Linux执行:
sudo ufw allow 53/tcp sudo ufw allow 53/udp
接着验证解析结果
用nslookup(Windows和Linux通用):
nslookup gitlab.company.local 192.168.1.10
如果返回Non-existent domain,大概率是区域文件里记录写错了,用named-checkzone internal.corp /etc/bind/zones/db.internal.corp排查语法错误。
别忘了清客户端缓存
Windows执行ipconfig /flushdns,Linux执行sudo systemd-resolve --flush-caches,否则旧记录会一直留在缓存里,让你误以为没生效。
选型账本:dns服务器多少钱才算花得值
“dns服务器多少钱”是百度上搜索量不错的词,这事得分两层看。
| 方案 | 初始成本 | 运维成本 | 适用场景 |
|---|---|---|---|
| 路由器DNS | 0元 | 几乎为零 | 家庭、5人以下小团队 |
| Windows Server自建 | 授权费用约数千元 | 需要专人维护系统补丁和角色服务 | 已用微软生态的中型企业 |
| Linux BIND自建 | 纯开源,0授权费 | 需要懂Linux的人才 | 有技术团队的公司 |
| 云解析(简米云/酷番云) | 基础版免费 | 近乎为零 | 公网域名、不涉及内网解析 |
这里要提一个容易忽略的成本:自建DNS的故障时间成本,DNS服务器挂了,全公司所有需要域名访问的系统都会瘫痪,生产损失远超服务器本身的价格,如果你的团队没有足够的运维能力,更稳妥的做法是买云解析服务,国内大厂的免费额度已经覆盖多数企业场景,付费版价格也多在每年几百元量级,相比自建省心得多。
关于dns配置的常见问题
主DNS和辅助DNS必须都配置吗?
不是必须的,主DNS挂了之后,客户端会等超时(通常是5-10秒)再尝试辅助DNS,期间的网络体验是断崖式的,如果是自建DNS,至少配一台备用机并开启区域传送;如果用的云解析,在主DNS宕机时,辅助DNS会立刻接管,客户端无感知。用云解析的话,配置辅助DNS地址即可自动生效,无需额外操作。
内网DNS解析和公共DNS解析会不会冲突?
不会冲突,但要处理好转发顺序,内网DNS收到查询后,先看自己的区域文件里有没有对应记录,没有才转发给上游公共DNS,前提是内网域名不能和公网域名重名,比如用corp.local或internal.corp作为内网后缀,而不要用example.com这种真实可注册的域名,否则内网解析记录会被公共DNS的结果干扰。
配置完DNS后,需要重启服务器吗?
不需要,DNS服务本身支持热加载配置,但不同操作系统对配置文件的读取策略不同Windows的DNS管理器保存后立即生效,Linux的BIND每次修改区域文件后建议执行named-checkconf验证语法,再systemctl reload named优雅重载,如果直接重启服务器,反而可能因为配置顺序问题导致服务启动失败,大多数情况下,刷新服务或重载配置文件就够了。
自建DNS这条路并不神秘,先选对场景,再按Windows或Linux的步骤一步步走,最后用排查手册兜底,如果你正在运营企业内网,在自己搭建之前,不妨先把云解析的免费额度用起来,把核心业务先稳住,再慢慢折腾自建的进阶玩法。

