Avahi - Chromebook:无法解析主机名

Avahi - Chromebook:无法解析主机名

我有一台 Raspberry Pi (raspbian jessie),其 ssh 和 vnc 服务已在 avahi 中注册。我可以在我的客户端 (chromebook) 中看到这两项服务

chronos@localhost ~ $ avahi-browse -arl
+  mlan0 IPv4 raspberrypi SSH                               _ssh._tcp            local
+  mlan0 IPv4 raspberrypi VNC                               _rfb._tcp            local
+  mlan0 IPv4 raspberrypi [30:b5:c2:1e:2f:df]               _workstation._tcp    local
=  mlan0 IPv4 raspberrypi SSH                               _ssh._tcp            local
   hostname = [raspberrypi.local]
   address = [192.168.1.200]
   port = [22]
   txt = []
=  mlan0 IPv4 raspberrypi [30:b5:c2:1e:2f:df]               _workstation._tcp    local
   hostname = [raspberrypi.local]
   address = [192.168.1.200]
   port = [9]
   txt = []
=  mlan0 IPv4 raspberrypi VNC                               _rfb._tcp            local
   hostname = [raspberrypi.local]
   address = [192.168.1.200]
   port = [5900]
   txt = []

看来我可以解析名称和地址:

chronos@localhost ~ $ avahi-resolve --address 192.168.1.200
192.168.1.200   raspberrypi.local
chronos@localhost ~ $ avahi-resolve --name raspberrypi.local
raspberrypi.local       192.168.1.200

但每当我尝试从我的 chromebook ping 或 ssh raspberry 时,它都无法解决:

chronos@localhost ~ $ ping raspberrypi.local
ping: unknown host raspberrypi.local
chronos@localhost ~ $ ssh [email protected]
ssh: Could not resolve hostname raspberrypi.local: Name or service not known

我是不是漏掉了什么?实际上,我可以从本地网络中的另一个客户端 (Arch Linux) ssh 我的 Raspberry Pi,所以我猜问题应该出在 Chromebook 方面。

这是我在 Raspberry Pi 中使用的服务定义 (/etc/avahi/services/ssh.service):

<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
        <name replace-wildcards="yes">%h SSH</name>
        <service>
                <type>_ssh._tcp</type>
                <port>22</port>
        </service>
</service-group>

答案1

Avahi 在局域网上寻找 Avahi 服务,并查询它们(在您的示例中)显示 IP 解析。

使用 chromebook 上的 IP 地址将获得您想要的结果(ping 回复或 ssh 访问)。

大多数网络不存储机器名称,只存储 IP。您可以/etc/hosts通过添加以下行来提供自己的域名查找(用于静态 IP 地址)(chromebook 必须处于开发者模式): raspberrypi.local 192.168.1.200

或者通过在脚本中自动执行,使用命令的sed输出替换以 开头的行。这将适用于动态 IP 分配,但您仍然需要在每次启动 RPi 时至少运行一次脚本(以防它发生变化)。raspberrypi.localavahi-resolve --name raspberrypi.local

您没有得到期望结果的原因是域名服务(或 DNS 服务器)不知道 LAN 地址名称。


以下方法同样有效:

ping `avahi-resolve --name raspberrypi.local`
ssh `avahi-resolve --name raspberrypi.local`

` 位于波浪键 (~)

答案2

*.local支持 avahi名称查找的正常方式ping raspberrypi.local是通过mdns4_minimal例如/etc/nsswitch.conf如何在 Ubuntu 16.10 中配置本地 DNS 查找? - 询问 Ubuntu

修复此错误后,Chrome OS 似乎可以实现这一点:199397 - FR:mDNS 名称解析 - chromium - Monorail,但在某些使用自己的非 mdns 域的网络上遇到了问题.local,如所述 626377 - 启用 mDNS 主机名解析而不破坏 .local 单播 DNS - chromium - Monorail

截至 2018 年初,问题 626377 似乎即将发布,以重新启用 mdns 查找。

与此同时,我猜想如果您进入开发人员模式并更改 rootfs 分区,则可以在本地修复此问题。在此之前,Paul Wratt 的回答有一些有用的解决方法。

相关内容