systemd-resolved 作为 mDNS 响应者

systemd-resolved 作为 mDNS 响应者

我正在创建一个需要 DNS 响应程序的自定义发行版。我已经在使用 systemd,所以我想使用 systemd-resolved 来管理 mDNS(该设备应该声明自己能够提供多种服务);我不确定这是否可能,但是systemd 解析的文档页面报告

systemd-resolved 是一项为本地应用程序提供网络名称解析的系统服务。它实现了 [...] 组播 DNS 解析器和响应器。

MulticastDNS=yes我已经在配置文件中以及[Network]我希望启用 mDNS 的接口部分下添加了 set (我可以使用 进行验证systemd-resolve --status eth0)。

但是,我无法理解如何配置要宣布的可用服务,因为它是通过 avahi 将它们添加到/etc/avahi/services.

systemd-resolved 还有其他配置文件吗?难道这根本不可能吗?

答案1

应在以下位置启用使用 mDNS 的功能/etc/systemd/resolved.conf文件,在[Resolve]部分中,通过设置MulticastDNS=yes.此外,应该通过设置在[Network]每个接口配置文件( 的 )部分中启用它。systemd-networkMulticastDNS=yes

MulticastDNS可以通过以下方式验证设置的状态:

~# systemd-resolve --status
Global
           Protocols: +LLMNR +mDNS -DNSOverTLS DNSSEC=no/unsupported
    resolv.conf mode: uplink
Fallback DNS Servers: 1.1.1.1#cloudflare-dns.com 8.8.8.8#dns.google 1.0.0.1#cloudflare-dns.com 8.8.4.4#dns.google 2606:4700:4700::1111#cloudflare-dns.com 2001:4860:4860::8888#dns.google 2606:4700:4700::1001#cloudflare-dns.com
                      2001:4860:4860::8844#dns.google

Link 2 (eth0)
Current Scopes: LLMNR/IPv4 LLMNR/IPv6 mDNS/IPv4 mDNS/IPv6
     Protocols: -DefaultRoute +LLMNR +mDNS -DNSOverTLS DNSSEC=no/unsupported

Link 3 (enp1s0)
Current Scopes: none
     Protocols: -DefaultRoute +LLMNR +mDNS -DNSOverTLS DNSSEC=no/unsupported

对于每个接口,+mDNS表示在该接口中启用了组播 DNS。Global指的是systemd-resolved全局配置。

可以通过创建以下格式的 /service/.dnssd 文件来配置服务:

[Service]
Name=%H
Type=_http._tcp
Port=80
TxtText=path=/stats/index.html t=temperature_sensor

https://www.freedesktop.org/software/systemd/man/systemd.dnssd.html了解更多信息。

配置文件可以保存在:

  • /etc/systemd/dnssd
  • /运行/systemd/dnssd
  • /usr/lib/systemd/dnssd

相关内容