如何在本地网络上为 mdns 多播 dns 配置 systemd-resolved?

Duk*_*gal 11 ubuntu systemd mdns systemd-resolved

Ubuntu 18

我已经做了大量的研究,并且接近把这张图片拼凑起来,但不太明白:

如何为 mdns 配置 systemd-resolved?

我的目标具体是:

  • 在 10.0.0.0/16 网络上启动服务器
  • 让新服务器给自己一些任意的名字,比如 foo1
  • 能够使用名称 foo1 从同一网络上的另一台机器连接到该服务器

谁能告诉我如何专门使用 systemd-resolved 来实现这一点?

谢谢

到目前为止,我已经在下面配置了resolved.conf

ubuntu@ip-10-0-0-229:/etc$ --> CHROME -> cat /etc/systemd/resolved.conf
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.
#
# Entries in this file show the compile time defaults.
# You can change settings by editing this file.
# Defaults can be restored by simply deleting this file.
#
# See resolved.conf(5) for details

[Resolve]
#DNS=
#FallbackDNS=
#Domains=
LLMNR=yes
MulticastDNS=yes
#DNSSEC=no
#Cache=yes
#DNSStubListener=yes
ubuntu@ip-10-0-0-229:/etc$ --> CHROME ->
Run Code Online (Sandbox Code Playgroud)

小智 8

这是一个迟到的答案,但我仍然认为这可以帮助某人,因为关于这个主题的信息很少。我也在这个问题上浪费了时间。

更改 /etc/systemd/resolved.conf 只是工作的一部分。更改后,您仍然需要解决这个难题:

仅当每个链接和全局设置打开时,才会在链接上启用多播 DNS 。

如果你知道诀窍......这很容易。

sudo systemd-resolve --set-mdns=yes --interface=wlan0
Run Code Online (Sandbox Code Playgroud)

wlan0 是请求 mDNS 的接口。之后就可以看到mDNS被激活了:

$ sudo systemd-resolve --status wlan0            
Link 3 (wlan0)
      Current Scopes: none
 DefaultRoute setting: no
        LLMNR setting: yes
 MulticastDNS setting: yes #<--- BINGO! 
   DNSOverTLS setting: no
       DNSSEC setting: allow-downgrade
       DNSSEC supported: yes
Run Code Online (Sandbox Code Playgroud)

通过 systemctl 重启 systemd-resolved:

$ sudo systemctl restart systems-resolved 
Run Code Online (Sandbox Code Playgroud)

并且 mDNS 正在工作!

(前)

~ ? ping homebridge.local                                    
ping: cannot resolve homebridge.local: Unknown host
Run Code Online (Sandbox Code Playgroud)

(后)

~ ? ping homebridge.local                                    
PING homebridge.local (192.168.1.9): 56 data bytes
64 bytes from 192.168.1.9: icmp_seq=0 ttl=64 time=21.721 ms
64 bytes from 192.168.1.9: icmp_seq=1 ttl=64 time=22.429 ms
Run Code Online (Sandbox Code Playgroud)

  • 对于 Ubuntu 22.04,使用 `resolvectl mdns &lt;interface&gt; yes` 代替 `systemd-resolve`。 (4认同)
  • 通过在接口配置文件中添加“MulticastDNS=yes”也可以实现相同的效果。例如,对于 eth0,您可以将其添加到“/etc/systemd/network/eth.network”。否则,您提供的步骤在重新启动后不会持续存在 (3认同)

小智 8

我花了很多时间试图让系统解析在重新启动后持续工作,但无法让它工作,令人非常沮丧。

我按照上面的说明和评论采取的步骤:

  • 设置MulticastDNS=yes/etc/systemd/resolved.conf
  • /etc/systemd/network/eth0.network创建了包含以下内容的文件。
[Match]
Name=eth0

[Network]
MulticastDNS=yes
Run Code Online (Sandbox Code Playgroud)

我尝试使用 NetworkManager 遵循 ArchLinux wiki 中的这些说明。

什么都没起作用。所以我最终决定放弃,走systemd服务路线。

我的解决方案

更新 systemd-resolve 的多播 DNS (mDNS) 设置,以便在网络链接上启用 mDNS。

sudo nano /etc/systemd/resolved.conf
Run Code Online (Sandbox Code Playgroud)

更新以下设置。

MulticastDNS=yes
LLMNR=no
Run Code Online (Sandbox Code Playgroud)

创建一个systemd-resolved.service运行后运行的服务,以在 eth0 网络链接上启用 mDNS。这将确保多播 DNS 在重新启动后保持不变。

sudo nano /etc/systemd/system/multicast-dns.service
Run Code Online (Sandbox Code Playgroud)

添加以下内容。

[Unit]
Description=Enable MulticastDNS on eth0 network link
After=systemd-resolved.service

[Service]
ExecStart=systemd-resolve --set-mdns=yes --interface=eth0

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

启用该multicast-dns服务。

sudo systemctl enable multicast-dns
sudo systemctl start multicast-dns
sudo systemctl status multicast-dns
sudo systemctl restart systemd-resolved
Run Code Online (Sandbox Code Playgroud)

我们来测试一下。

# Protocols should show '+mDNS' instead of '-mDNS'
sudo systemd-resolve --status eth0
# The same information voor all network interface
resolvectl status
# Check if the hostname with .local added is resolved
resolvectl query `hostname`.local
Run Code Online (Sandbox Code Playgroud)

现在重新启动并且系统解析应该可以正常工作了:-)

希望这可以减轻某人的挫败感。


fil*_*den 7

为了在接口上启用 mDNS ,您需要MulticastDNS=[Network].network在 10.0.0.0/16 网络中的接口的文件

该选项默认处于禁用状态,需要针对每个接口启用。

您还可以使用该systemd-resolve --status命令(在 Ubuntu 18.04 中附带的 systemd v237 上可用,较新的 systemd 将此命令替换为resolvectl)来查询已解决的状态,包括为每个网络接口启用的选项。如果您看到10.0.0.0/16 网络所在的MulticastDNS setting: no接口Link,则意味着它尚未启用。

  • 我创建了 /etc/systemd/network/eth0.network,其中包含: [Match] Name=eth0 [Network] MuticastDNS=yes 但在使用 sudo systemctl restart systemd-networkd 重新启动网络后没有运气 (5认同)