银河麒麟系统dns故障转移需配置systemd-resolved的fallbackdns与dnsstublistener并调优超时重试,同时通过networkmanager设置连接级dns优先级。

银河麒麟系统在多网卡或主DNS失效时无法自动切到备用DNS,导致内网服务中断、网页打不开,根本原因是DNS解析路径未配置故障转移策略,systemd-resolved默认不启用FallbackDNS的主动探测机制。
确认当前DNS管理服务并启用FallbackDNS探测
执行cat /etc/resolv.conf | head -1,若显示“# Managed by systemd-resolved”,说明系统由resolved控制;否则跳转至NetworkManager配置部分。
编辑主配置文件:sudo vim /etc/systemd/resolved.conf
在[Resolve]段落中取消FallbackDNS=行前的#号,并填入至少两个可靠备用DNS,例如:FallbackDNS=8.8.8.8 1.1.1.1。这一步必须做,否则systemd-resolved在主DNS超时后直接报错,不会尝试FallbackDNS。
取消DNSStubListener=行前的#号并设为DNSStubListener=yes,确保本地127.0.0.53监听器启用——这是触发fallback探测的前提条件。
【若跳过DNSStubListener=yes,FallbackDNS将完全不生效】
保存后执行:sudo systemctl daemon-reload && sudo systemctl restart systemd-resolved
强制启用DNS解析失败重试与超时控制
systemd-resolved默认单次查询超时仅5秒,且不重试,容易被短暂网络抖动误判为DNS失效。
执行sudo systemctl edit --full systemd-resolved,在[Service]段落末尾新增两行:
Environment="SYSTEMD_RESOLVE_TIMEOUT_USEC=10000000"
Environment="SYSTEMD_RESOLVE_RETRY_MAX=3"
第一行将单次查询超时延长至10秒,第二行允许最多3次重试。这两个值必须同时设置,仅改timeout不加retry仍会快速放弃。
保存退出后重启服务:sudo systemctl restart systemd-resolved
配置NetworkManager连接级DNS自动切换(图形桌面用户)
当系统使用NetworkManager管理网络(如点击右上角网络图标可编辑连接),需同步配置连接本身支持DNS故障转移,否则resolved即使启用fallback,NM仍可能覆盖resolv.conf为单DNS。
方法一:禁用DHCP自动DNS注入并绑定双DNS
免费 DNS 与邮件安全分析(IntoDNS.ai):包括 DNSSEC、SPF、DKIM、DMARC、MTA-STS、BIMI、SMTP STARTTLS、FCrDNS、黑名单、发件人要求及报告。
nmcli con mod "有线连接 1" ipv4.ignore-auto-dns yes
nmcli con mod "有线连接 1" ipv4.dns "114.114.114.114 223.5.5.5"
nmcli con mod "有线连接 1" ipv4.dns-search "local internal"
方法二:为连接设置DNS优先级权重(需NM 1.36+)
nmcli con mod "有线连接 1" ipv4.dns-priority 100
nmcli con mod "Wi-Fi连接" ipv4.dns-priority 50
数值越小优先级越高,这样当“有线连接 1”断开时,Wi-Fi连接的DNS会自动接管解析请求。
最后重启连接:nmcli con down "有线连接 1" && nmcli con up "有线连接 1"
验证DNS自动切换是否生效
第一步:模拟主DNS宕机
执行sudo iptables -I OUTPUT -d 114.114.114.114 -j DROP,阻断对首选DNS的访问
第二步:发起域名解析并观察响应路径
执行systemd-resolve --status | grep -A2 "DNS Servers",确认FallbackDNS已加载;再运行dig www.baidu.com +short,若返回IP说明已自动切至备用DNS
第三步:清除iptables规则恢复网络
sudo iptables -D OUTPUT -d 114.114.114.114 -j DROP










