1. 概述
DockerHub中的 sameersbn/bind 镜像提供了搭建DNS服务器的功能,本文给出使用该镜像搭建DNS服务器的例子。
2. 环境
DNS服务器主机 IP:10.11.150.73 域名:master.open.com
客户端1的 IP:10.11.150.74 域名:node.open.com
客户端2的 IP:10.11.150.75 域名:node2.open.com
测试环境中73、74、75机不能连接DockerHub,中转机可连接73、74、75机和DockerHub。
3. 搭建
3.1 导入sameersbn/bind镜像
在中转机中下载sameersbn/bind镜像:
docker pull sameersbn/bind:latest
将镜像存出为tar包:
docker save -o sameersbn_bind.tar sameersbn:bind
通过scp将tar包复制到73机的/opt/scs/openxxs/目录下(任意具有读写权限的目录均可):
scp sameersbn_bind.tar [email protected]10.11.150.73:/opt/scs/openxxs/
在73机上将镜像导入:
docker load --input sameersbn_bind.tar
此时在73机上即有了sameersbn/bind的镜像了:
3.2 新建并启动DNS服务器容器
在73机运行如下命令新建并启动容器:
docker run --name=‘bind‘ -d -p 53:53/udp -e WEBMIN_ENABLED=false -v /opt/scs/openxxs/bind:/data sameersbn/bind:latest
其中--name是将该容器命名为bind;-p 开放53:53/udp端口便于其它主机访问DNS服务器;sameersbn/bind镜像本身安装了一个webmin服务,提供浏览器界面供用户配置域名项,本文通过修改配置文件进行DNS设置,因此通过 -e WEBMIN_ENABLED=false 禁用webmin的服务;-v 挂载73主机的/opt/scs/openxxs/bind目录(也可为其它目录),新建容器后将在该目录下生成bind/ect和bind/lib目录,其中etc目录下为DNS的相关配置文件。
3.3 参数配置
修改73、74、75主机的 /etc/resolv.conf 文件,添加如下内容,表示使用73机作为DNS服务器之一:
nameserver 10.11.150.73
在/opt/scs/openxxs/bind/bind/etc目录下,打开named.conf文件,内容如下:
可看出DNS的相关配置信息被分为了named.conf.options、named.conf.local和named.conf.default-zones三个文件。打开named.conf.options文件,修改allow-query 和 allow-transfer 字段为如下内容,表示允许73、74、75机使用73机上的DNS服务。
打开named.conf.local文件,增加正向解析和反向解析(注意每个zone后面要加上分号):
基于db.local新建正向解析文件forward.open(与named.conf.local中的命名一致):
cp db.local forward.open
内容如下:
基于db.127新建反向解析文件reverse.open(与named.conf.local中的命名一致):
cp db.127 reverse.open
内容如下:
修改了配置文件之后,需要进入bind容器中重新加载配置文件:
docker exec -i -t bind bash
进入bind容器后,里面的 /etc/bind 目录对应的就是73主机中的 /opt/scs/openxxs/bind/bind/etc 目录。先执行如下命令对配置文件的语法进行检查:
named-checkconf
语法没有问题后,使用rndc命令重新加载配置信息:
rndc reconfig
如果只是修改了某个区域的一些条目,则更新该区域即可,如下命令更新了open.com区域:
rndc reload open.com
3.4 测试
在73机上测试如下,成功:
在74机上测试如下,成功: