Windows Server
 Computer >> コンピューター >  >> システム >> Windows Server

Windows 10でVPN接続時のDNS名前解決ができない原因と対処法

VPN接続の設定で指定されたDNSサーバーやDNSサフィックスは、強制トンネリング(Force Tunneling)モード(VPN接続のプロパティで「リモートネットワークでデフォルトゲートウェイを使用する」にチェックが入っている状態)の場合、VPN接続が有効な間にWindows 10がDNSによる名前解決を行うために使用されます。このモードでは、VPN接続中はローカルネットワーク内の名前解決や、内部LAN経由でのインターネットアクセスができなくなります。

症状:IPアドレスではアクセスできるのにホスト名では解決できない

一方で、LAN上の任意のリソースにはpingを打つことができます(ゲートウェイや近くのPC、プリンターのIPアドレスなどに試してみてください)。これらのリソースにはIPアドレスでは到達できるものの、ホスト名ではアクセスできません。これは、Windows 10がローカルネットワーク内のホスト名解決を、VPN接続設定で指定されたDNSサーバー経由で行おうとしているためです。

一部の情報源では、ローカル(LAN)インターフェースでIPv6プロトコルを無効化する方法が紹介されています。強制トンネリングモードを使いたい場合、この方法が有効なことがあります。

スプリットトンネリングでもリモート側の名前解決は失敗する

VPN接続でスプリットトンネリング(Split Tunneling)(「リモートネットワークでデフォルトゲートウェイを使用する」のチェックを外した状態)を使用している場合、ローカルネットワークからインターネットへはアクセスできますが、リモートのVPNネットワーク内のDNSアドレスを解決できません(IPv6を無効化してもここでは効果がありません)。

原因はインターフェースメトリックの優先順位

重要なのは、Windowsが最も優先度の高い(インターフェースメトリックの値が小さい)ネットワークインターフェースからDNSクエリを送信するという点です。例えば、VPN接続がスプリットトンネリングモードで動作しており(LANからインターネットへアクセスしつつ、VPN経由で社内リソースにもアクセスしたいケース)、以下のPowerShellコマンドですべてのネットワークインターフェースのメトリック値を確認できます。

Get-NetIPInterface | Sort-Object Interfacemetric

上記の出力例を見ると、ローカルのEthernet接続のメトリック(25)がVPNインターフェースのメトリック(100)より小さくなっています。DNSトラフィックはメトリック値の小さい方のインターフェースを通るため、DNSリクエストはVPN接続用のDNSサーバーではなく、ローカルのDNSサーバーへ送信されます。この構成では、接続先の外部VPNネットワーク内の名前を解決することはできません。

SMHNR(Smart Multi-Homed Name Resolution)によるDNSリークの問題

さらに、Windows 8.1およびWindows 10のDNSクライアントに搭載された新機能にも触れておきます。Smart Multi-Homed Name Resolution(SMHNR)は、DNSリクエストへの応答速度を向上させるためにこれらのOSバージョンに追加されました。デフォルトでは、SMHNRはシステムが認識しているすべてのDNSサーバーに対して同時にDNSリクエストを送信し、最初に受け取った応答を採用します(LLMNRやNetBTのクエリも送信されます)。この動作は安全とは言えません。VPN接続用に指定された外部DNSサーバーが、あなたのDNSトラフィックを目にする可能性があるからです(DNSリクエストのリーク)。Windows 10では、次のGPOでSMHNRを無効化できます。

  • [コンピューターの構成] → [管理用テンプレート] → [ネットワーク] → [DNSクライアント] → スマート マルチホーム名前解決をオフにする = 「有効」

また、Windows 8.1では以下のコマンドでレジストリ経由により無効化できます。

Set-ItemProperty -Path "HKLM:\Software\Policies\Microsoft\Windows NT\DNSClient" -Name DisableSmartNameResolution -Value 1 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters" -Name DisableParallelAandAAAA -Value 1 -Type DWord

