DHCP:使用端口(不是 53)通告 DNS 服务器

DHCP:使用端口(不是 53)通告 DNS 服务器

在我的网络中,我有一个小型 docker swarm 运行着几个应用程序。最近我尝试设置两个新服务,使用 ispcpd 提供 DHCP,使用不绑定到网络的 DNS。

集群的主人是一台新的 QNAP NAS,它控制着几台 Pi3(为了保证可用性,SDCard 有时会在 24/7 使用过程中崩溃)。DHCP 已启动并运行,但无法在端口 53 上启动 DNS,因为此端口已被 QNAP 上的 dnsmasq 阻止。QNAPs Container station 中的 docker/lxc 实现与 dnsmasq 配合使用,为容器网络中的 dhcp/dns 服务。因此,此端口被阻止。我可以在其他端口上运行它,比如说 54。但据我从文档中看到,在 DHCP 选项中,我只能列出 dns 服务器,但没有端口规范。

有没有办法将 DNS 服务器与端口信息一起公布?

答案1

正如迈克尔·汉普顿所说,我无法为 DNS 公布特定端口

因为我不想更改 QNAPs dnsmasq-config(每次包更新时都会丢失),所以我在 docker swarm 中的其他节点(而不是 QNAP 本身)上安装了 systemd 服务,并将 dns 作为本地容器​​启动。

这样,qnap 就不会尝试绑定主机端口 53,因为容器不在 Swarm 范围内运行。

有点话题,但这是我用于该服务的脚本:

#
# Docker + unbound DNS systemd service
#
# This service aims to make the update and invocation of the docker-dns
# container seemless.  It automatically downloads the latest docker-dns
# image and instantiates a Docker container with that image.  At shutdown it
# cleans-up the old container.
#
# In the event the service dies (crashes, or is killed) systemd will attempt
# to restart the service every 10 seconds until the service is stopped with
# `systemctl stop docker-dns@NAME`.
#
# To use:
# 1. Create a Docker volume source folder named `NAME` in DATA_SRC path where NAME is the
#    user's choice to describe the use of the container.
# 2. Download this service file to /etc/systemd/system/[email protected]
# 3. Enable and start the service template with:
#    `systemctl enable --now [email protected]`
# 4. Verify service start-up with:
#    `systemctl status [email protected]`
#    `journalctl --unit [email protected]`
#
# For more information, see the systemd manual pages.
#
[Unit]
Description=unbound DNS Docker Container
Documentation=
After=network.target docker.socket
Requires=docker.socket

[Service]
RestartSec=10
Restart=always

Environment="NAME=dns-%i"
Environment="DATA_VOL=/mnt/nas/dns/%i"
Environment="IMG=192.168.0.65:6088/unbound:latest"

# To override environment variables, use local configuration directory:
# /etc/systemd/system/[email protected]/local.conf
# http://www.freedesktop.org/software/systemd/man/systemd.unit.html

# Clean-up bad state if still hanging around
ExecStartPre=-/usr/bin/docker rm -f $NAME

# Attempt to pull new image for security updates
ExecStartPre=-/usr/bin/docker pull $IMG

# Main process
ExecStart=/usr/bin/docker run --rm -v ${DATA_VOL}:/usr/local/etc/unbound.zones.d.src --name ${NAME} -p 53 -p 53/udp --net=host ${IMG} $

[Install]
WantedBy=multi-user.target

相关内容