DHCP: реклама DNS-сервера с портом (не 53)
В моей сети есть небольшой рой докеров, на котором запущено несколько приложений. Последнее, что я пытался настроить две новые службы, предлагающие DHCP с ispcpd и DNS с несвязанным с сетью.
Master of the swarm - это новый QNAP NAS, управляющий несколькими Pi3 (для доступности карты SDC иногда выходят из строя при круглосуточном использовании). DHCP работает и работает, но DNS не может быть запущен на порту 53, потому что этот порт заблокирован dnsmasq на QNAP. Реализация docker/lxc в Контейнерной станции QNAPs работает с dnsmasq для служб dhcp/dns в сетях контейнеров. Так что этот порт заблокирован. Я могу запустить его на другом порту, скажем, 54. Но в параметрах DHCP, насколько я вижу из документации, я могу перечислить только серверы DNS, но не спецификации портов.
Есть ли способ рекламировать DNS-сервер вместе с информацией о порте?
1 ответ
Как упомянул Майкл Хэмптон, я не могу рекламировать определенный порт для DNS.
Поскольку я не хочу менять QNAP dnsmasq-config (будет потеряно при каждом обновлении пакета), я установил службу systemd на других узлах моего роя Docker (не самого QNAP), запустив dns как локальный контейнер.
Таким образом, qnap не пытается привязать порт хоста 53, потому что контейнеры не работают в области скопления.
Немного о теме, но это скрипт, который я использовал для сервиса:
#
# 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/docker-dns@.service
# 3. Enable and start the service template with:
# `systemctl enable --now docker-dns@NAME.service`
# 4. Verify service start-up with:
# `systemctl status docker-dns@NAME.service`
# `journalctl --unit docker-dns@NAME.service`
#
# 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/docker-openvpn@foo.d/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