Docker部署BIind9 DNS服务器过程
作者:学亮编程手记
这篇文章主要介绍了Docker部署BIind9 DNS服务器过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
一、环境准备
安装 Docker 环境
- 确保服务器已安装 Docker 和 Docker Compose(若使用 Compose 方式)。
- 若离线部署,需提前在有网络的环境中下载镜像
sameersbn/bind
及相关依赖包。
创建持久化存储目录
mkdir -p /opt/docker/bind # 用于存储配置文件和区域数据
二、部署 BIND DNS 容器
方案一:直接通过 docker run 命令部署
docker run -d --name dns-server \ --restart=always \ --publish 53:53/tcp \ # 开放 DNS 服务 TCP/UDP 端口 --publish 53:53/udp \ --publish 10000:10000/tcp \ # Webmin 管理界面端口 --volume /opt/docker/bind:/data \ # 挂载配置目录 --env ROOT_PASSWORD=your_password \ # 设置 Webmin 登录密码 --env TZ='Asia/Shanghai' \ # 指定时区 --env WEBMIN_INIT_SSL_ENABLED=false \ # 可选:禁用 SSL(若通过代理管理) sameersbn/bind:9.16.1-20200524
方案二:通过 Docker Compose 部署(推荐)
创建 docker-compose.yml
文件:
version: '3.1' services: dns: image: sameersbn/bind:9.16.1-20200524 container_name: dns-server restart: always environment: TZ: 'Asia/Shanghai' ROOT_PASSWORD: your_password # Webmin 密码 WEBMIN_ENABLED: 'true' # 启用 Webmin ports: - "53:53/tcp" - "53:53/udp" - "10000:10000/tcp" volumes: - ./data:/data # 数据持久化目录 networks: - dns-network # 可选:自定义网络 networks: dns-network: external: true
启动服务:
docker compose up -d
三、Webmin 管理界面配置
访问 Webmin
- 浏览器访问
https://<服务器IP>:10000
,使用root
和预设密码登录。 - 注意:必须使用 HTTPS,否则会提示 SSL 错误。
基础设置
- 进入
Webmin -> Change Language and Theme
,选择中文主题(部分菜单可能仍为英文)。 - 确认时区设置与容器启动参数一致。
四、配置 DNS 解析规则
创建主区域(正向解析)
- 进入
服务器 -> BIND DNS 服务器
,点击 创建新的主区域。 - 填写域名(如
example.com
),主服务器名称设为localhost
,邮箱格式为admin.example.com
。
添加 A 记录
- 在新建的主区域中,选择 地址,输入子域名(如
www
)和对应 IP(如192.168.1.100
)。 - 支持通配符
*
解析所有未定义子域名。
反向解析(可选)
- 创建反向区域(如
192.168.1.0/24
),添加 PTR 记录将 IP 映射回域名。
应用配置
- 每次修改后点击右上角 应用配置 或重启容器使生效:
docker restart dns-server
五、客户端测试与使用
配置客户端 DNS
修改客户端 DNS 服务器地址为 BIND 容器所在宿主机的 IP。
- Linux:编辑
/etc/resolv.conf
,添加nameserver 192.168.1.200
。 - Windows:在网络适配器设置中指定 DNS 地址。
解析验证
nslookup www.example.com 192.168.1.200 # 指定 DNS 服务器查询 ping www.example.com # 验证解析结果
缓存刷新(若需)
- Windows:
ipconfig /flushdns
- Linux:
systemctl restart systemd-resolved
。
六、注意事项与优化
防火墙与 SELinux
- 开放端口:
53/tcp
、53/udp
、10000/tcp
。 - 若 SELinux 启用,需调整策略或临时禁用。
转发外部 DNS(可选)
- 在容器内修改
/data/bind/etc/resolv.conf
,添加公共 DNS(如114.114.114.114
)以解析外部域名。 - 修改
/data/bind/etc/named.conf.options
,添加allow-query { any; };
允许所有查询。
性能与安全
- 避免在容器内运行非必要服务(如 Webmin 的监控功能),减少资源占用。
- 定期备份
/opt/docker/bind
目录防止配置丢失。
常见问题:
- 端口冲突:若宿主机 53 端口被占用,可改为
-p 5353:53/udp
,但需客户端显式指定端口。 - Webmin 访问异常:确保使用 HTTPS,浏览器忽略证书警告或配置有效证书。
- 解析延迟:检查 DNS 缓存,或重启容器强制刷新。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。