Docker 搭建私有 DNS 服务器
daocker搭建私有dns服务器
前置量:需要docker环境,版本无要求
注意:私有dns部署的话用以下命令可以使用,但是该dns服务器只能解析记录的域名,没有记录的域名无法解析。原因是,容器内的网络默认是桥接的docker0的网卡,在容器内是无法访问公网的,所以就算配置了转发,也无法进行解析。
1docker run --name bind -d --restart=always --publish 53:53/tcp --publish 53:53/udp --publish 10000:10000/tcp --volume /container-data/bind:/data sameersbn/bind:9.16.1-20200524如果需要解析应记录以外的域名地址,则需要添加
--net=host参数,这个参数将容器加入到主机的网络命名空间,直接使用主机的网络资源,可以提高网络性能,但是容器与主机之间的隔离性较差。
如果未关闭防火墙则使用systemctl stop firewalld ;systemctl disable firewalld关闭防火墙,如果docker run创建容器时未添加--net=host参数,则需要在防火墙上打开对应端口
处理好防火墙之后,使用浏览器,打开https://IP:10000地址,默认用户名和密码 root/password.
登录之后在左侧导航栏选择:server => BIND DNS Server => 创建新的主区域

输入域名,可以是一级域名test或test.com。

点击新建完成创建域名。
创建好之后,点击左上角的【地址】进行创建映射

输入主机名以及对应的IP,点击新建

新建完成之后,可以看到下方已经列出刚刚创建的映射,点击右上角应用配置,就创建好了

使用cmd或这linux中的nslookup命令进行验证。

解析成功,证明dns服务器解析记录生效。
在Linux中主机名解析
在Linux中,我们将服务器的dns地址改为刚刚创建的dns服务器的地址。使用ping命令或nslookup命令可以看到域名解析成功。
但是同样使用ping或者nslookup解析主机名就无法解析到ip地址。如图

解决办法:
可以设置文件/etc/resolv.conf,在文件中加入默认搜索域search test.chang,多个搜索域可以使用空格隔开。如图:

但是这样设置是临时的,重启服务器或者重启网络之后会被更改,永久修改办法:
1、修改/etc/sysconfig/network-scripts/ifcfg-***

2、修改NetworkManager.conf

3、修改dns服务器的named.conf文件

修改之后如下,成功
