Duk*_*gal 11 ubuntu systemd mdns systemd-resolved
Ubuntu 18
我已经做了大量的研究,并且接近把这张图片拼凑起来,但不太明白:
如何为 mdns 配置 systemd-resolved?
我的目标具体是:
谁能告诉我如何专门使用 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)
小智 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)
现在重新启动并且系统解析应该可以正常工作了:-)
希望这可以减轻某人的挫败感。
为了在接口上启用 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
,则意味着它尚未启用。
归档时间: |
|
查看次数: |
16799 次 |
最近记录: |