基于Docker快速搭建Webmin+bind私有DNS服务器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于Docker快速搭建Webmin+bind私有DNS服务器相关的知识,希望对你有一定的参考价值。
参考技术A 私有DNS服务对服务器的硬件要求很低,操作系统的安装以及docker服务的安装这里就不再详细介绍,搭建私有DNS服务器需要占用的端口 53 , 10000 ,所以首先禁用服务 systemd-resolved
DNS 服务器IP地址是 192.168.7.127
登录webmin 的用户名是 root ,密码是环境变量 ROOT_PASSWORD 的值,登录进去之后可以修改语言如下如
创建反向区域
同网段机器配置DNS首选服务地址 192.168.7.127 ,
不需要再配置 114.114.114.114,233.5.5.5 等dns服务器地址,在私有DNS 转发中已配置.
配置后需要等待1分钟左右,即可使用私有域名来访问对应主机.
使用docker-bind搭建DNS服务器
- 使用docker-bind搭建私有的DNS服务器,在整个内网集群中使用域名来管理服务器已经进行服务配置
- 以下说明是基于Ubuntu20.04的,如果要构建在树莓派上运行的docker镜像,参考文章
配置与安装
本机DNS配置
sudo nano /etc/systemd/resolved.conf
# 更改为以下内容
# 假设docker-bind所在服务器IP地址为192.168.3.37
[Resolve]
DNS=192.168.3.37
#FallbackDNS=
#Domains=
#LLMNR=no
#MulticastDNS=no
#DNSSEC=no
#DNSOverTLS=no
#Cache=no
DNSStubListener=no
#ReadEtcHosts=yes
sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
- 参考 怎样释放
systemd-resoved
使用的53端口 配置后,此时
/etc/resolv.conf
的内容为# This file is managed by man:systemd-resolved(8). Do not edit. # # This is a dynamic resolv.conf file for connecting local clients directly to # all known uplink DNS servers. This file lists all configured search domains. # # Third party programs must not access this file directly, but only through the # symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a different way, # replace this symlink by a static file or a different symlink. # # See man:systemd-resolved.service(8) for details about the supported modes of # operation for /etc/resolv.conf. nameserver 192.168.3.37 nameserver 192.168.3.1
- 第一个是我们指定的bind构建的dns服务器
- 第二个是本地的子网的网管的dns服务器
- 注意先后顺序不能更改,如果内容并非如此的话,可以删除
/etc/resolv.conf
并重新执行sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
- 如果并没有
/run/systemd/resolve/resolv.conf
文件,说明执行了systemctl disable systemd-resolved
或service systemd-resolved stop
,因此执行systemctl enable systemd-resolved
和service systemd-resolved start
并重启即可
docker-bind安装
选定集群中用作搭建DNS服务器的服务器执行下列命令
# 在关闭本机解析服务之前拉取镜像
docker pull sameersbn/bind:9.16.1-20200524
# 使用docker容器部署bind服务
docker run \\
--name bind \\
-d \\
--restart=always \\
--publish 53:53/tcp \\
--publish 53:53/udp \\
--publish 10000:10000/tcp \\
--volume docker-bind:/data \\
sameersbn/bind:9.16.1-20200524
docker-bind配置
- 假设服务器IP地址为
192.168.3.37
,本地根域名为dev
。 - 访问Webmin管理界面,地址为:https://192.168.3.37:10000/,默认用户名:
root
,密码:password
,相关设置如下:
Servers → BIND DNS Server → Global Server Options → Access Control Lists,添加:
- allow-query any
Servers → BIND DNS Server → Global Server Options → Forwarding and Transfers → Global forwarding and zone transfer options,添加转发dns服务器IP地址:
- 8.8.8.8
- 8.8.4.4
- 暂时只添加了Google的DNS。添加其他的一些国内的DNS(如AliDNS),反而会有问题(ntp 服务器访问失败等等)
Servers → BIND DNS Server → Existing DNS Zones → Create Master Zone
- Zone type: Forward (Names to Addresses)
- Domain name / Network: dev
- Master server: a.dev
- Email address: admin@dev
Servers → BIND DNS Server → Existing DNS Zones → Create Master Zone
- Zone type: Reverse (Addresses to Names)
- Domain name / Network: 192.168.3
- Master server: a.dev
- Email address: admin@dev
Servers → BIND DNS Server → Existing DNS Zones → dev
Address中添加DNS记录
- Name: a,Address: 192.168.3.37,点击Create,会自动添加并更新逆向地址记录
按需添加其他DNS记录
- 可能需要重启容器才会是新添加的DNS记录生效
Servers → BIND DNS Server → Existing DNS Zones → dev→ Name Server确认存在域名服务器地址
- Zone Name: dev.
- Name Server: a.dev.
测试
更新本机nameservers设置,设定为服务器IP地址,并执行以下命令检查DNS服务器工作是否正常
nslookup www.baidu.com
nslookup a.dev
nslookup b.dev
如果出现
;; Got recursion not available from 192.168.3.37, trying next server
的问题,执行下述操作(更方便的做法是按照文件的内容 在dashboard中进行修改:Servers → BIND DNS Server → Global Server Options → Edit Config File)docker cp bind:/etc/bind/named.conf.options ./ docker cp bind:/etc/bind/named.conf ./ # 分别对两文件进行修改 # named.conf acl trusted { 192.168.0.0/16; 10.153.154.0/24; localhost; localnets; }; // This is the primary configuration file for the BIND DNS server named. // // Please read /usr/share/doc/bind9/README.Debian.gz for information on the // structure of BIND configuration files in Debian, *BEFORE* you customize // this configuration file. // // If you are just adding zones, please do that in /etc/bind/named.conf.local include "/etc/bind/named.conf.options"; include "/etc/bind/named.conf.local"; include "/etc/bind/named.conf.default-zones"; # named.conf.options options { directory "/var/cache/bind"; // If there is a firewall between you and nameservers you want // to talk to, you may need to fix the firewall to allow multiple // ports to talk. See http://www.kb.cert.org/vuls/id/800113 // If your ISP provided one or more IP addresses for stable // nameservers, you probably want to use them as forwarders. // Uncomment the following block, and insert the addresses replacing // the all-0\'s placeholder. // forwarders { // 0.0.0.0; // }; //======================================================================== // If BIND logs error messages about the root key being expired, // you will need to update your keys. See https://www.isc.org/bind-keys //======================================================================== dnssec-validation auto; listen-on-v6 { any; }; forwarders { 8.8.8.8; 8.8.4.4; }; allow-query { any; }; allow-recursion { trusted; }; allow-query-cache { trusted; }; }; # 写回到容器中 docker cp ./named.conf.options bind:/etc/bind/named.conf.options docker cp ./named.conf bind:/etc/bind/named.conf # 重启容器 docker restart bind
- 参考 issue
参考
- sameersbn / docker-bind
- Setup Bind DNS Using Webmin on Debian 10
- 在CentOS 8上使用Webmin配置BIND DNS服务器
- DNS Forwarder and Transfer using Bind and Webmin
- BIND DNS Server
- DNS之BIND使用小结(Forward转发)
以上是关于基于Docker快速搭建Webmin+bind私有DNS服务器的主要内容,如果未能解决你的问题,请参考以下文章