なお、Windows 10 Creators Update(1709)以降では、DNSリクエストは既知のすべてのDNSサーバーに対して並列ではなく順番に送信されるようになりました。特定のDNSサーバーの優先度を上げたい場合は、そのインターフェースのメトリック値を小さくすればよいのです。

インターフェースメトリックを変更してDNSの経路を制御する

つまり、インターフェースメトリックの値を変更することで、名前解決を優先したい接続(LANまたはVPN)経由でDNSリクエストを送信できるようになります。

原則として、インターフェースメトリックの値が小さいほど、その接続の優先度は高くなります。WindowsはIPv4インターフェースのメトリックを、回線速度や種類に応じて自動的に割り当てます。例えば、速度200Mbps超のLAN接続はメトリック10、速度50〜80MbpsのWi-Fi接続は50となります(詳細はMicrosoftのドキュメント「IPv4 ルートの自動メトリック機能について」を参照してください)。

インターフェースメトリックは、WindowsのGUI、PowerShell、またはnetshコマンドから変更可能です。

GUIで変更する場合

例えば、DNSリクエストをVPN接続経由で送りたいとします。その場合は、LAN接続のメトリック値を100(この例の場合)より大きくなるように引き上げます。

  1. [コントロールパネル] → [ネットワークとインターネット] → [ネットワーク接続] を開きます。
  2. イーサネット接続のプロパティを開き、[TCP/IPv4] のプロパティを選択します。
  3. [詳細設定] タブを開き、「自動メトリック」のチェックを外します。
  4. インターフェースメトリックを 120 に変更します。

PowerShellで変更する場合

同じことは以下のPowerShellコマンドでも実行できます(Get-NetIPInterfaceコマンドレットで取得できるLANインターフェースのインデックス番号を指定してください)。

Set-NetIPInterface -InterfaceIndex 11 -InterfaceMetric 120

netshで変更する場合

または、netshを使用します(LAN接続の名前を指定してください)。

netsh int ip set interface interface="Ethernet0" metric=120

同様に、VPN接続のプロパティでメトリック値を下げることもできます。

VPN接続自体の設定を変更する方法

さらに、VPN接続の設定を変更してスプリットトンネリングモードに切り替え、接続用のDNSサフィックスを指定することもできます。PowerShellでは以下のように実行します。

Get-VpnConnection
Set-VpnConnection -Name "VPN_work" -SplitTunneling $True
Set-VpnConnection -Name "VPN_work" -DnsSuffix yourdomainname.com

これらの方法を組み合わせることで、強制トンネリング/スプリットトンネリングどちらのシナリオでも、意図した通りのDNS名前解決を実現できます。

  1. Windows 10で検索が機能しないときの対処法|原因と解決策を徹底解説

    特定のプログラムや設定を検索しても結果が何も表示されない——そんなトラブルに直面している方は、この記事が役立ちます。今回は、Windows 10で検索機能が動作しなくなった場合の原因と、具体的な解決策を順番にご紹介します。 例えば、検索ボックスに「エクスプローラー」と入力しても候補すら表示されず、電卓やMicrosoft Wordといった基本的なアプリさえ検索できないケースがあります。 また、「何か入力すると検索中のアニメーションだけが表示され、いつまで経っても結果が出てこない」という報告も多く寄せられています。3つの点が動くローディング表示のまま30分待っても結果は出ず、時間だけが無駄にな

  2. 【Windows 10】ウェブカメラが動作しない・認識されない問題を解決する6つの方法

    最近Windows 10にアップグレードしたばかりの場合、内蔵ウェブカメラが動作しなくなるケースが少なくありません。この問題の主な原因は、ドライバーの非互換性や古さです。この問題が発生している場合、Windows 10のカメラアプリが開かなかったり、「カメラが見つからないか、起動できません。」というエラーメッセージが表示されたりすることがあります。 デバイスマネージャーを開いて「その他のデバイス」を展開すると、内蔵ウェブカメラに黄色い感嘆符が表示されているはずです。これはドライバーに問題があることを意味しています。Windows 10のアップデート直後にこの症状が出るのはよくあることですが、