服务器搭建私有DNS:手把手实战:在服务器上搭建私有DNS服

如果你正在寻找一份可直接落地的服务器搭建私有DNS教程,这篇文章就是为你准备的。

我会用BIND9这套经典软件,从零开始,把安装、配置、启动到验证的每个步骤写清楚,连报错怎么处理也一并说明。


前置准备



  • 一台Linux服务器(推荐CentOS 7/8或Ubuntu 20.04以上)。

  • root权限或具备sudo权限的用户。

  • 安全组/防火墙提前放行UDP 53端口和TCP 53端口。

  • 固定的公网或内网IP(假设你的服务器IP是 192.168.1.100)。

  • 了解DNS基本概念:域名解析就是把 example.com 这样的名字翻译成IP地址。


如果你用的是宝塔面板,请先通过SSH登录服务器操作,宝塔后台暂不提供BIND9一键安装。

分步操作


1. 安装BIND9


CentOS/RHEL系


sudo yum install -y bind bind-utils

Ubuntu/Debian系


sudo apt update
sudo apt install -y bind9 bind9utils

2. 编辑主配置文件


BIND9主配置文件在 /etc/named.conf(CentOS)或 /etc/bind/named.conf(Ubuntu)。

用vim打开:


sudo vim /etc/named.conf

options 段内修改或添加以下内容(注意替换IP):


options {
listen-on port 53 { any; }; # 监听所有网卡
listen-on-v6 port 53 { any; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
allow-query { any; }; # 允许所有客户端查询
recursion yes; # 开启递归(如需转发上游DNS需额外配置)
};

在文件末尾添加一个正向解析区声明(假设你要解析 mydomain.local):


zone "mydomain.local" IN {
type master;
file "mydomain.local.zone";
allow-update { none; };
};

3. 创建区域文件


进入工作目录并创建区域文件:


cd /var/named
sudo vim mydomain.local.zone

写入以下内容(请将IP替换为你的服务器IP和实际域名):


$TTL 1H
@ IN SOA ns1.mydomain.local. admin.mydomain.local. (
2025022701 ; serial
1H ; refresh
15M ; retry
1W ; expire
1H ) ; minimum
IN NS ns1.mydomain.local.
ns1 IN A 192.168.1.100
www IN A 192.168.1.100
test IN A 192.168.1.101


  • SOA记录中的序列号(serial)每次修改文件都要递增,否则从服务器可能不更新。


  • 这里我们只做了正向解析,反向解析(PTR)暂不涉及。


4. 检查配置文件语法


sudo named-checkconf /etc/named.conf
sudo named-checkzone mydomain.local /var/named/mydomain.local.zone

无输出即正确;

有错误则根据提示修正。


5. 启动并设置开机自启


sudo systemctl start named
sudo systemctl enable named
sudo systemctl status named

如果看到 active (running) 表示启动成功。


6. 配置防火墙(放行DNS端口)


CentOS 7+ / firewalld


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

Ubuntu / ufw


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

避坑指南



  • 权限问题:区域文件 mydomain.local.zone 所有者和组必须是 named,权限640。如果权限不对,BIND9无法读取:


  sudo chown named:named /var/named/mydomain.local.zone
sudo chmod 640 /var/named/mydomain.local.zone


  • SELinux拦截:CentOS默认开启SELinux,可能导致BIND9无法读取区域文件。可以先临时关闭测试:


  sudo setenforce 0

若正常工作,再要么永久关闭(不推荐)要么正确设置上下文:


  sudo semanage fcontext -a -t named_zone_t "/var/named/mydomain.local.zone"
sudo restorecon -v /var/named/mydomain.local.zone


  • 端口被占用:检查53端口是否被systemd-resolved或dnsmasq占用,执行 sudo lsof -i :53 查看,若冲突则先停用冲突服务。


高频问题解答


Q1:客户端怎么用我的私有DNS?

A:在客户端网络设置中,将首选DNS服务器修改为你的服务器IP(如 192.168.1.100)。Windows:控制面板→网络和Internet→网络连接→右键属性→IPv4→使用下列DNS服务器地址。


Q2:想添加更多域名或记录怎么办?

A:编辑区域文件 /var/named/mydomain.local.zone,添加类似 newhost IN A 192.168.1.102 的行,然后递增SOA序列号,再执行 sudo rndc reload 重新加载配置即可。


Q3:BIND9启动失败,日志提示 permission denied?

A:参照上述权限与SELinux解决方法。可以查看日志 journalctl -u named -n 20 获取具体报错。


Q4:我已经配置了转发,为什么不能解析外网域名?

A:需要在 named.confoptions 段中添加 forwarders { 8.8.8.8; 114.114.114.114; }; 并删除或注释掉 forward only;(如果只做权威解析则不需要)。同时确保 recursion yes;


效果验证


在服务器本机或者任意一台配置了私有DNS的客户端执行:


nslookup www.mydomain.local 192.168.1.100

或者使用dig:


dig @192.168.1.100 www.mydomain.local

如果返回 192.168.1.100 则解析成功。

你也可以用 ping www.mydomain.local 测试连通性。


完成以上步骤,你就成功在服务器上搭建了私有DNS。

后续可以根据需要增加更多记录或配置反向解析。

如果你在操作中遇到本文未提及的问题,欢迎在评论区留言,我会第一时间帮你排查。

分享到:
上一篇
Docker部署Python爬虫:从零学会用Docker部署
下一篇
手把手教你宝塔面板防CC攻击设置,拒绝恶意流量
1
系统公告

泽御云五一特惠活动🔥

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