更新时间:2023-01-10 10:00:57浏览次数:752+次
本文介绍在Linux平台Docker容器中运行和使用Dnsmasq的方法。
准备服务器及安装Docker
1、准备服务器
我们将首先在系统上安装所需的软件包:
##在RHEL/CentOS/RockyLinux 8上
sudo yum update
sudo yum install curl vim
##在Debian/Ubuntu上
sudo apt update && sudo apt upgrade
sudo apt install curl vim
##在Fedora上
sudo dnf update
sudo dnf -y install curl vim
其次,停止在端口53上运行的system-resolved服务。此端口将由Dnsmasq使用:
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
删除/etc/resolv.conf符号链接:
$ ls -lh /etc/resolv.conf
-rw-r--r-- 1 root root 49 Feb 23 04:53 /etc/resolv.conf
$ sudo unlink /etc/resolv.conf
更新resolve conf文件:
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
允许端口53通过防火墙:
##用于防火墙
sudo firewall-cmd --permanent --add-port=53/udp
sudo firewall-cmd --reload
##对于UFW
sudo ufw allow 53
2、在Linux上安装Docker和Docker Compose
对于本文,您需要在Linux系统上安装Docker Engine。这可以通过以下指南中提供的帮助来实现:
如何在Ubuntu 22.04系统上安装Docker CE:https://www.hmxthome.com/linux/4941.html
确保Docker已启动并启用:
sudo systemctl start docker && sudo systemctl enable docker
此外,将系统用户添加到docker组:
sudo usermod -aG docker $USER
newgrp docker
同时,在完成后可以使用以下指南安装Docker Compose:
在Ubuntu 22.04/Debian 11上安装Docker Compose:https://www.hmxthome.com/linux/4942.html
为Dnsmasq创建永久卷
先完成在Ubuntu 22.04系统上安装和配置Dnsmasq,详细指南地址在https://www.hmxthome.com/linux/4918.html。
Dnsmasq读取/etc/dnsmasq中的所有.conf文件。对于本文,我们需要在系统上创建一个路径并相应地映射它。
在系统上创建目录并分配所需的权限:
sudo mkdir /etc/dnsmasq
sudo chmod -R 775 /etc/dnsmasq
此卷将用于存储所有配置文件。在基于Rhel-based的系统上,您需要将SELinux设置为许可模式,以便可以访问路径:
sudo setenforce 0
sudo sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config
在Docker容器中运行Dnsmasq
在Docker容器中运行Dnsmasq有两种方法,它们是:直接使用Docker引擎、使用Docker Compose。
在运行Dnsmasq容器之前,我们需要在/etc/dnsmasq中创建配置文件:
sudo vim /etc/dnsmasq/0.base.conf
在文件中,根据需要添加以下行替换:
#Define Port
port=53
domain-needed
bogus-priv
#dont use hosts nameservers
no-resolv
strict-order
#Use the default nameservers
server=8.8.8.8
server=8.8.4.4
expand-hosts
#serve all company queries using a specific nameserver
domain=dnsmasq.computingforgeeks.com
#explicitly define host-ip mappings
address=/apps.dnsmasq.computingforgeeks.com/192.168.205.11
address=/db.dnsmasq.computingforgeeks.com/192.168.205.12
address=/test.dnsmasq.computingforgeeks.com/192.168.205.13
在上述文件中,我的域名是dnsmasq.computingorgeeks.com和
192.168.205.11解析所有指向apps.dnsmasq.computingforgeks.com的请求,192.168.205.12解析db.dnsmasq.computingforgeeks.com,192.168.205.13解析test.dnsmasq.computingforgereks.com。
保存文件并按如下所示进行操作:
方法1:直接使用Docker引擎运行Dnsmasq
您可以使用Docker Engine直接运行Dnsmasq,命令如下:
docker run --detach --name dnsmasq \
-p 53:53/udp \
--cap-add=NET_ADMIN \
-v /etc/dnsmasq/0.base.conf:/etc/dnsmasq.conf \
strm/dnsmasq
在上述命令中:
–cap-add=NET_ADMIN:Dnsmasq需要与网络堆栈交互。
-p 53:53/udp映射DNS的udp端口。
-v /etc/dnsmasq/0.base.conf:/etc/dnsmasq.conf映射容器中的.conf文件文件夹。
容器启动后,可以使用以下命令进行验证:
$ docker ps
0e5bdc9a813d strm/dnsmasq "dnsmasq -k" 2 seconds ago Up 1 second 53/tcp, 0.0.0.0:53->53/udp, :::53->53/udp dnsmasq
方法2:使用Docker Compose运行Dnsmasq
您还可以使用Docker Compose运行Dnsmasq容器。首先,为容器创建一个YAML文件:
vim docker-compose.yml
在文件中,添加以下行:
version: '2'
services:
dns:
restart: always
image: strm/dnsmasq
container_name: dnsmasq
volumes:
- /etc/dnsmasq/0.base.conf:/etc/dnsmasq.conf
ports:
- "53:53/udp"
cap_add:
- NET_ADMIN
要启动容器,请使用以下命令:
docker-compose up -d
验证容器是否已打开:
$ docker ps
3e1d1a3a7c0d strm/dnsmasq "dnsmasq -k" 8 seconds ago Up 6 seconds 53/tcp, 0.0.0.0:53->53/udp, :::53->53/udp dnsmasq
接下来,可测试Dnsmasq功能。
现在我们需要验证配置的Dnsmasq是否响应请求。为此,我们将在localhost上使用以下命令:
dig db.dnsmasq.computingforgeeks.com
样本输出:
另一个例子:
$ dig test.dnsmasq.computingforgeeks.com A +noall +answer
test.dnsmasq.computingforgeeks.com. 0 IN A 192.168.205.13
要测试远程主机上的功能,我们需要修改网络配置以将服务器用作其DNS。
可以使用以下命令:
sudo nmcli connection modify enp6s18 ipv4.dns 192.168.205.11
sudo nmcli connection down enp6s18; sudo nmcli connection up enp6s18
记住用网络接口替换enp6s18,用Dnsmasq主机的IP地址替换192.168.205.11。
现在验证Dnsmasq是否正常工作:
将Dnsmasq配置为DHCP服务器(可选)
您还可以将Dnsmasq配置为DHCP服务器,以动态或静态地为客户端分配所需的地址。
在这种情况下,您需要修改创建的文件:
sudo vim /etc/dnsmasq/0.base.conf
在文件中,添加:
默认网关IP地址。
DNS服务器IP地址(可能是Dnsmasq或其他DNS服务器)。
网络子网掩码。
DHCP地址范围。
时间服务器。
参见以下示例:
dhcp-range=192.168.205.25,192.168.205.50,24h
dhcp-option=option:router,192.168.205.1
dhcp-option=option:ntp-server,192.168.3.11
dhcp-option=option:dns-server,192.168.3.11
dhcp-option=option:netmask,255.255.255.0
保存所做的更改并重新启动容器:
docker restart dnsmasq
管理Dnsmasq容器
您可以使用以下命令启动、停止和删除容器:
停止:
docker stop dnsmasq
开始时间:
docker start dnsmasq
删除:
docker rm dnsmasq
还可以通过创建系统服务将Dnsmasq容器配置为在系统启动时自动启动。
创建服务文件:
sudo vim /etc/systemd/system/dnsmasq_container.service
在文件中,添加以下行:
[Unit]
Description=Dnsmasq container
[Service]
Restart=always
ExecStart=/usr/bin/docker start -a dnsmasq
ExecStop=/usr/bin/docker stop -t 2 dnsmasq
[Install]
WantedBy=local.target
重新加载系统守护程序:
sudo systemctl daemon-reload
现在启动并启用服务:
sudo systemctl start dnsmasq_container
sudo systemctl enable dnsmasq_container
验证服务是否正在运行:
$ systemctl status dnsmasq_container
会返回Active: active (running)的状态。这标志着本指南关于如何在Docker容器中运行和使用Dnsmasq的完成。
相关资讯