原文链接
前言
在进行域名的解析的时候,如果我们希望指定映射关系,一般可以在设备中直接调整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
即可
补充
- 如果拉取拉取镜像超时或者过慢可以参考无法使用DockerPull正常拉取镜像解决方案
- 在路由器(网关)中配置完成后,大部分在该
WiFi
(子网)下的设备就会自动切换到指定地址工作,部分设备还需要将DNS
调整成自动,极少部设备需要手动设置DNS
服务器到为我们运行DNS
服务的机器IP