我有一个应用程序,其中有一个在 ESP32 设备上运行的 mDNS 服务器。它的主机名是esp32-mdns.local
。我可以从 Windows ping 此主机名。但是,在我的 Ubuntu 22.04 系统上无法做到这一点。
我已重新安装了 avahi 守护程序和实用程序。当我这样做时avahi-browse --all
:
avahi-browse -all
+ wlp0s20f3 IPv6 192-168-178-1 Microsoft Windows Network local
+ wlp0s20f3 IPv6 fritz-box Microsoft Windows Network local
+ wlp0s20f3 IPv4 192-168-178-1 Microsoft Windows Network local
+ wlp0s20f3 IPv4 fritz-box Microsoft Windows Network local
+ wlp0s20f3 IPv6 ESP32-WebServer1 Web Site local
+ wlp0s20f3 IPv6 ESP32-WebServer Web Site local
+ wlp0s20f3 IPv4 ESP32-WebServer1 Web Site local
+ wlp0s20f3 IPv4 ESP32-WebServer Web Site local
然后avahi-resolve --name esp32-mdns.local
:
avahi-resolve --name esp32-mdns.local
esp32-mdns.local 192.168.178.71
因此,名称已得到解析,但是当我 ping 它时:
ping esp32-mdns.local
ping: esp32-mdns.local: Name or service not known
我可以直接 ping IP 地址,但不能 ping 主机名。
这是我的/etc/avahi/avahi-daemon.conf
文件。我遗漏了什么吗?或者可能是什么问题?谢谢。
# avahi is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
# License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with avahi; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
# USA.
# See avahi-daemon.conf(5) for more information on this configuration
# file!
[server]
#host-name=foo
#domain-name=local
#browse-domains=0pointer.de, zeroconf.org
use-ipv4=yes
use-ipv6=yes
#allow-interfaces=eth0
#deny-interfaces=eth1
#check-response-ttl=no
#use-iff-running=no
#enable-dbus=yes
#disallow-other-stacks=no
#allow-point-to-point=no
#cache-entries-max=4096
#clients-max=4096
#objects-per-client-max=1024
#entries-per-entry-group-max=32
ratelimit-interval-usec=1000000
ratelimit-burst=1000
[wide-area]
enable-wide-area=yes
[publish]
#disable-publishing=no
#disable-user-service-publishing=no
您需要
libnss_mdns_minimal.so
安装库(来自“libnss-mdns”包)并进行配置,/etc/nsswitch.conf
以便系统知道与Avahi-daemon 对话以查找主机名。Ubuntu 的打包可能会自动启用它(或将启用仅 IPv4 的“mdns4”;然后您可以编辑 nsswitch.conf 以更改为双栈变体)。如果没有自动启用,请添加
添加到
hosts:
/etc/nsswitch.conf 的行中,位于files
模块之后 – 但在dns
或之前resolve
。例如:许多最近的发行版都将部分 mDNS 支持作为
resolve
systemd-resolved 模块的一部分;您可以使用它 - 尽管上次我尝试时,它坚持对 IPv6 执行 mDNS 反向查询,导致每次反向查找都需要非常长的时间(更不用说它与 avahi-daemon 的入站查询相冲突,所以最好不要将两者混合使用)。(也就是说,如果您有一个依赖于 Avahi 的 DNS-SD 服务发现 API 的程序,那么请坚持使用 Avahi。而如果您只需要 *.local 主机名查找而不需要其他任何东西,那么您可以使用 Avahi 或 systemd-resolved,但不能同时使用它们。)
对于 systemd-resolved 来说,会调用 nsswitch.conf 模块
resolve
– 同一个模块同时处理 DNS 和 mDNS – 并且它应该列在相同的位置(但在这种情况下你可以省略dns
,尽管通常将其作为紧急后备):/etc/systemd/resolved.conf
需要通过或通过单独的 systemd- networkd连接配置文件(作为MulticastDNS=
选项)或通过 NetworkManager 连接配置文件(作为选项)启用 solved 的 mDNS 支持connection.mdns
。(对于 Avahi,您不需要执行任何这些操作。)Avahi 的 mDNS 和 systemd-resolved 的常规 DNS 的组合看起来如下: