我正在创建一个需要 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-network
MulticastDNS=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