Windowsで手動設定のIPv6アドレスを追加する
SLAACで自動構成されるアドレスを持ったまま、それとは別に、手動設定のアドレスを追加したかったときの手順メモ。先にネタバレをすると、普通にncpa.cplから該当のアダプタのプロパティを開いてIPv6のプロパティで手動設定にすればよかったっぽい。
そもそもなぜSLAAC環境で手動設定のアドレスを追加で持たせるなんてことを?
DNSサーバーとして運用するために変動しないIPv6アドレスを割り当てたかったので。一時アドレスは変動するし、NICの交換などでMACが変わるとEUI-64も変わる。そういったことを気にせずにアドレスを構成したかった。今回のケースではSLAACと二重にアドレスを持つこと自体は問題ないのでRAの受信は止めないでおく。全部手動だとルーティング設定とかも必要で面倒だし……。
え?あ、はい。お察しの通り、ただのDNSサーバーじゃなくてドメインコントローラーです。このご時世に再度おうちADをやろうとしてます、ええ、はい。
で、どうやったの?
netsh interface ipv6 set address アダプタ名 IPv6アドレス/プレフィックス長を流した。流す前後でnetsh interface ipv6 show addressesを見比べると、アドレス種類がManual、有効期間がInfiniteで指定したアドレスが追加され、SLAACで構成されるアドレスも引き続き生えていた。
手動割り当てするアドレスの検討
手動設定するアドレス自体はリンクローカルアドレスではなくユニークローカルアドレスのブロックから出しつつ、同じプリフィクスをRAでLAN内に広告している。
EUI-64には固定値の部分(中央のfffe)があるので、そこのビットパターンを変えておけば衝突は起きない。念には念をで、ローカルビットも一応0に固定しておく。
一方、一時アドレスは固定のビットを1つも持たないので、衝突が起きないことは保証されない。
とはいえ、一時アドレスはエントロピーの高い乱数になるので、手動割り当てする値との衝突確率自体が低いし、万が一重複した値が生成されたとしても、確定前にDADで重複検出を行うことになっているので、メンテナンスでの再起動などを除き常時稼働しているドメインコントローラーのアドレスを実際に使ってしまう確率は極めて低いだろう。
そもそも自宅内のLANなので、普段稼働していないものを含む全ての機器のインターフェイスを合わせても約100しかないし。
ULAの性格からすれば、そもそもインターネットに露出することのないアドレスなわけで、本当はそっちのプリフィクスでは一時アドレスを生成しないでくれるのが一番なのだが、PIOにはそんなフラグはないし、クライアント側でプリフィクス単位で一時アドレスの生成を止める手段もなさそうだ(あったとしても100インターフェイスにいちいち設定なんざしてられっかよ、ではあるが)。
実はGUI操作でもよかったらしい。
このサーバーはGUIをインストールしてある(正確にはうっかりミスでGUIを消せない状態にハマってしまった)ものだったので、設定後にncpa.cplから該当のアダプタのプロパティを見てみると、普通に手動設定になっていた。GUIで手動設定にしたらSLAACが止まるのかと思ってわざわざnetshで設定したけど、別にその必要はなかったっぽい。
そういえば以前にGUIから静的IP振ってもSLAACが止まらなくて、PowerShellでSet-NetIPInterface -RouterDiscovery Disabledしたんだった、忘れてた(その後SLAAC構成に戻すときにも打ったはずなのに……)。むしろGUIのほうがDHCPv6クライアントの挙動しか触れなくて、SLAACこそコマンドライン操作がいるんだな。
ただ、もう1台にはGUIを入れる予定がないので、まぁCLIで設定できる方法を知れたことはよかったのではなかろうか(よかった探しの天才)。