macOSでない他のホストを.localで解決することはできるのか
Raspberry Pi を買ったもののホスト名解決の管理をどうしようか迷い、そういえばmacOSには .local
ドメイン解決の仕組みがあったのでその仕組みに乗っかれないかなと思った次第です。
普段デスクトップ1台で生活しており、かつRaspberry Piの存在は普段忘れる、ので以下の面倒ごとがある。
- DNSを立てる → 普段別のホストに入ることないし面倒
- アドレスを.ssh/configに登録する →過去のエントリが残り続けるのはなんかな
- どうせ鍵を登録するのでエントリは書く必要があるけれどIPがここに残るのはなんかな
- あとあとこのIP今も使われてるんだっけとなる
- どうせ鍵を登録するのでエントリは書く必要があるけれどIPがここに残るのはなんかな
両者とも
- アドレスを固定する必要がある
- 現在使用中のTime Cupsuleの再起動が必要でちょっと精神的面倒さのハードルが上がる
という面倒ごともある。なのでネットワークへの参加をトリガーに名前解決可能になってくれると楽なんじゃないかという気持ち。
結論をまとめると現在の Raspberry Pi OS には初めから avahi-daemon がインストールされており enable にもなっているので、セットアップでホスト名を決めた後であれば macOS からであれば .local
で名前解決ができると思われる。名前解決が行えているかの確認をCLIから行うには以下のコマンドを使う。
dscacheutil -q host -a name HOSTNAME.local
次のRaspberry Piをセットアップする時に確認したい。
まずそもそも .local ドメインの解決ってどうやっているのか調べてみる。
As Bonjour's Multicast Domain Name Service (mDNS) uses the ".local" suffix to identify Bonjour-accessible devices, are these two daemons running on your system:
Bonjour's Multicast Domain Name Service (mDNS) というもので解決されているらしい。
Multicast Domain Name Service (mDNS) って Bonjour に限らず一般的な技術なのかと気になり、こちらも調べてみる。
ローカルネットワーク内のホスト名でのアクセスはNetBIOS時代から試みてきたものの(後略)
一般的な技術っぽい雰囲気を感じる。
Wikipedia をみてみる。
The mDNS protocol is published as RFC 6762, uses IP multicast User Datagram Protocol (UDP) packets, and is implemented by the Apple Bonjour and open source Avahi software packages, included in most Linux distributions. mDNS has also been implemented in Windows 10, initially limited to discovering networked printers,[2] later becoming capable of resolving hostnames as well.
win 10 が存在する現在ではwin/mac/linuxで実装されていてRFC 6762で定義されていると言うことは恐らく相互で仕組みに乗っかれるんだろうと感じる。
で、LinuxでmDNSの仕組みに乗っかるにはAvahiを使えば良さそう。
mDNSで使っているUDP Multicastってどう言う仕組みだったか。ブロードキャストとはまた別に複数対象に限定して通信する仕組みだったと思うけれど、その対象はどうやって選んでるんだろう。
AvahiをRaspberry OSにインストールしてみる。
ついでに .ssh/config で .local
を省略できるようにしてみる。
ホスト名は pi2a
のようにハードウェアバージョンと abc… という命名にしている。
これで pi2a
と pi2a.local
の両方で ssh
できるようにしたい。
を参考にしてCanonicalize(正規化)の設定をする。今回は pi*
始まりのホストに限定した。
Host pi*
CanonicalizeHostname yes
CanonicalDomains local
CanonicalizeMaxDots 0
CanonicalizeFallbackLocal no
すると ssh のログに以下のように出て無事 .local
が付け足される。
asa-taka@tailmoon .ssh % ssh pi2a -v
OpenSSH_8.1p1, LibreSSL 2.7.3
:
debug1: Canonicalized hostname "pi2a" => "pi2a.local"
おそらく付け足す前に一度試行しているのでその分の無駄はあるが気にしないことにする。
ホスト名を変える方法がわからない@Raspberry Pi OS
hostname pi2a
だと再起動時に元に戻る。
GUIチックなインタフェースで設定する方法になっているらしい。裏はどうなっているのか気になる。
によると
/etc/hostname
を編集すればいけるらしい。では hostname
コマンドは何をしていたのか。
hostname は何をしているのか。
SET NAME
When called with one argument or with the --file option, the commands
set the host name or the NIS/YP domain name. hostname uses the sethost‐
name(2) function, while all of the three domainname, ypdomainname and
nisdomainname use setdomainname(2). Note, that this is effective only
until the next reboot. Edit /etc/hostname for permanent change.
Note, that only the super-user can change the names.
It is not possible to set the FQDN or the DNS domain name with the dns‐
domainname command (see THE FQDN below).
The host name is usually set once at system startup in /etc/init.d/host‐
name.sh (normally by reading the contents of a file which contains the
host name, e.g. /etc/hostname).
Note, that this is effective only until the next reboot. Edit /etc/hostname for permanent change.
なるほど。reboot までの設定という。
というわけでホスト名の変更はこの方法で良さそう。一般的なLinuxと多分同じ。
/etc/hostname を編集して /etc/hosts に名前解決を登録する。