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

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

乌班图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 ->

答案1

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

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

仅当以下情况时,才会在链接上启用组播 DNS:每个链接并且全局设置已打开。

如果你知道这个技巧……那就很容易了。

sudo systemd-resolve --set-mdns=yes --interface=wlan0

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

通过 systemctl 重新启动 systemd-resolved:

sudo systemctl restart systemd-resolved 

mDNS 正在运行!

(前)

~ ❯ ping homebridge.local                                    
ping: cannot resolve homebridge.local: Unknown host

(后)

~ ❯ 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

答案2

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

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

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

[Network]
MulticastDNS=yes

我尝试遵循这些指示使用 NetworkManager 来自 ArchLinux wiki。

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

我的解决方案

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

sudo nano /etc/systemd/resolved.conf

更新以下设置。

MulticastDNS=yes
LLMNR=no

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

sudo nano /etc/systemd/system/multicast-dns.service

添加以下内容。

[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

启用该multicast-dns服务。

sudo systemctl enable multicast-dns
sudo systemctl start multicast-dns
sudo systemctl status multicast-dns
sudo systemctl restart systemd-resolved

我们来测试一下。

# 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

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

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

答案3

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

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

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

答案4

我处理 mDNS (avahi) 的方式是这样的

• sudo apt install ifupdown
• sudo apt install avahi-utils

来自文本的想法

• cat /etc/network/interfaces 
• # ifupdown has been replaced by netplan(5) on this system.  See
• # /etc/netplan for current configuration.
• # To re-enable ifupdown on this system, you can run:
• # sudo apt install ifupdown

相关内容