免責事項
当記事では同じ思いつきで時間を無駄にする人を出さないよう試みた内容を記載しましたが、十分に検証できなかったため、以下の記述には誤りが含まれている可能性が高いです。それでも参考にしたい方はどうぞ。
記事の動作は2023/5/6現在のものです。ファームウェアのアップデートなどにより動作が変更される可能性があります。
要約
Google Nest HubとローカルDNSを組み合わせてLAN内のサーバーにアクセスさせようとしたが、出来なかった。
環境
- Google Nest Hub(第2世代)
- CoreDNS 1.10.1 (Docker)
- Ubuntu 22.04 LTS(デスクトップ版, 20.04からのアップグレード)
- Docker 23.0.5
動機
Googel Nest HubにLAN内のサーバーにある情報を表示させたり、音声操作でサーバーコントロールとか色々してみたかった。しかし、Googel Nest Hubに何かさせようとするとアクションの開発とか認証とか色々と面倒そうな(上にAction自体も2023年6月13日に廃止になった)ので、お手軽な方法が欲しかった。
構想
Google Homeアプリの「ルーティン」にURLを登録すればアクセスできるかなと思ったのだが、いくつか試してみた所、https://www.example.com/
のような各サイトのトップページにはwww.example.comを開く
でアクセスできたが、https://www.example.com/sample.html
のような任意のページを指定することは出来ないようだった。また、https://www.example.com:8080/
のようなポート指定も受け付けなかった。
そこで、以下のように考えた。
- LAN内部にDNSを立ててドメイン名をLAN内サーバーのIPに解決してあげれば、ドメイン名でLAN内のサーバーにアクセスできそう。
- Googel Nest Hub自体はDHCPでLAN内IPアドレス等を取得するので、その際に内部DNSを指定することは可能なはず。
[2023/6/21追記]
後述するが、実際には処理内容が違ってwww.example.comを開く
はURLでなく検索キーワードとして解釈されているようだった。
手順
ローカルDNSの立ち上げ
CoreDNSを使用したが、長くなるので詳細は別の記事に記載した。
Googel Nest Hubへの設定反映
Googel Nest Hubの電源を抜き差しして再起動すると、DHCPサーバー側ではDHCPのリース期限がリセットされていたので、DHCPサーバーの設定が反映されていると思われた。
結果
PCから
DNSサーバー以外のPCからdig
を使って確認した所、予定通りLAN内Webサーバーのアドレスに名前解決されていた。しかし、DNSサーバーを内部のDNSに指定しているにもかかわらずnslookup
による結果はNXDOMAINと言われたり、時間が経つと名前解決できたりと安定しなかった。
Googel Nest Hubから
たとえばCoreDNSのhostsファイルに
192.168.3.3 myhome.example.com
のように設定してmyhome.example.comを開く
というルーティンを実行すると、myhome.nifty.comが表示されるといったように、検索して見つけてきたであろう外部のページが表示された。
前述のようにDNSの結果が安定しなかったので、もしかしてDNSにアクセスできていないのかと考え、
93.184.216.34 example.test
のように存在しないドメインを既存のIPに解決した場合は、想定通り表示された。[2023/6/21追記]ように思ったが、ドメイン名から検索された結果のような気もする。
推論
以上の動作から推測するに、
- Googel Nest HubのDNSサーバーをDHCPサーバー経由で変更すること自体は可能。
- ただし、名前解決されたIPがローカル用のIPアドレスだった場合はDNSサーバーの回答を無視して、ドメイン名ではなく検索語のように扱う。
といった動作をしているのではと考えた。
ちなみにmyhomeを開く
は「うまく理解できませんでした」になる。PCで"myhome"を検索するとmyhome.jpがトップに来てmyhome.nifty.comは2番手だったのだが、この辺りはどうやって選ばれているのかは不明である。
他にも試したが、どうもドメイン名なら必ず開くことが出来るというわけでもないようだ。
開くサイトがhttps接続でないと、「接続に失敗しました」と表示される模様。
DNSがLAN内のIPアドレスを返すとGoogle Nest Hub側で自動的に無効扱いされるようだ。
[2023/6/21追記]
そもそも、www.example.comを開く
はyahooのような有名なサイトでは機能するが、マイナーなサイトではうまくいかず、ドメイン名にそのままアクセスするのではなく、一旦検索してマッチしたサイトにアクセスしているのではないかという気もする。
考察
セキュリティなどの事情で、想定外の動作を起こさないように色々制限することは必要な理解できるが、URLを開くというごく基本的な動作くらいは出来て欲しかった。
音声認識は便利だが、意図しない動作になった時にそれを修正するのは難しい、あるいは不可能だったりする。
Chromeにキャストという機能があり、LAN内のGoogel Nest HubにブラウザやPCの画面を投影できる。目的によってはキャスト機能を用いる方が簡単な場合もあるように思えた。
改訂履歴(表現の修正などは除く)
- 2023/5/6: 作成開始
- 2023/5/7: DNSサーバーの話を分離
- 2023/6/21: 仕上げようとしたが、正しく仕様を把握できていると思えず棚上げ
- 2023/8/2: これ以上置いても改善する見込みがないので投稿。