容器 DNS 解析仅在重新启动 dnsmasq 后才有效

容器 DNS 解析仅在重新启动 dnsmasq 后才有效

[更新] 增加软件版本

我有一台家用服务器,它为我的家庭网络运行 docker 和 DNS/DHCP。除了一件事之外,一切都运行良好:容器在重启后无法进行 DNS 解析。一旦我重新启动 dnsmasq,它就会立即开始工作。

如果我查看 journalctl,我会看到以下消息:Oct 29 23:56:15 hub.mi.casa dnsmasq[425]: Ignoring query from non-local network

思考docker 创建了一些网络接口,但 dnsmasq 在启动后无法获取这些接口,尽管 dnsmasq 文档明确说明了这一点……

在支持它的系统上,dnsmasq 会绑定通配符地址,即使它只监听某些接口。然后它会丢弃它不应该回复的请求。这样做的好处是,即使接口来来去去并更改地址,它也能正常工作。[...](来自--bind-interfaces:)

...所以我猜这个应该工作。

系统配置:

  • Debian Bullseye(11.1)
  • Docker v20.10.10(Docker repos),无特殊设置(DOCKER_OPTS 等)
  • dnsmasq v2.85(Debian 存储库)
  • systemd-resolved处于活动状态但DNSStubListener=no已设置
  • systemd-networkd处理网络(静态 IP 地址)

我不知道该怎么做,有人有什么想法吗?我做过发现RedHat 错误报告它几乎准确地描述了我所经历的事情,但它应该得到解决。

我不太想在 docker 之后启动 dnsmasq,因为系统和整个网络在没有 docker 的情况下也能正常工作,但没有 dnsmasq 就不行。

配置文件

dnsmasq配置文件

# MAIN SETTINGS

port=53
domain-needed
expand-hosts
bogus-priv
no-resolv
no-hosts

server=127.0.0.1#8053

# DHCP CONFIGURATION

dhcp-range=192.168.1.150,192.168.1.200,12h
domain=mi.casa
local=/fritz.box/

# set dhcp options ("dnsmasq --help dhcp" for list)
dhcp-option=option:router,192.168.1.1
dhcp-option=option:dns-server,192.168.1.13
dhcp-option=option:domain-search,mi.casa

# static IP address assignments using DHCP (example)
dhcp-host=aa:cc:dd:ff:ee:33,hass.mi.casa,192.168.1.20

# static ip address entries (example)
address=/hub.mi.casa/192.168.1.13

/etc/systemd/network/10-static.network

[Match]
Name=en*

[Network]
Address=192.168.1.13/24
Gateway=192.168.1.1
DNS=192.168.1.13#8053 # that's a pi-hole running on the system
Domains=mi.casa

答案1

我的天,我在这里找到了解决方案,在@mosvy 的一条仅有两行的评论中有点相关的问题. 基于此我现在甚至有两个解决方案。

目标似乎是禁用仅为本地网络提供服务的限制。似乎有两种方法。

解决方案 1

# dnsmasq.conf - add this - thanks @mosvy
except-interface=my_dummy_interface

是的,它实际上my_dummy_interface是一个不存在的名字(你也可以称它为“smurfydurfy”)。所以 dnsmasq 绑定和答案在所有接口上自动运行,但有一个接口除外...它从未出现过。

解决方案 2

# dnsmasq.conf - add this
listen-address=127.0.0.1,192.168.1.13

显然是同样的事情,它绑定在这些地址上并回答所有请求,无论来源如何。

相关内容