Windows10 の名前解決
お久しぶりです、阿部です。
今回はWindows10(Ver1803)における名前解決の順番を調べてみたので備忘録として記載します。そもそも何故この課題を調べたかというと「.local」のドメインはいろいろと問題があるよ!から来ています。
また、ネットを調べていると「mDNS」周りでトラブルが発生しているようでした。「mDNS」は名前解決の方法の一つになります。Apple製品などは「Bonjour」、Linuxは「Avahi」で実現しているようです。
Windows 10 April 2018 Update(バージョン 1803)の RDP 関連の残念なバグ(続き)
そもそも、名前解決とはホスト名⇒IPアドレスに変換することを指します。前提としてWindows は HOST 名と Netbios 名を持っています。現在はあまり気にしないと思いますが、この名前解決を理解するにはこの情報を知っておく必要があります。
Windows7 の頃の名前解決は以下のようになっていました。
- DNSキャッシュ
- HOSTSファイル
- DNS
- NetBIOSキャッシュ
- Netbiosブロードキャスト
- LLMNR
ちなみに、これはレジストリに記載されています。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\ServiceProvider
パラメータ | 意味 | デフォルト値 |
---|---|---|
LocalPriority | DNSキャッシュ | 0x1f3(499) |
HostsPriority | HOSTSファイル | 0x1f4(500) |
DNSPriority | DNSサーバー | 0x7d0(2000) |
NetbtPriority | NBTによる名前解決 | 0x7d1(2001) |
値の低いものから順に使用する。そしてヒットしたらそこで終わり。しかしながら、Windows10 の名前解決で使用される LLMNR と mDNS はこのレジストリには記載がありません。こんな時はパケットキャプチャすればわかりますね!
Windows10(Ver1803)では「mDNS」をサポートしているので、果たしてどのようになるのか?
結果は以下のようになりました。
- DNSキャッシュ
- HOSTSファイル
- DNS
- NetBIOSキャッシュ
- Netbiosブロードキャスト
- mDNS
- LLMNR
このことから、Windows 間の名前解決では DNS を使用していない場合、「5」の Netbios ブロードキャストで名前解決できるので、「mDNS」は使用されないのでは。よって、mDNS はWindows、Mac、linux 、NASデバイスなどとの異機種間通信で、DNS を使用していない場合の手段として使われることがわかりますね。
.local ドメインってどうなの?
この問題の本質は何だろうかと考えました。いろんな記事が出回っていましたが、私なりに整理しました(あくまでも私見ですw)
私の記憶では、この話題がでたのは Windows Server 2008 の頃でした。いわゆる ADFS を使用して Office365 に SSO する際に Windows ドメイン情報を使う場合に問題となるでした。そもそも、AD ドメインはあくまでも Windows だけを考えており、外部との連携などは考慮していなかったのが実情です。ですので、「xxx.local」は企業内ネットワークのみで使用し、インターネットで使われないのだから、何の問題もありませんでした。しかしながら、クラウドベースのアプリケーションを企業が使用することが多くなると、そのアプリ毎にIDを発行するのはセキュリティ的にも課題となりIDフェデレーションが出てきました。その際のIDプロバイダの役割として AD を使用するという流れができてきたのを覚えています。その場合、ADのドメイン名は、正式に取得しているドメイン名+サブドメインとしたほうがいいよね~でした。
ちなみに、ADFS+Office365 では「Alternate Login」ができたことで一旦回避できました。
【ADFS+Office365】 UPNを使わないでシングルサインオン
それでは、何が問題なの?と考えてみると、マルチデバイス環境における「mDNS」の名前解決関連ではないかと・・・
例えばこんな記事がありました。
iOS で「.local」が末尾に付いたユニキャスト DNS での名前を解決できない
ただ、内容を確認すると「シングルラベル」の 「local」ドメインの場合、問題が発生するように読み取れました。そもそも、ADドメインをシングルラベルで「local」としているのはあまりありません。通常は「xxx.local」の2ラベル、もしくはそれ以上でしょう。ですので、Windows端末でホスト名のみで名前解決をする場合、ドメインのサフィックス(2ラベル)が付加されることを考慮するとこの記事の内容では「.local」は問題なしかな?
となると「.local」の課題は、mDNS が Mac、Linux、BSD を採用している NAS、プリンタ、ネットワーク機器などにも組み込まれていることではないかと。
例えばこちら
Apple 製のデバイスで社内ネットワークの ‘.local’ ドメインを開けない場合
mDNS は、ホスト名+local でマルチキャストを使って名前解決を行うので、他の端末のサフィックスに「.local」が含まれているとうまく動かないことがあるようです。要するに、ネットワーク上には Windows 端末だけではなく、マルチデバイスが存在するのでトラブルの原因となる「.local」ドメインはやめましょうということかなと思いました。