Mac の固定の IP がずれた理由 ― プライベート Wi-Fi アドレスで DHCP の予約が効かない
家の Mac は、ルーターの DHCP の予約で、いつも同じ IP をもらうようにしています。ところが、Mac の OS を更新したら、いつもの IP に応答しなくなりました。SSH も画面共有のアイコンも届きません。原因は、Mac の「プライベート Wi-Fi アドレス」でした。
- MAC アドレス:ネットワークの機器ごとの番号。ルーターは、これを見て IP を割り当てる
- DHCP の予約:決まった MAC アドレスの機器に、決まった IP を渡す設定
- プライベート Wi-Fi アドレス:追跡されにくくするため、Wi-Fi の MAC アドレスをランダムにする macOS・iOS の機能。「オフ」「固定」「ローテーション」がある

1. 何が起きていたか
- mac2 の Wi-Fi の設定が「ローテーション」になっていて、OS の更新の後に MAC アドレスが変わった。そのため予約が効かず、別の IP をもらっていた
- どこにいるかは、SSH の鍵の指紋(
ssh-keyscan)で探した。家のネットワークの機器を順に当たり、記録している mac2 の指紋と一致する IP を見つけた - さらに、ルーターに登録していた予約の MAC アドレス自体も、以前のランダムなアドレスだった。mac1 の予約も同じだった
ランダムな MAC アドレスは、2文字目が 2・6・A・E のどれかになります(「ローカル管理」の印)。予約の一覧にこの形のアドレスがあれば、プライベート Wi-Fi アドレスで登録してしまっている印です。
2. 直し方
- 各 Mac で、システム設定 → Wi-Fi → 家の Wi-Fi の「詳細」→「プライベート Wi-Fi アドレス」を「オフ」
- 本来の MAC アドレスを調べる(
networksetup -getmacaddress en0) - ルーターの予約を、本来の MAC アドレスに書き直す(
no dhcp scope bind …→dhcp scope bind 1 IP ethernet 本来のMAC) - 古い貸し出しを解放する(
dhcp manual release IP) - Mac の Wi-Fi をいったんオフ・オンして、つなぎ直す
有線でつないでいる Mac(mac3)は、本来の MAC アドレスで予約されていたので、変更はありませんでした。
3. つまずき:古い貸し出しを解放し忘れた
mac1 の予約を書き直したとき、古い貸し出しを解放し忘れました。そのため、mac1 が本来の MAC アドレスでつなぎ直すと、IP を1つももらえず、自分専用のアドレス(169.254.x.x)になってしまいました。ルーターを直そうにも、IPv4 では外に出られません。
- IPv6 のリンクローカル(同じネットワークの中だけで使えるアドレス)は生きていたので、ルーターに IPv6 で SSH しようとしたが、ルーターは IPv6 からの SSH を受け付けなかった
- そこで、mDNS(
dns-sd -G v6 mac3.local)で、有線の mac3 の IPv6 のリンクローカルを調べ、そこに SSH した - mac3 からルーターに入り、古い貸し出しを解放 → mac1 の Wi-Fi をつなぎ直して、いつもの IP に戻った
同じ家のネットワークに、普通につながっている機器が1台あれば、IPv6 のリンクローカル経由で助けてもらえる、というのは覚えておくと便利です。
