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

本方案考虑到国内大部分的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

7、创建数据目录及初始化
./initbind9.sh

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”

选择 “System configuration”

修改选项:
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

点击底部 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)

2、配置DNS转发



验证转发

3、访问控制




4、创建新的主区域master zone


添加辅助DNS服务器




5、添加DNS记录



五、备份与恢复
./backup_restore.sh

六、辅助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
淘宝小店:陈皮王五工作室