Ubuntu下systemd-resolve未对.consul域名始终使用正确DNS服务器
问题根因
你遇到的问题是两个配置错误共同导致的:
resolved.conf存在重复的[Resolve]配置段:systemd系列配置文件中,重复的同名配置段会按加载顺序合并/覆盖配置项,你第二段的Domains=example.com会干扰第一段的~consul域名路由规则优先级,同时全局DNS列表的匹配逻辑也会出现异常。- systemd-resolved默认会对所有上游DNS服务器做可用性检测:你当前的配置将127.0.0.1放在全局DNS列表的第一位,所有DNS请求都会先发给本地的Consul DNS服务,而Consul DNS只会处理
.consul后缀的域名请求,对非Consul域名(比如example.com)会直接返回REFUSED响应,systemd-resolved收到REFUSED后会判定127.0.0.1这个DNS服务器故障,自动切换到其他可用的公网DNS服务器,后续哪怕是.consul后缀的请求也不会再走127.0.0.1。
修复方案
步骤1:修正systemd-resolved配置
删除resolved.conf中重复的[Resolve]段,合并为单段全局配置,不再将Consul DNS作为全局上游,改为仅为.consul后缀域名绑定专用DNS服务器:
- 修改
/etc/systemd/resolved.conf内容如下:
[Resolve] DNS=111.152.1.1 111.152.1.5 Domains=example.com #FallbackDNS= #LLMNR=no #MulticastDNS=no #DNSSEC=no #DNSOverTLS=no #Cache=no-negative #DNSStubListener=yes #ReadEtcHosts=yes
- 新建
/etc/systemd/network/lo.network文件,为本地回环接口配置专用的Consul DNS路由:
[Match] Name=lo [Network] DNS=127.0.0.1 Domains=~consul
步骤2:重启服务验证生效
执行以下命令重启服务、清空DNS缓存:
systemctl restart systemd-networkd systemd-resolved systemd-resolve --flush-caches
配置完成后,只有.consul后缀的域名请求会被转发到127.0.0.1的DNS服务,其他域名直接走公网DNS,不会再出现Consul DNS被误判为故障的问题。
内容的提问来源于stack exchange,提问作者ThirdAlternative
相关产品推荐
相关产品推荐

