web-dev-qa-db-ja.com

Avahi-Chromebook:ホスト名を解決できませんでした

Ssh&vncサービスがavahiに登録されているRaspberry Pi(raspbian jessie)を持っています。クライアント(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しようとすると、解決されません。

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)からRaspberry Piを実際にSSH接続できるので、問題は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
rodrunner

AvahiはLAN上でAvahiサービスを探し、(あなたの例では)IP解像度を表示するようにクエリします。

ChromebookでIPアドレスを使用すると、探している結果が得られます(ping応答またはsshアクセス)。

ほとんどのネットワークはマシン名を保存せず、IPのみを保存します。次の行を追加することで、/etc/hosts(Chromebookは開発者モードである必要があります)で独自のドメイン名ルックアップ(静的IPアドレス用)を提供できます:raspberrypi.local 192.168.1.200

または、スクリプトで自動化することにより、sedを使用してraspberrypi.localで始まる行を、コマンドavahi-resolve --name raspberrypi.localの出力に置き換えます。これは動的IP割り当てでは機能しますが、RPiの電源がオンになるたびに少なくとも1回はスクリプトを実行する必要があります(スクリプトが変更された場合)。

(期待どおりの)結果が得られない理由は、ドメインネームサービス(またはDNSサーバー)がLANアドレス名を認識していないためです。


以下も機能します。

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

`はチルダキーにあります(〜)

1
Paul Wratt

Avahi *.localの名前ルックアップをサポートして、ping raspberrypi.localで機能するようにする通常の方法は、mdns4_minimal/etc/nsswitch.confを使用することです。 buntu 16.10でローカルDNSルックアップを構成する方法は?-Ubuntuに問い合わせる

これはChrome OS: 199397-FR:mDNS名前解決-クロム-モノレール )で可能だったようですが、問題が発生しました 626377-.localユニキャストDNSを壊さずにmDNSホスト名解決を有効にする-クロム-モノレール で説明されているように、独自の非mdns .localドメインを使用する一部のネットワーク。

2018年の初めの時点で、問題626377は、mdnsルックアップを再度有効にするためのリリースに近づいているようです。

それまでの間、開発者モードに入ってrootfsパーティションを変更すれば、これはローカルで修正できると思います。それまでは、PaulWrattによる回答にいくつかの役立つ回避策があります。

0
nealmcb