Administrator
Published on 2025-12-23 / 16 Visits
0
0

用 Webmin 管理 BIND:实战一次搭建 DNS 主从架构

很多运维都遇到过这样的问题:
DNS 配好了,但不敢动;动了,又怕出事故。

真正的问题不是 BIND 难,而是:
👉 你缺的是一套“可视化、可控、可回滚”的管理方式。

这篇文章,我们用 Webmin + BIND,完整搭建一套 DNS 主从架构,并把所有关键名词、原理和坑一次讲清楚。

一、先把名词讲清楚(不然后面一定乱)

1️⃣ 什么是 DNS?

DNS(Domain Name System),域名系统,本质是:

把“人能看懂的名字”,翻译成“机器能用的 IP”。

例如:

www.example.com → 192.168.10.20

2️⃣ 什么是 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)是企业必备设计:

角色

作用

主服务器(Master)

负责维护区域数据

从服务器(Slave)

自动同步主服务器数据

客户端

查询主或从,结果一致

📌 目的只有一个

高可用 + 防误操作 + 扩展能力

配置Webmin和BIND(Berkeley Internet Name Domain)以实现主从模式,可以管理域名系统(DNS)并实现高可用性和冗余性。以下是配置步骤:

二、为什么推荐【Webmin + BIND 主从】

传统 BIND 的三大痛点

  1. 全靠手写 zone 文件

  2. 配置错误要等服务 reload 才知道

  3. 主从同步出问题,排查极其痛苦

Webmin 带来的改变

  • 表单化配置

  • 自动语法校验

  • 同步状态一眼可见

  • 非 DNS 专家也能维护

👉 它不是“偷懒”,而是“工程化”

三、整体架构设计

https://www.zytrax.com/books/dns/ch4/master-slave.png

https://blog.thelifeofkenneth.com/2019/09/hiddenmaster.png

https://www.cloudns.net/blog/wp-content/uploads/2023/08/DNS-Zone-Transfer.png

架构示意

          ┌─────────────┐
          │ DNS Master  │
          │ Webmin +    │
          │ BIND        │
          └─────┬───────┘
                │ AXFR/IXFR
          ┌─────▼───────┐
          │ DNS Slave   │
          │ Webmin +    │
          │ BIND        │
          └─────────────┘

四、环境准备(生产建议)

服务器规划

主机

IP

角色

dns-master

192.168.10.10

主 DNS

dns-slave

192.168.10.11

从 DNS

系统建议

  • 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" acyberdns

5.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 named

8.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/messages

8.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

  1. 登录到Webmin的管理界面(通常是 https://your_server_ip:10000)。

  1. 在左侧菜单中找到 "Webmin" -> "Webmin 配置" -> "Webmin 模块"。

  2. 点击 "从本地文件安装",选择 BIND 模块的安装文件。

  3. 安装完成后,在左侧菜单中找到 "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、验证配置

  • 使用 dignslookup 等工具在客户端测试域名解析是否正常。

  • 在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

  • 从:不维护数据

  • 不要两边都改


Comment