背景
Google Home (Mini)はmDNSで名前解決を行うことが出来るはずなのに、うまくいかないと思ったときの作業。トラブルシュート手順としてメモしておきます。
WiFiアクセスポイントの設定確認
自分でも忘れてましたが、マルチキャストとかいらないだろうと、使用しない設定にしていました。mDNSはマルチキャストを使用するので、設定をやりなおす。
avahi-utilsのインストール
sudo apt-get -y install avahi-utils
avahi-browseで一覧を表示してみる
pi@raspberrypi:~ $ avahi-browse -at
+ eth0 IPv6 ReadyNAS104 _nut._tcp local
+ eth0 IPv4 ReadyNAS104 _nut._tcp local
+ eth0 IPv6 ReadyNAS Administration on ReadyNAS104 Web Site local
+ eth0 IPv4 ReadyNAS Administration on ReadyNAS104 Web Site local
+ eth0 IPv6 ReadyNAS104 (SMB) Microsoft Windows Network local
+ eth0 IPv4 ReadyNAS104 (SMB) Microsoft Windows Network local
+ eth0 IPv6 ReadyNAS104 [28:c6:XX:XX:XX:XX] Workstation local
+ eth0 IPv4 ReadyNAS104 [28:c6:XX:XX:XX:XX] Workstation local
+ eth0 IPv4 amzn.dmgr:91BXXXXXXXXXXXXXXXXXXXXXXXXXXXX8:rZDHJ+sCFo:370062 _amzn-wplay._tcp local
+ eth0 IPv4 Google-Home-Mini-543XXXXXXXXe2e5a50XXXXXXXX27d9 _googlecast._tcp local
+ eth0 IPv4 543XXXXX-120e-Xe5a-50XX-d4XXXXXX27d9 _googlezone._tcp local
+ eth0 IPv4 c0XXXXXXXXXXXf0c-0 _spotify-connect._tcp local
サービス名が_google*のものが見つかる。ということでちゃんと認識はしている。
pingしてみる
pi@raspberrypi:~ $ ping Google-Home-Mini-543XXXXXXXXe2e5a50XXXXXXXX27d9.local
ping: Google-Home-Mini-543XXXXXXXXe2e5a50XXXXXXXX27d9.local: Name or service not known
失敗する。なんで?
pi@raspberrypi:~ $ ping ReadyNAS104.local
PING ReadyNAS104.local (192.168.X.XX) 56(84) bytes of data.
64 bytes from 192.168.X.XX (192.168.X.XX): icmp_seq=1 ttl=64 time=60.7 ms
NASのほうは問題なく応答する。
avahiではなく、libnss側を疑ってみる
- libnss-mdnsの確認
pi@raspberrypi:~ $ dpkg -l | grep mdns
ii libnss-mdns:armhf 0.10-8 armhf NSS module for Multicast DNS name resolution
ちゃんと入ってる。
- nsswitch.confの確認
pi@raspberrypi:~ $ cat /etc/nsswitch.conf
:
hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4
ちゃんと、mDNSの名前解決設定が入ってる。
ちなみに、mdns4_minimalとmdns4の違いはなんだろうと思ったら、minimalはlocalドメインの名前解決しかしないらしい。minimalだけで十分かも。
avahi-resolveで名前解決試してみる
pi@raspberrypi:~ $ avahi-resolve -nv 'Google-Home-Mini-543XXXXXXXXe2e5a50XXXXXXXX27d9.local'
Server version: avahi 0.6.32; Host name: raspberrypi.local
Failed to resolve host name 'Google-Home-Mini-543XXXXXXXXe2e5a50XXXXXXXX27d9.local': Timeout reached
やっぱりだめ。
avahi-browseでサービス名指定のブラウズをしてみる
pi@raspberrypi:~ $ avahi-browse -rk _googlecast._tcp
+ eth0 IPv4 Google-Home-Mini-543XXXXXXXXe2e5a50XXXXXXXX27d9 _googlecast._tcp local
= eth0 IPv4 Google-Home-Mini-543XXXXXXXXe2e5a50XXXXXXXX27d9 _googlecast._tcp local
hostname = [543XXXXX-120e-Xe5a-50XX-d4XXXXXX27d9.local]
address = [192.168.X.XX]
port = [8009]
txt = ["rs=" "nf=1" "bs=FA8FCA8D6433" "st=0" "ca=2052" "fn=ダイニング ルーム" "ic=/setup/icon.png" "md=Google Home Mini" "ve=05" "rm=" "cd=85XXXXXXXXXXXXXXE4" "id=543XXXXXXXXe2e5a50XXXXXXXX27d9"]
やっと、IPアドレスを見ることが出来た。
上の、avahi-browse -rkの結果では、ホスト名は'Google-Home-Mini~'ではなく、'543XXXXX-120e-Xe5a-50XX-d4XXXXXX27d9.local'になる模様。それを使って、もう一度avahi-resolveしてみた
pi@raspberrypi:~ $ avahi-resolve -n 543XXXXX-120e-Xe5a-50XX-d4XXXXXX27d9.local
543XXXXX-120e-Xe5a-50XX-d4XXXXXX27d9.local 192.168.1.5
今度はちゃんと結果が返った。
pi@raspberrypi:~ $ ping 543XXXXX-120e-Xe5a-50XX-d4XXXXXX27d9.local
PING 543XXXXX-120e-Xe5a-50XX-d4XXXXXX27d9.local (192.168.1.5) 56(84) bytes of data.
64 bytes from 192.168.1.5 (192.168.1.5): icmp_seq=1 ttl=64 time=2.13 ms
pingも普通に動作する。