高效搭建基于dnsmasq通过webui管理的dns服务器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/firehadoop/article/details/83860191

     由于开发需要多台服务器使用域名解析,需要在内网搭建一套dns系统,原来搭建过基于bind的dns服务器,但是这种服务器的配置修改比较繁琐,因此想搭建一个轻量级的dns服务器。这里我使用了dnsmasq服务。

首先了解一下什么是dnsmasq,维基百科这样说明:

这次的web-ui管理界面是基于go语言开发,下面让我们开始吧!

一、准备一台centos7的虚拟机服务器,最小安装即可,然后安装docker,这里关于docker的安装不再赘述;

二、在/home目录下编写Dockerfile文件

FROM alpine:edge
LABEL maintainer="[email protected]"
# webproc release settings
ENV WEBPROC_VERSION 0.1.9
ENV WEBPROC_URL https://github.com/jpillora/webproc/releases/download/$WEBPROC_VERSION/webproc_linux_amd64.gz
# fetch dnsmasq and webproc binary
RUN apk update \
        && apk --no-cache add dnsmasq \
        && apk add --no-cache --virtual .build-deps curl \
        && curl -sL $WEBPROC_URL | gzip -d - > /usr/local/bin/webproc \
        && chmod +x /usr/local/bin/webproc \
        && apk del .build-deps
#configure dnsmasq
run mkdir -p /etc/default/
RUN echo -e "ENABLED=1\nIGNORE_RESOLVCONF=yes" > /etc/default/dnsmasq
COPY dnsmasq.conf /etc/dnsmasq.conf
ADD program.toml /etc/default.toml
#run!
ENTRYPOINT ["webproc","/etc/default.toml"]

三、在Dockerfile文件目录下编写webui启动配置文件program.toml


ProgramArgs = ["dnsmasq","--no-daemon"]

# Interface to serve web UI. Warning: defaults to ALL interfaces.
Host = "0.0.0.0"

# Port to serve web UI
Port = 8080

# 登录管理dns的用户名密码 web UI
User = "dns"
Pass = "dns"

# 允许哪些ip地址范围访问webui,安全配置选项,全部清空表示不做任何限制
# For example, ["10.0.0.0/8"]
AllowedIPs = ["133.3.103.0/24","133.3.5.0/24"]

Log = "both"

# OnExit dictates what action to take when the process exits:
# "ignore" - ignore and wait for manual restart via the web UI
# "proxy" - also exit webproc with the same exit code
# "restart" - automatically restart with exponential backoff time delay between failed restarts
OnExit = "restart"

ConfigurationFiles = ["/etc/dnsmasq.conf"]

RestartTimeout = "30s"

四、在Dockerfile目录下配置dnsmasq执行时使用的配置文件

#dnsmasq config, for a complete example, see:
#  http://oss.segetech.com/intra/srv/dnsmasq.conf
#log all dns queries
log-queries
#dont use hosts nameservers
no-resolv
#use google as default nameservers
server=133.0.160.15
#server=8.8.8.8
#serve all .company queries using a specific nameserver
server=/zqkzzx/133.3.5.145
#explicitly define host-ip mappings
address=/freenas.zqkzzx.com/133.3.103.174
address=/cloud.zqkzzx.com/133.3.103.193
#serve all .xfvip queries using a specific nameserver
server=/xfvip/133.3.5.145
address=/nas.xfvip.com/133.3.103.174
address=/cloud.xfvip.com/133.3.103.193
address=/wok.xfvip.com/133.3.103.202
#serve all .xfvip queries using a specific nameserver
server=/xykz/133.3.5.145
address=/master.xykz.com/192.168.1.100
address=/node1.xykz.com/192.168.1.55
address=/node2.xykz.com/192.168.1.208
address=/nfs2.xykz.com/192.168.1.74

五、docker编译镜像

docker build -t dnsmasq:v2 .

在dockerfile文件目录下应该有三个前面已经准备好的文件如下:

具体编译过程如下

六、查看编译好的镜像

docker images

我们可以发现有两个版本的dnsmasq,我们上面编译生成的v2版本

七、执行镜像运行dnsmasq,开启dns服务与webui管理

      docker run \
     --name dnsmasq \
     -d \
     -p 53:53/udp \
     -p 5380:8080 \
     -v /home/wangli/dnsmasq/dnsmasq.conf:/etc/dnsmasq.conf \
     --restart always \
     dnsmasq:v2

容器内开启udp53端口提供dns服务,开启8080端口提供webui服务,在容器运行的主机上对外发布udp53端口与tcp5380端口,其中通过tcp5380端口完成webui的管理

八、通过chrome浏览器登录docker宿主机5380端口配置dns

1、server下对于bind配置中的zone,也就是一个域

2、每个server下可以配置多个A记录,也就是address

3、dnsmasq可以支持同时配置多个域

这个webui界面非常简洁明了,纵向分三列,最左边是控制台负责操作服务重启与日志开关,第二列是配置文件加载内容,由于在docker运行时我们把配置文件写在本地/home/wangli/dnsmasq/dnsmasq.conf,所以即使docker挂掉也可以保证数据不丢失,如果把配置文件写在nfs或其他网络共享磁盘上可以供多个dnsmasq服务使用。

最右边就是dnsmasq运行日志,通过最左边的控制台可以控制输出内容,默认全部输出。

九、在客户机上配置dns解析服务器地址为docker主机ip

十、测试dns解析是否成功

dnsmasq日志显示主机dns请求

十一、源码补充说明

1、如果启动时定义了default.toml,则通过docker -e 选项导入的环境变量会被default.toml文件中定义的变量值覆盖;

2、port、http_user、http_pass这三个变量是可以通过docker -e 方式导入执行的,如果没有与default.toml冲突;

如果配置了AllowedIPs选项,则没有在其中的ip地址访问webui时会被拒绝。具体如下:

猜你喜欢

转载自blog.csdn.net/firehadoop/article/details/83860191