Internal-Dns
DHCP:使用埠(不是 53)通告 DNS 伺服器
在我的網路中,我有一個執行多個應用程序的小型 docker swarm。最近,我嘗試設置兩個新服務,提供帶有 ispcpd 的 DHCP 和未綁定到網路的 DNS。
Master of the swarm 是一個新的 QNAP NAS 控制幾個 Pi3(為了可用性,SDCards 有時會在 24/7 使用時崩潰)。DHCP 已啟動並正在執行,但無法在埠 53 上啟動 DNS,因為該埠被 QNAP 上的 dnsmasq 阻止。QNAPs Container station 中的 docker/lxc 實現與 dnsmasq 一起用於容器網路中的 dhcp/dns 服務。所以這個埠被封鎖了。我可以在不同的埠上執行它,比如說 54。但是在 DHCP 選項中,據我從文件中看到的,我只能列出 dns 伺服器,但沒有埠規範。
有沒有辦法與埠資訊一起發布 DNS 伺服器?
正如邁克爾漢普頓所提到的,我不能為 DNS 宣傳特定埠。
因為我不想更改 QNAP 的 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/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