専用ツールに頼らずにNASを探す

NASがどんなIPアドレスを取得したのかは、液晶表示のついているものを買わない限りわからない。設定用のWebインターフェイスにアクセスするためには、IPアドレスを知る必要がある。

 各社そのためのツールを用意していたりするのだけど、アプリのインストールを強要されたり、独自の専用プロトコルになっていたりでどうにもよろしくない。

 たいていのNASは、macOSサポートとかのためにmDNSをサポートしているので、mDNSを使ってサービスを探せばよい。macOSでは、dns-sdコマンドでサービス探索をすることができる。

 mDNSは、IETFのZeroconfを起源として発展させたAppleのBonjour(リリース当初はRendezvousと言われた)で使われたローカルネット上のサービス発見プロトコル。詳細仕様が公開されたことから、IETFでZero Configuration Networkingの一部として標準化されている。

 IPv4ネットワークで、マルチキャストで「おーい!」と叫ぶと「いるよ!」と返事が返ってくる感じのサービスだ。プロトコルやサービスごとにアナウンスしているので、「ピザはどこ?」というと「うちがピザ屋だ!」と返事が来る。このブロードキャストには、UDPで5353が使われる。マルチキャストで名前引きをするので、マルチキャストDNS(mDNS)と呼ばれる。

 サービスのアナウンスとともに、ローカルでの名前解決も提供しているので、サービスから返事があると、そのIPアドレスとホスト名は端末内でキャッシュされて、DNSと同様の名前解決を提供する。ローカルでの名前解決は、通常のDNSでの名前解決と区別するために、".local"が使われる。.localは通常は省略することができる。

 もちろん、サービスアナウンスする側でブロードキャストに応答する仕組みも必要になる。そこで登録されたサービスしかアナウンスされない。単独でSambaだけ動かしていてもアナウンスが出るわけではない。アナウンス自体は、サービス起動時に登録し、終了時にリストから削除するだけで、自動で行ってくれる。

 LinuxでのmDNSは、Avahiでサポートしている。また、mDNSは、Win10でも標準でサポートされている。

 コマンドでmDNS問い合わせを行うには、macOSでは、dns-sdコマンドを使う。Linuxでは、avahi-browseコマンドを使う。Win10ではコマンドで問い合わせるツールは標準で持っていないようだ。

 NASはSMBをサービスしているので、smbでアナウンスしているデバイスを探す。

$ dns-sd -B _smb._tcp

 Browsing for _smb._tcp

 DATE: ---Tue 31 Mar 2020---

 11:40:16.594 ...STARTING...

 Timestamp A/R Flags if Domain Service Type Instance Name

 11:40:16.595 Add 3 14 local. _smb._tcp. landisk-ff0a65(smb)

 11:40:16.597 Add 2 8 local. _smb._tcp. landisk-ff0a65(smb)

 AFPをサポートしているNASでは、AFPでアナウンスしているデバイスを探すこともできる。

$ dns-sd -B _afpovertcp._tcp

 Browsing for _afpovertcp._tcp

 DATE: ---Tue 31 Mar 2020---

 11:49:19.393 ...STARTING...

 Timestamp A/R Flags if Domain Service Type Instance Name

 11:49:19.394 Add 3 14 local. _afpovertcp._tcp. landisk-ff0a65

 11:49:19.394 Add 2 8 local. _afpovertcp._tcp. landisk-ff0a65

 あとは、mDNSでの名前引きに対応しているブラウザで"landisk-ff0a65.local"にアクセスしたら、設定画面が表示される。

 サービスのアナウンスと探索には、公開されたプロトコルが存在するので、各メーカーにはオリジナルの妙なプロトコルで実装するのはやめて、基本機能はmDNSで実装してほしいものだ。


オリジナル投稿:
専用ツールに頼らずにNASを探す|kinneko|pixivFANBOX
https://kinneko.fanbox.cc/posts/929377