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