使用Docker搭建轻量级内网DNS服务器_docker dns-CSDN博客

原文链接

欢迎大家对于本站的访问 - AsterCasc

前言

在进行域名的解析的时候,如果我们希望指定映射关系,一般可以在设备中直接调整hosts文件处理。比如在Linux中我们可以访问修改/etc/hosts,在Windows下我们可以访问修改C:\Windows\System32\drivers\etc\hosts

但是如果设备不方便直接修改hosts,或者内网有许多设备的情况,指定一个本地的DNS服务器就是一个比较好的方法了。指定映射关系,除了可以加快解析过程,自定义映射关系,还经常用于解决NAT回流问题,这里我们利用Docker以及dnsmasq完成DNS服务的快速搭建

搭建

内网机器通路

对于内网DNS服务,我们需要一个稳定IP地址,这里可以在路由器(子网网关)中指定,将IP地址设定为我们运行DNS服务的机器上,并且在该机器上开放53端口,防火墙也需要添加53端口,对于ufw而言:

sudo ufw allow 53

然后在路由器(子网网关)中将DNS服务器设置为该IP地址,比如网关的地址为192.168.1.1,设置运行DNS服务的机器IP地址为192.168.1.100

服务构建

Docker安装

对于CentOS而言,一般流程如下:

#添加源
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum-config-manager --add-repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
#选择版本安装
yum list docker-ce --showduplicates | sort -r
yum install docker-ce-20.10.13 docker-ce-cli-20.10.13 containerd.io
systemctl start docker
systemctl enable docker
docker -v

对于Ubuntu而言,一般流程如下:

sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt install docker-ce
sudo systemctl start docker
sudo systemctl enable docker
sudo docker -v
构建

我们这里使用docker-compose.yml构建,内容如下:

version: '3'
services:
  dns:
    image: andyshinn/dnsmasq
    container_name: dnsmasq
    command: --no-daemon
    ports:
      - "53:53/tcp"
      - "53:53/udp"
    cap_add:
      - NET_ADMIN
    restart: unless-stopped
    volumes:
      - ./dnsmasq.conf:/etc/dnsmasq.conf
      - ./hosts:/etc/hosts

使用4km3/dnsmasq镜像也可,是andyshinn/dnsmasq的迁移版本

同文件下,配置dnsmasq.conf,内容如下:

log-queries
no-resolv
cache-size=2000

server=114.114.114.114
server=8.8.8.8

address=/your.domin.com/192.168.1.10

这里可以使用address用于自定义映射,更多配置项参考:dnsmasq.conf.example。完成后使用docker compose up -d启动即可

此时可能会遇到53端口被占用的情况,我们使用sudo lsof -i :53可以得知占用服务,一般可能为systemd-resolved,这个服务是systemd的一部分,用于简化和增强Linux系统中的网络名称解析过程,此时使用在etc/systemd/resolved.conf文件中DNSStubListener=no,然后重启服务sudo systemctl restart systemd-resolved即可

补充

  1. 如果拉取拉取镜像超时或者过慢可以参考无法使用DockerPull正常拉取镜像解决方案
  2. 在路由器(网关)中配置完成后,大部分在该WiFi(子网)下的设备就会自动切换到指定地址工作,部分设备还需要将DNS调整成自动,极少部设备需要手动设置DNS服务器到为我们运行DNS服务的机器IP

原文链接

欢迎大家对于本站的访问 - AsterCasc