Answers:
在本地网络接口的配置文件中,我们必须使用DHCP=
option指定要从DHCP服务器获取本地DNS服务器地址:
[Network]
DHCP=yes
或使用DNS=
option显式指定其地址:
[Network]
DNS=10.0.0.1
另外,我们需要使用选项指定(在同一部分中)本地域Domains=
Domains=domainA.example domainB.example ~example
我们指定本地域domainA.example domainB.example
以获取以下行为(来自systemd-resolved.service和systemd-resolved手册页):
对以每个接口域之一结尾的主机名的查找将专门路由到匹配的接口。
这种方式hostX.domainA.example
将由我们的本地DNS服务器专门解决。
我们指定~example
将所有以结尾的域example
都视为仅路由域,以得到以下行为(根据此提交的描述):
具有仅路由域的DNS服务器应仅用于指定的域。
这种方式hostY.on.the.internet
将由我们的全局远程DNS服务器专门解决。
注意
理想情况下,使用DHCP协议时,应从DHCP服务器获取本地域名,而不是在上述网络接口的配置文件中明确指定。见UseDomains=
选项。但是,此功能仍然存在未解决的问题-请参阅系统联网的DHCP搜索域选项问题。
我们需要将远程DNS服务器指定为我们的全局,系统范围的DNS服务器。我们可以在/etc/systemd/resolved.conf
文件中执行此操作:
[Resolve]
DNS=8.8.8.8 8.8.4.4 2001:4860:4860::8888 2001:4860:4860::8844
不要忘记重新加载配置并重新启动服务:
$ sudo systemctl daemon-reload
$ sudo systemctl restart systemd-networkd
$ sudo systemctl restart systemd-resolved
警告!
上述担保只适用于当名正在解决systemd解析 -看到的手册页NSS-决心,libnss_resolve.so.2和手册页systemd-resolved.service,systemd分辨。
也可以看看:
参考文献:
.local
被定义为在RFC 6762专用域- 多播DNS在部分多播DNS名称。谢谢,固定。
/etc/systemd/network/*.network
吗?在此处找到superuser.com/a/1365864
只是为了扩展@piotrDobrogost的出色答案,别忘了配置/etc/nsswitch.conf
以systemd-resolved
用作DNS解析源。hosts
针对您的特定用例,您的指令应如下所示:
/etc/nsswitch.conf
hosts: files resolve dns
所以,如果你限制了分辨率,仅在指定的域Domains
在指令/etc/systemd/resolved.conf
如彼得上述资料,DNS下一步应该在指定的名称解析源顺序咨询/etc/nsswitch.conf
时域不中发现的Domains
指令:
以下链接引用了指定解析的要求,/etc/nsswitch.conf
因此systemd-resolved
在名称解析过程中将被查阅:
https://github.com/systemd/systemd/issues/940
我发现SystemD文档很可怕。我不得不从多个环节(包括上面Piotr的回答;-)进行理解。
/etc/resolve.conf
/run/systemd/resolve/stub-resolv.conf
resolve
/etc/nsswitch.conf
nss-dns
/etc/nsswitch.conf``? In the specimen config above,
/ etc / hosts`的情况下控制查询DNS解析的顺序源(“ 文件 ”),将检查静态IP:名称映射,如果未找到,则将参考已解析的systemd-resolved存根。我看不到如何在不使用的情况下暂存DNS解析源/etc/nsswitch.conf
。我在这里错过了一个把戏吗?
/etc/nsswitch.conf
不需要。我是说,当使用systemd-resolved的存根DNS解析器时,足以在行中dns
列出指令hosts:
(大概在file
指令之后)。在那里不需要resolve
指令,因为它是存根解析器,它是systemd-resolved逻辑的入口点,而不是插件模块的入口点 ……nss-resolve
resolve
指令➟ NSS-决心 NSS插件模块➟ systemd分辨或通过dns
指令➟ NSS-DNS NSS插件模块➟ systemd分辨的 “存根DNS解析器➟ systemd-resolved
files
然后resolve
在啄/etc/nsswitch.conf
从你的问题的第二部分。重新阅读它,好像您只是在谈论检查本地高速缓存中的IP:名称映射,然后如果找不到,请联系转发器。我通常将files
第一个DNS解析源设置为绕过DNS,以允许我测试而不打生产主机-T
.local
此示例?当然有了avahi,这应该是为MDNS保留的,滥用它是一个很大的禁忌。对我来说,使用example.com
或.example会更清楚。