部署带图形界面的DNS服务器bind9

一个内网DNS服务器,支持2000+内部设备,支持集群,开源免费,有图形化配置界面的,且维护方便的,比较好的解决方案是bind9 + webmin 的Docker化部署。
其实内网的DNS服务器,用Windows Server 的DNS服务器比较方便靠谱,只是Windows Server本身要钱,除非用盗版。

部署带图形界面的DNS服务器bind9

本方案考虑到国内大部分的Linux服务器都会安装宝塔面板, 为了避免宝塔面板webmin的冲突,并且保证系统稳定和可靠性, bind9 和 webmin打包整合成Docker ,避免了系统复杂和冲突。
bind9 : DNS服务器
Webmin:图形化管理界面
Docker化:通过Dockerfile生成Docker Image,稳定、可靠并且干净,并且避免Webmin 同宝塔面板冲突。
下面详述部署过程,以下过程在CentOS9下通过:

一、网络架构

假设内网的网络是这样的

1个DNS主节点,2个DNS辅助节点, 独立使用webmin管理
主节点 172.16.10.39 Master,允许同步
辅节点1 172.16.10.38 Slave,从主同步
辅节点2 172.16.10.37 Slave,从主同步
域名:example.com

二、节点配置示例

主节点:

BIND named.conf.options 和 named.conf.local 配置
Zone 文件 db.example.com
Webmin 端口 10000
Docker 映射宿主机 53 UDP/TCP,10000 webmin端口

辅节点:

BIND 配置从主节点同步
Webmin 端口 10000(若同一台机器,需改不同端口,建议别用同一台主机)
Docker 映射宿主机 53 UDP/TCP,10000端口

三、部署

1、 系统更新

sudo dnf update

2、建立目录

webmin-bind/
├── docker-compose.yml
├── Dockerfile
└── init/
├── named.conf
├── zones/
│ └── db.example.com <- 仅主节点有
└── webmin/ <- 仅主节点有

3、把压缩包下载后文件放入对应的目录

主节点压缩包

辅节点压缩包

把docker-compose.yml、Dockerfile、named.conf、db.example.com等放入对应目录

4、防火墙上打开端口

宿主机防火墙上打开
TCP : 53 , DNS 传输(大数据/Zone Transfer)
UDP :53 , DNS 查询(解析)
TCP :10000 , Webmin管理端口

5、创建Docker镜像

docker-compose build

6、检查镜像是否正常

docker images

部署带图形界面的DNS服务器bind9

7、创建数据目录及初始化

./initbind9.sh

部署带图形界面的DNS服务器bind9

8、启动容器

docker-compose up -d

9、浏览器访问

http://<主节点IP>:10000

webmin的初始密码:12345678

10、更新

docker-compose down -v
docker rmi webmin-bind
docker-compose build

四、webmin配置DNS

1、 修改webmin对bind9的默认配置

a. 因为bind9和webmin都是在docker下运行,没有systemd ,在webmin中默认用systemd来重启bind服务。修改如下:

打开 Webmin → Servers → BIND DNS Server,点击页面左上角的 “Module Config”

部署带图形界面的DNS服务器bind9

选择 “System configuration”

部署带图形界面的DNS服务器bind9

修改选项:
Command to start BIND:改为 named (原systemctl start bind9.service)
Command to stop BIND:改为 rndc stop (原systemctl stop bind9.service)
Command to apply configuration:改为 rndc reload (原systemctl reload bind9.service)
如果有 Command to restart BIND:改为 rndc reload

部署带图形界面的DNS服务器bind9

点击底部 Save

b. Zone文件存储位置

webmin默认的存储文件位置,并没有挂载到宿主机中,因此需要修改存储文件配置
修改选项:

Directory for master zone files:改为 /var/named (原/var/lib/bind)
Directory for slave/stub zone files:改为 /var/cache/bind (原/var/lib/bind)
Format for the name of forward zone files: 改为 db.ZONE (原ZONE.hosts)
Format for the name of reverse zone files: 改为 rev.ZONE (原ZONE.rev)

部署带图形界面的DNS服务器bind9

2、配置DNS转发

部署带图形界面的DNS服务器bind9
部署带图形界面的DNS服务器bind9
部署带图形界面的DNS服务器bind9

验证转发

部署带图形界面的DNS服务器bind9

3、访问控制

部署带图形界面的DNS服务器bind9
部署带图形界面的DNS服务器bind9
部署带图形界面的DNS服务器bind9
部署带图形界面的DNS服务器bind9

4、创建新的主区域master zone

部署带图形界面的DNS服务器bind9
部署带图形界面的DNS服务器bind9

添加辅助DNS服务器

部署带图形界面的DNS服务器bind9
部署带图形界面的DNS服务器bind9
部署带图形界面的DNS服务器bind9
部署带图形界面的DNS服务器bind9

5、添加DNS记录

部署带图形界面的DNS服务器bind9
部署带图形界面的DNS服务器bind9
部署带图形界面的DNS服务器bind9

五、备份与恢复

./backup_restore.sh

部署带图形界面的DNS服务器bind9

六、辅助DNS服务器

1、创建webmin-bind主目录

2、创建镜像

docker-compose build

3、获取主服务器记录

在主服务器 ./export_slave_named.sh

生成named.conf.local复制到辅助DNS服务器的init目录

4、初始化

./initbind9.sh

5、注意点

在主服务器上创建新的zone ,并不会同步到辅助DNS服务器上,只有执行export_slave_named.sh 生成named.conf.local复制到辅助DNS服务器

6、强制同步主服务器

docker exec webmin-slave rndc retransfer 每个zone

执行脚本自动同步所有zone

./sync_all_slave_zones.sh

七、其他

虽然比Windows Server 的部署和使用复杂了一点,但这是一个完全免费和开源的DNS服务器,并且稳定性并不落于Windows Server。

另外,由于Docker 拉取的镜像比较大, 服务器需要有一定的磁盘空间,镜像大约600MB左右,建议服务器剩余空间在1.2GB以上。

原创文章,作者:Gary,如若转载,请注明出处:https://www.cpw5.top/1600.html

淘宝小店:陈皮王五工作室

(0)
GaryGary
上一篇 2025-07-19 下午4:59
下一篇 2小时前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注