IPv6環境でのDNS回りの構成と戦う
東日本NGN+NVR700W直収+IPv6インターネットアクセス+Windowsクライアントという環境で、DNSサーバーを指定したり、DNS検索リストを書き換えたりするために奮闘した話。
そもそも何をしたかったのか
自宅で本格的にActive Directoryの運用を推進することにしたので、DNSをドメインコントローラーに向けたい。
端的には、DNSサーバーのアドレスとしてドメインコントローラのIPを配布し、既定のDNSサフィックスとしてドメイン名を配布したい。そして我が家のLANはIPv6/IPv4デュアルスタックなので、双方の設定が必要である。
DHCPv6を捨ててRAオンリーへ
NVR700W(ファームウェアRev.15.00.25)の場合、IPv4/DHCPではこの辺は簡単に設定できるのだが、IPv6/DHCPv6では融通が利かない。
まず、NVR700Wは基本的にDHCPv6サーバーの機能が弱い。スコープを作ることもできないし、DNSサーバーには上流から来たものの再送か、自機かしか選択できない。
RAの方のサポートは最近のファームウェアアップデートでちょくちょく機能強化されているので、DHCPv6サーバは完全に停止させ、RAのDNSSLとRDNSSを使ってドメインサフィックスとドメインコントローラのIPを返すことにした。
具体的に流した設定は上でリンクしたリファレンスを読んでくれればわかる程度の簡単なものなので省く。
WindowsのDHCPv6クライアントに残ったゴミの掃除
ところが、Windowsクライアントをいくら再起動してみても、ipconfig /allにDHCPv6で配られたDNSサフィックス(flets-east.jp)やDNSサーバーとしてのNVR700WのIPv6アドレスが出てくる。
Wiresharkでいくらチェックしてもそんなもん配ってないし、iOS端末ではそんな事象は観測されていない。
これは絶対どっかに保持しているはずとGUIを片っ端からひっくり返しても見つからない。
むむむと思ってレジストリを掘ってみるとHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\Interfaces\{なんかUUID}の中にDhcpv6DomainSearchListやDhcpv6InterfaceOptionsなどというものがあり、RAとは別でDHCPv6で受け取ったものをキャッシュしていやがるのがわかる……。どうもDHCPv6で配られたものはDHCPv6で上書きしてやらないと忘れてくれないようだが、そもそもNVR700Wでは希望する値をDHCPv6で配れず、空値も配布できない。
うーんと思ったのだが、Claude先生をさんざん問い詰めた(普通に聞いても一発で正解を出してこないので……)ところ、Set-NetIPInterfaceでDHCPを無効化すれば保存されているDHCPv6ステートを捨ててくれると教えてくれた。便利な時代である。
半信半疑で該当するインターフェイスのDHCPを一旦無効化して、再度有効化してみたところ確かに消えてくれた。
具体的には、こんな感じで対象のインターフェイスを指定して(Nは適切なインデックスを入れてほしい)、DHCPオフ・オンをやった感じ。Claude先生は-AddressFamily IPv6も付けるように指導してくれたのだが横着してIPv4も巻き込んだ。
Get-NetIPInterface
Get-NetIPInterface -ifIndex N | Set-NetIPInterface -Dhcp Disabled
Get-NetIPInterface -ifIndex N | Set-NetIPInterface -Dhcp Enabled
レジストリの方も、関連するエントリが消滅していた。これでDNS設定の配布がまともにできる。
DNS周りは解決した!しかし……
長いことスタンドアロンで使ってきたマシンをドメインに参加させるには、ここから先にもまだまだ長い道のりがあるのだ……。
とはいえ、新規にセットアップするマシンや、運用期間が短くほとんど設定を入れていないマシンはこれでひとまずドメイン参加をさせられそうだ。