确保自己系统安装好docker后就可以进行搭建DNS服务器的步骤了
拉取sameersbn/bind镜像
docker pull sameersbn/bind:9.16.1-20200524
新建DNS服务器容器
docker run --name bind -it \
-e WEBMIN_ENABLED=true \
--restart=always\
--publish 53:53/tcp --publish 53:53/udp --publish 10000:10000/tcp \
--volume /srv/docker/bind:/data \
sameersbn/bind:9.16.1-20200524 -4
参数
-d detaches, 后台运行容器,并返回容器ID
-e WEBMIN_ENABLED=true 启用webmin
--name='bind' 容器名为bind
--restart=always 开机启动容器
--dns=127.0.0.1 配置容器的dns为127.0.0.1
--publish=172.17.42.1:53:53/udp 绑定udpip和端口
--publish=172.17.42.1:10000:10000 webmin图形化管理界面ip地址和端口
--volume=/srv/docker/bind:/data mounts /srv/docker/bind 存放docker持久化数据
--env='ROOT_PASSWORD=SecretPassword' 设置webminroot用户的登录密码为SecretPassword
sameersbn/bind:9.16.1-20200524 镜像名和镜像tag
-4 bind启动时用到的的参数表示只解析ipv4不解析ipv6,避免出现host unreachable resolving的情况
配置域名解析
浏览器打开 https://localhost:10000/ (请注意是HTTPS,忽略证书安全警告)进入Webmin页面,默认用户名密码是root和password。为了更方便使用,可以切换到中文。
默认你打开的页面可能和截图有些差异:“现有DNS区域” 一栏你会看到有一个根区域,用于解析互联网域名。纯粹私有网络,无互联网连接的情况下这个域可以删除。
点击创建一个主区域
以创建一个 “demo.com” 域为例:
下面是中文对应界面
选项说明:
-
区域类型:正向 ,即名字解析到IP地址
-
主服务器:默认填写的当前docker容器ID,最好改成 localhost. ,避免重启后失效. 因为我们只做私网解析,指向本地即可。
创建好主区域后,我们可以开始建立A记录了:
选择创建好的主区域,点击地址记录
填入名称为@
,可以修改默认ttl时间,最后填入域名需要解析到的ip地址,点击右上角应用按钮使地址解析生效.
下图是中文界面对应
测试
直接在centos上输入host demo.com 127.0.0.1
出现下面的结果表示demo.com正常解析到192.168.11.11
[root@VM_0_14_centos ~]# host demo.com 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases:
demo.com has address 192.168.11.11
其中demo.com
是域名,127.0.0.1
是DNS服务器的ip地址
你还可以使用例如host www.baidu.com 127.0.0.1
测试外网解析
[root@VM_0_14_centos ~]# host www.baidu.com 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases:
www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 182.61.200.7
www.a.shifen.com has address 182.61.200.6
如果出错可以用docker logs -f bind
命令查看bind容器运行日志
参考
1. sameersbn/bind
2. 10分钟搭建起私有网络DNS Server
3. Docker容器内不能联网的6种解决方案