很多运维都遇到过这样的问题:
DNS 配好了,但不敢动;动了,又怕出事故。真正的问题不是 BIND 难,而是:
👉 你缺的是一套“可视化、可控、可回滚”的管理方式。
这篇文章,我们用 Webmin + BIND,完整搭建一套 DNS 主从架构,并把所有关键名词、原理和坑一次讲清楚。
一、先把名词讲清楚(不然后面一定乱)
1️⃣ 什么是 DNS?
DNS(Domain Name System),域名系统,本质是:
把“人能看懂的名字”,翻译成“机器能用的 IP”。
例如:
www.example.com → 192.168.10.202️⃣ 什么是 BIND?
BIND(Berkeley Internet Name Domain)是:
最经典
最稳定
最“老牌”的 DNS 服务软件
90% 的企业内网 DNS,底层都是 BIND。
它的特点是:
配置强大
但纯文本配置,极其容易出错
一行写错,整个 DNS 不可用
3️⃣ 什么是 Webmin?
Webmin 是一个 基于 Web 的 Linux 系统管理工具,可以:
用浏览器管理系统
图形化配置服务
自动校验配置合法性
👉 Webmin ≠ DNS 服务
👉 Webmin 是 BIND 的“可视化管理外壳”
4️⃣ 什么是 DNS 主从?
DNS 主从(Master / Slave)是企业必备设计:
📌 目的只有一个:
高可用 + 防误操作 + 扩展能力
配置Webmin和BIND(Berkeley Internet Name Domain)以实现主从模式,可以管理域名系统(DNS)并实现高可用性和冗余性。以下是配置步骤:
二、为什么推荐【Webmin + BIND 主从】
传统 BIND 的三大痛点
全靠手写 zone 文件
配置错误要等服务 reload 才知道
主从同步出问题,排查极其痛苦
Webmin 带来的改变
表单化配置
自动语法校验
同步状态一眼可见
非 DNS 专家也能维护
👉 它不是“偷懒”,而是“工程化”
三、整体架构设计


架构示意
┌─────────────┐
│ DNS Master │
│ Webmin + │
│ BIND │
└─────┬───────┘
│ AXFR/IXFR
┌─────▼───────┐
│ DNS Slave │
│ Webmin + │
│ BIND │
└─────────────┘
四、环境准备(生产建议)
服务器规划
系统建议
Rocky Linux / CentOS / 麒麟 Server
防火墙放行:
TCP/UDP 53
TCP 10000(Webmin)
五、安装Webmin和BIND
首先,确保在你的服务器上安装了Webmin和BIND。
5.1、创建webmin账号
groupadd acyberdns
useradd -s /sbin/nologin -g acyberdns -c "This user is restricted from login" acyberdns5.2、安装Webmin
wget http://prdownloads.sourceforge.net/webadmin/webmin-2.111.tar.gz
tar xf webmin-2.111.tar.gz
mv webmin-2.111 /opt/wyy-webmin-2.111
cd /opt/wyy-webmin-2.111
./setup.sh一路默认配置即可,注意最后要输入管理的账号密码,默认端口为10000(和中国电信没半毛钱关系),安装后管理地址为http://ip:端口。一路回车,系统选11,版本选7,密码默认为空,开机选择自启动


管理界面如下所示

5.3、安装BIND
#检查是否有旧版本的BIND:
rpm -qa | grep bind
#卸载旧版本的BIND:
yum remove bind bind-chroot bind-utils
#安装新的BIND
yum install bind bind-utils
#启动服务
systemctl start named.service
#设置自启动状态
systemctl enable named.service#主配置文件
/etc/named.conf
#占用端口
53号端口
#区域配置文件(用来保存域名和IP地址对应关系的所在位置。(调用数据配置文件))
/etc/named.rfc1912.zones
#数据配置文件
/var/named
#该目录用来保存域名和IP地址真实对应关系的数据配置文件。六、配置BIND为主服务器
在主服务器上进行以下配置:
6.1、配置主BIND服务器
编辑BIND主配置文件
vi /etc/named.conf创建日志配置文件
mkdir -p /var/log/named/
touch /var/log/named/named.log
chown -R named:named /var/log/named
systemctl daemon-reload
systemctl restart named
systemctl status named配置文件中添加zone配置(可以通过webmin创建区域配置文件)
options {
11 listen-on port 53 { any; };
12 listen-on-v6 port 53 { any; };
13 directory "/var/named";
14 dump-file "/var/named/data/cache_dump.db";
15 statistics-file "/var/named/data/named_stats.txt";
16 memstatistics-file "/var/named/data/named_mem_stats.txt";
17 secroots-file "/var/named/data/named.secroots";
18 recursing-file "/var/named/data/named.recursing";
19 allow-transfer { 10.145.1.11; };
20 recursion no;
21 allow-query { any; };
22
23 /*
24 - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
25 - If you are building a RECURSIVE (caching) DNS server, you need to enable
26 recursion.
27 - If your recursive DNS server has a public IP address, you MUST enable access
28 control to limit queries to your legitimate users. Failing to do so will
29 cause your server to become part of large scale DNS amplification
30 attacks. Implementing BCP38 within your network would greatly
31 reduce such attack surface
32 */
33
34 dnssec-enable yes;
35 dnssec-validation yes;
36
37 managed-keys-directory "/var/named/dynamic";
38
39 pid-file "/run/named/named.pid";
40 session-keyfile "/run/named/session.key";
41
42 /* https://fedoraproject.org/wiki/Changes/CryptoPolicy */
43 include "/etc/crypto-policies/back-ends/bind.config";
44 };
45 zone "acyber.cn" {
46 type master;
47 file "acyber.cn.zone";
48 };
49
50
51 logging {
52 channel default_debug {
53 file "/var/log/named/named.log" versions 3 size 5m;
54 severity dynamic;
55 print-time yes;
56 print-severity yes;
57 print-category yes;
58 };
59 category default { default_debug; };
60 };
61
62 zone "." IN {
63 type hint;
64 file "named.ca";
65 };
66
67 include "/etc/named.rfc1912.zones";
68 include "/etc/named.root.key";
69其中:
acyber.cn是域名。type master;表示这是主服务器。file "acyber.cn.zone";指向区域文件的路径。allow-transfer { IP_of_slave; };允许从服务器传输区域数据,替换IP_of_slave为从服务器的IP地址。

6.2、创建区域文件(zone文件)
vi /var/named/acyber.cn.zone示例区域文件:
$TTL 604800
@ IN SOA ns1.acyber.cn. admin.acyber.cn. (
2024080701 ; Serial
3600 ; Refresh
1800 ; Retry
1209600 ; Expire
86400 ) ; Minimum TTL
;
@ IN NS ns1.acyber.cn.
@ IN NS ns2.acyber.cn.
ns1 IN A 10.145.1.10
ns2 IN A 10.145.1.11重启BIND服务
systemctl restart named七、配置BIND为从服务器
在从服务器上进行以下配置:
7.1、配置从BIND服务器
vi /etc/named.conf创建日志配置文件
mkdir -p /var/log/named/
touch /var/log/named/named.log
chown -R named:named /var/log/named
systemctl daemon-reload
systemctl restart named
systemctl status named示例配置:
options {
directory "/var/named";
allow-query { any; };
recursion no;
};
zone "example.com" {
type slave;
file "slaves/acyber.cn.zone";
masters { 10.145.1.10; };
};其中:
type slave;表示这是从服务器。file "slaves/acyber.cn.zone";指向区域文件的路径。masters { IP_of_master; };指定主服务器的IP地址,替换IP_of_master为主服务器的IP地址。

7.2、重启BIND服务
systemctl daemon-reload
systemctl restart named八、验证BIND主从配置
要确认在麒麟V10上配置的BIND主从服务器正常工作,可以通过以下步骤进行检查和验证:
8.1、检查BIND服务状态
首先,确保BIND服务在主服务器和从服务器上都在运行:
systemctl status named
如果服务没有启动,使用以下命令启动服务:
systemctl start named
systemctl enable named8.2、验证配置文件的语法
使用 named-checkconf 命令来验证配置文件的语法是否正确:
named-checkconf /etc/named.conf如果语法正确,命令不会输出任何内容。如果有错误,它们会显示在终端中。
8.3、验证区域文件的语法
使用 named-checkzone 命令来验证区域文件的语法是否正确:
named-checkzone acyber.cn /var/named/acyber.cn.zone输出应该显示类似以下内容:
8.4、测试主服务器的DNS解析
在主服务器上使用 dig 命令来测试DNS解析是否正常:
dig @localhost acyber.cn输出应该包含以下内容:
8.5、检查从服务器的区域传输
在从服务器上,使用 dig 命令来检查区域传输是否正常:
dig @10.145.1.10 acyber.cn axfr输出应该包含整个区域文件的内容。

8.6、查看日志文件
检查主服务器和从服务器的BIND日志文件,以查看是否有任何错误或警告。通常,日志文件位于 /var/log/messages 或 /var/log/named 中:
tail -f /var/log/messages8.7、使用 rndc工具
使用 rndc 工具来检查和管理BIND服务。例如,您可以使用以下命令查看区域信息:
rndc status
rndc dumpdb -zones
8.8、验证从服务器的DNS解析
在从服务器上使用 dig 命令来测试DNS解析是否正常:
dig @10.145.1.10 acyber.cn输出应该与在主服务器上看到的相同,包含区域的DNS记录。


九、修改webmin的数组和启动名称及路径
#创建系统服务的用户,登录到指定的路径,并且添加用户备注
useradd -c "WYY DNS Webmin" -d /opt/webmin-2.111 -s /sbin/nologin wyywebmin
#先暂停服务再修改
systemctl stop wyy-webmin
mv /usr/lib/systemd/system/webmin.service /usr/lib/systemd/system/wyy-webmin.service
vi /usr/lib/systemd/system/wyy-webmin.service
#修改启动路径为/opt/webmin-2.111
chown -R wyywebmin /opt/webmin-2.111
systemctl daemon-reload
systemctl start wyy-webmin十、配置Webmin管理BIND
10.1、添加BIND模块到Webmin
登录到Webmin的管理界面(通常是
https://your_server_ip:10000)。
在左侧菜单中找到 "Webmin" -> "Webmin 配置" -> "Webmin 模块"。
点击 "从本地文件安装",选择 BIND 模块的安装文件。
安装完成后,在左侧菜单中找到 "Servers" -> "BIND DNS Server"。
10.2、配置BIND选项和区域
在Webmin中配置BIND的选项和管理区域文件。你可以通过Webmin界面添加、修改和删除DNS记录,同时监控BIND服务器的运行状态。
1. 设置主服务器(Master):
- 在BIND DNS Server页面,点击“Create master zone”。
- 输入你的域名(例如example.com)和相关设置,然后点击“Create”。
2. 设置从服务器(Slave):
- 在BIND DNS Server页面,点击“Create slave zone”。
- 输入你的域名和主服务器的IP地址,然后点击“Create”。
3. 配置解析:
4. 保存:
10.3、验证配置
使用
dig或nslookup等工具在客户端测试域名解析是否正常。在Webmin界面中查看BIND的状态和日志,确保服务正常运行。
通过以上步骤,你可以配置Webmin和BIND,并设置主从模式以管理你的域名系统。
验证从域名服务器
验证解析
验证主从的可用性
如下所示,通过10和11的DNS都能解析出域名的地址为10,确保了DNS的主从可靠性。
10.4、修改语言
10.5、配置密码
十一、DNS 主从的“隐形坑位”(非常重要)
❌ 1. Serial 不递增
BIND 依赖 Serial 判断是否同步
Webmin 会自动处理(手写最容易忘)
❌ 2. 防火墙忘放 TCP 53
区域传送走 TCP
只放 UDP 会同步失败
❌ 3. 主从角色混乱
主:允许 transfer
从:不维护数据
不要两边都改