Avahi - Chromebook: не удалось разрешить имя хоста

802
rodrunner

У меня есть 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 

Но всякий раз, когда я пытаюсь пинговать или ssh малину с моего chromebook, она не разрешается:

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

Я что-то пропустил? На самом деле я могу подключить мой Raspberry Pi к другому клиенту (Arch Linux) в моей локальной сети, поэтому я полагаю, что проблема должна быть на стороне 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> 
4

2 ответа на вопрос

1
Paul Wratt

Avahi ищет сервисы Avahi на локальной сети, запрашивает их (в вашем примере), чтобы показать разрешение IP.

Использование IP-адреса на вашей Chromebook даст искомый результат (ping reply или ssh access).

Большинство сетей не хранят имя машины, только IP. Вы можете предоставить свой собственный поиск доменного имени (для статического IP-адреса) в /etc/hosts(Chromebook должен быть в режиме разработчика), добавив строку: raspberrypi.local 192.168.1.200

Или, автоматизировав его в сценарии, используя sedзамену строки, начинающейся с raspberrypi.local, с выводом команды avahi-resolve --name raspberrypi.local. Это будет работать для динамического распределения IP-адресов, но вам все равно нужно будет запускать сценарий хотя бы один раз при каждом включении RPi (в случае его изменения).

Причина, по которой вы не получаете результат (который вы ожидаете), заключается в том, что служба доменных имен (или DNS-сервер) не знает об именах сетевых адресов.


Следующее также будет работать:

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

`находится на тильде (~)

Спасибо за обходные пути. Обратите внимание, что служба доменных имен может быть настроена для выполнения этих поисков, и, как правило, именно так, например, настраивается Ubuntu при установке avahi, как описано в моем ответе. nealmcb 6 лет назад 0
0
nealmcb

Обычный способ поддержки Avahi *.localLookups имя, так что просто работает на ping raspberrypi.localэто через mdns4_minimalв, /etc/nsswitch.confнапример, как описано в Как настроить локальную поиск DNS в Ubuntu 16.10? - Спроси Ubuntu

Кажется, это стало возможным в Chrome OS после исправления этой ошибки: 199397 - FR: разрешение имен mDNS - хром - монорельс, но это столкнулось с проблемами в некоторых сетях, которые использовали свой собственный .localдомен не mdns, как описано в 626377 - Включите разрешение имени хоста mDNS без прерывания .local одноадресный DNS - хром - монорельс .

Похоже, что в начале 2018 года выпуск 626377 близок к выпуску, чтобы снова включить поиск в mdns.

Тем временем я предполагаю, что это можно исправить локально, если вы войдете в режим разработчика и измените раздел rootfs. И до тех пор, ответ Пола Уратта имеет несколько полезных обходных путей.

Похожие вопросы