You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu下systemd-resolve未对.consul域名始终使用正确DNS服务器

问题根因

你遇到的问题是两个配置错误共同导致的:

  1. resolved.conf存在重复的[Resolve]配置段:systemd系列配置文件中,重复的同名配置段会按加载顺序合并/覆盖配置项,你第二段的Domains=example.com会干扰第一段的~consul域名路由规则优先级,同时全局DNS列表的匹配逻辑也会出现异常。
  2. 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服务器:

  1. 修改/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
  1. 新建/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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 07:36:04