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 scs@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機上測試如下,成功: