服务器搭建私有DNS:零基础在服务器上搭建私有DNS,秒懂配

零基础在服务器上搭建私有DNS,秒懂配置与排错


假设你有一台 Linux 服务器(本文以 Ubuntu 22.04 为例),希望在内网里通过自定义域名访问其他设备,或者想为本地开发环境提供稳定的域名解析。

最直接的方法就是自己在服务器搭建私有 DNS,不用依赖外部 DNS 服务商。

这篇教程会让你从头到尾跑通流程。


适用场景与准备工作



  • 适用场景:公司内网、家庭实验室、开发测试环境,需要将 dev.mycompany.local 之类的域名解析到内网 IP。

  • 准备条件

  • 一台运行 Ubuntu/CentOS 的服务器(IP 假设为 192.168.1.100,后面会用到)。

  • root 或 sudo 权限。

  • 系统已开通对外 UDP 53 端口(防火墙允许)。

  • 核心工具:BIND(Berkeley Internet Name Domain)——最流行的开源 DNS 服务器软件。


安装 BIND9 与基本配置


1. 安装 BIND9


sudo apt update
sudo apt install bind9 -y

安装完成后,BIND 会自动启动。

检查状态:


sudo systemctl status bind9

如果看到 active (running) 说明安装成功。


2. 修改主配置文件 named.conf.options


编辑 /etc/bind/named.conf.options,在 options 块中增加监听任意地址并允许局域网内所有机器查询:


options {
directory "/var/cache/bind";
listen-on { any; }; # 监听所有网卡
listen-on-v6 { any; };
allow-query { 192.168.1.0/24; }; # 只允许内网段,可按需修改
recursion yes; # 开启递归查询(也可转发到上游)
forwarders { 8.8.8.8; 114.114.114.114; }; # 外部DNS转发
dnssec-validation auto;
};

避坑:如果不设置 allow-query,默认只允许本机查询;内网其他机器无法使用。

3. 添加我们自己域名解析的区域


编辑 /etc/bind/named.conf.local,追加以下内容:


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

然后创建区域文件 /etc/bind/db.example.local


$TTL    604800
@ IN SOA ns1.example.local. admin.example.local. (
20250101 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns1.example.local.
ns1 IN A 192.168.1.100
www IN A 192.168.1.101

说明example.local 是你自定义域名(别用真实一级域名);ns1 是这台 DNS 服务器的主机名;www 是一条 A 记录,指向内网另一台机器。


4. 检查配置并重启 BIND


sudo named-checkconf
sudo named-checkzone example.local /etc/bind/db.example.local
sudo systemctl restart bind9

如果没有任何错误输出,配置就生效了。


客户端测试与注意事项


测试本机解析


在服务器上执行:


dig @127.0.0.1 www.example.local

应该能看到 www.example.local. 60480 IN A 192.168.1.101 的结果。


其他内网机器使用这台 DNS


把客户端的 DNS 服务器改为 192.168.1.100

在 Linux 上可以修改 /etc/resolv.conf


nameserver 192.168.1.100

或在路由器 DHCP 选项中设置。

之后 ping www.example.local 就能 ping 通。


高频问题排解


Q1:客户端无法解析,但服务器可以?



  • 防火墙:确认服务器 UDP 53 端口已放行(sudo ufw allow 53)。

  • allow-query:检查 named.conf.options 里是否包含了客户端所在网段。


Q2:重启 BIND 后提示 permission denied


通常是因为区域文件的权限不正确。

区域文件属于 bind 用户:


sudo chown bind:bind /etc/bind/db.example.local
sudo chmod 644 /etc/bind/db.example.local

Q3:与系统自带的 systemd-resolved 冲突怎么办?


Ubuntu 默认会监听 53 端口。

要避免冲突,可以关闭 systemd-resolved


sudo systemctl disable --now systemd-resolved

然后修改 /etc/resolv.conf 指向本机 BIND 或外部 DNS。


Q4:本机能解析,但无法上互联网?


检查 forwarders 是否填写了公网 DNS(如 8.8.8.8)。

如果写了转发器,BIND 会帮你递归解析外部域名。

如果没写,记得开启 recursion yes


总结


现在你已经成功在服务器搭建私有 DNS,并且可以自定义内网域名。

整个流程的核心是:安装 BIND → 配置监听与查询权限 → 添加区域 → 创建解析记录 → 验证。

遇到问题优先检查防火墙、权限和配置文件语法。

如果你正在处理服务器搭建私有 DNS 的需求,建议按本文步骤完整执行,再根据自己的环境微调。

分享到:
上一篇
用Docker部署Python爬虫,零基础也能按步骤跑起来
下一篇
宝塔面板防CC攻击设置:5个实战步骤,新手也能直接上手
1
系统公告

泽御云五一特惠活动🔥

泽御云持证合规运营,资质齐全可查,长久稳定! 五一限时多重福利同步开启: ✅ 香港 2 核 2G 云服务器超值拼团,低价入手团长免费 ✅ 4 核 4G 多机房年付拼团,性价比拉满 ✅ 内蒙古新区限时 7 折(zeyuyunnmg)特惠,专属优惠码锁价续费 ✅ 全站通用 75 折优惠,老用户充值享专属赠金 官方站点:zeyuyun.com 合规资质齐全|售后有保障|活动限时错过不再有
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意