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

为何systemd-resolved未使用本地BIND9 DNS服务器?

解决Ubuntu 17.04下systemd-resolved不使用本地BIND9查询本地域名的问题

我之前碰到过一模一样的情况,核心问题其实很明确:systemd-resolved不会默认把所有查询都转发到你的BIND9服务器——它是按域名后缀(也就是你的本地域)来匹配对应的DNS服务器的。哪怕你把BIND9设成了默认DNS,没有配置本地域的路由规则,resolved还是会用默认逻辑处理查询,自然找不到本地域名的结果。

下面是一步步的排查和解决方法:

1. 给本地域配置专属DNS路由

首先得让systemd-resolved知道:你的本地域名(比如home.lan这类自定义域)必须交给BIND9处理。

  • 先运行resolvectl status,找到你正在使用的网卡(比如eth0或wlan0),查看下面的Domains字段。如果这里没列出你的本地域,那resolved根本不知道该把这类查询交给BIND9。

临时生效配置(重启后失效)

执行这条命令,把你的本地域绑定到网卡:

sudo resolvectl domain eth0 your-local-domain

替换eth0为你的实际网卡名,your-local-domain为BIND9托管的本地域名(比如home.lan)。

永久生效配置

编辑/etc/systemd/resolved.conf,找到Domains行,取消注释并添加你的本地域:

[Resolve]
#DNS=
#FallbackDNS=
Domains=your-local-domain
#LLMNR=no
#MulticastDNS=no
#DNSSEC=no
#Cache=yes
#DNSStubListener=yes

保存后重启systemd-resolved服务:

sudo systemctl restart systemd-resolved

2. 确保/etc/resolv.conf指向正确的stub resolver

Ubuntu 17.04里,systemd-resolved是通过127.0.0.53这个stub resolver处理本地查询的,如果你的/etc/resolv.conf没指向它,dig默认就不会用resolved的配置。

  • 先检查当前链接:
ls -l /etc/resolv.conf
  • 如果输出不是lrwxrwxrwx 1 root root 39 ... /etc/resolv.conf -> /run/systemd/resolve/stub-resolv.conf,就重新创建软链接:
sudo rm /etc/resolv.conf
sudo ln -s /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

3. 验证配置是否生效

现在直接用dig查询你的本地域名,不用指定BIND9服务器:

dig your-local-host.your-local-domain

如果返回正确的结果,说明配置成功。要是还是失败,就得检查BIND9本身的配置了:

  • 确认BIND9允许来自127.0.0.1和本地局域网的查询(看named.conf.options里的allow-query设置);
  • 检查本地域的zone文件,确保包含了你要查询的主机记录。

内容的提问来源于stack exchange,提问作者Civing

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:14:46