Windows で VPN 経由の DNS 解決問題をトラブルシューティングする方法

Windows で VPN DNS とルーティングの不具合に対処する方法

WindowsのVPNは、時々勝手に動作してしまうことがあります。接続はできてもDNS解決がうまくいかなかったり、トラフィックが期待通りにルーティングされなかったりすることもあります。ローカルネットワークデバイスが名前解決できていないか、インターネットアクセスに問題を感じます。Windowsには、メトリック、スプリットトンネル構成、DNSリーク設定など、ユーザーを混乱させる自動設定が多数あるため、特に混乱を招く可能性があります。このガイドでは、よくある原因とその修正方法について詳しく説明し、VPNが本来の動作をより良くするようにします。Windowsのデフォルト設定が実際に問題を引き起こしているかどうか、そしてVPNが必要なものだけを使用し、トラフィックを正しくルーティングするように(コマンドとGUIオプションを使って)微調整する方法を理解します。

WindowsでVPN DNSとルーティングを修正する方法

強制トンネル モードと分割トンネル モードの違いは何ですか?

強制トンネルモード(VPN設定で「リモートネットワークでデフォルトゲートウェイを使用する」が有効になっているモード)は非常に一般的です。VPNを通過するすべてのトラフィックには有効ですが、ローカルの名前解決がうまくいかない場合があります。基本的に、WindowsはすべてのDNSクエリをVPNのDNSサーバーに送信します。そのため、LANデバイス名を解決するように設定されていない場合や、ローカルネットワークで異なる名前解決方法が必要な場合は、問題が発生する可能性があります。スプリットトンネルモード(「リモートネットワークでデフォルトゲートウェイを使用する」が無効になっているモード)では、ローカルネットワークは通常通り動作し、特定のトラフィックのみをVPNに送信します。これは侵入性は低いですが、特にDNSクエリをVPN経由で送信する場合は、どのDNSサーバーが解決に使用されているかを把握しておく必要があります。—

インターフェースのメトリクスが重要な理由と調整方法

Windowsは、DNSクエリを最も低いメトリック(「優先度」)を持つネットワークインターフェース経由で送信します。しかし、例えばイーサネット接続のメトリックが25で、VPNのメトリックが100の場合、DNSリクエストはデフォルトでVPNではなくイーサネット経由で送信されます。VPNでDNSを利用したい場合は理想的ではありません。メトリックを変更すると、DNS over VPNを強制的に使用できます。動作を確認するには、PowerShellで次のコマンドを実行します:powershell Get-NetIPInterface | Sort-Object Interfacemetric このコマンドを実行すると、メトリック順にソートされたすべてのネットワークインターフェースが表示されます。イーサネットのメトリックが低い場合、DNSはVPN経由ではなくローカルで解決されます。メトリックを手動で変更するには、PowerShellを管理者として開き、次のコマンドを実行します:powershell Set-NetIPInterface -InterfaceIndex-InterfaceMetric 120 正しい`を見つける` を前のコマンドから削除してください。または、GUIでコントロールパネル > ネットワークと共有センター > アダプターの設定の変更 に移動し、イーサネットを右クリックしてプロパティ を選択し、インターネットプロトコルバージョン4 (TCP/IPv4) を選択し、プロパティ をクリックして詳細設定 をクリックします。自動メトリック のチェックを外し、カスタム値をVPNの値よりも高く設定してください。予期しない結果になる場合があり、必要に応じてVPNインターフェースのメトリックを*下げる*か上げなければならないことがあります。—

特定のトラフィックをルーティングしたり、VPN設定を変更したりする方法

ローカル ネットワークではなく、VPN の DNS サーバーを使用して DNS を解決したい場合は、VPN 接続プロパティを微調整するか、PowerShell を使用する必要があります: powershell Set-VpnConnection -Name “VPN_work” -SplitTunneling $True Set-VpnConnection -Name “VPN_work” -DnsSuffix “yourdomainname.com” これにより、スマート マルチホーム名前解決機能 (SMHNR) が抑制されます。この機能はデフォルトで有効になっており、DNS クエリが VPN の外部に漏洩する可能性があります。プライバシーが重要な場合には、これはあまり良いことではありません。グループ ポリシーを使用して SMHNR を無効にするには (ポリシーの変更が許可されている場合にのみ適用されます): – gpedit.msc を開きます – コンピューターの構成 > 管理用テンプレート > ネットワーク > DNS クライアント に移動します – スマート マルチホーム名前解決をオフにする を有効にします または、レジストリに直接設定します: powershell 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 —

VPN経由で特定のサブネットに静的ルートを追加する

特定のサブネットを常にVPN経由にしたい場合は、以下の手順を実行してください。powershell Add-VpnConnectionRoute -ConnectionName “VPN_work” -DestinationPrefix 172.16.15.0/24 Add-VpnConnectionRoute -ConnectionName “VPN_work” -DestinationPrefix 10.2.1.0/24 OpenVPNでも同様です。ルートとDNSサーバーをプッシュするには、以下のコマンドを実行してください。 plaintext push “route 10.2.2.0 255.255.255.0” push “dhcp-option DNS 192.168.115.11” サーバーがこれらのディレクティブをサポートしていることを確認してください。 —

DNSクエリがローカルネットワークではなくVPN経由で送信されるようにする方法

一部の設定では、Windows はデフォルトで、DNS をメトリックの低いインターフェース経由で送信します。VPN DNS を優先するには、イーサネットのメトリックを上げる(前述のように)か、VPN のネットワークインターフェースのメトリックを LAN インターフェースよりも低く設定してください。また、SMHNR 機能にも注意してください。この機能により、DNS クエリが暗号化トンネル外に漏洩する可能性があります。グループポリシーまたはレジストリでこの機能を無効にすると、特にプライバシーが懸念される場合は、漏洩を防ぐのに役立ちます。—

まとめ

  • 強制トンネルと分割トンネルの違いを理解してください。これらは DNS とルーティングに大きな影響を与えます。
  • インターフェース メトリックを確認しますGet-NetIPInterface– 通常、DNS はメトリックが最も低いインターフェースを介して送信されます。
  • GUI または PowerShell を使用してインターフェース メトリックを調整し、VPN DNS トラフィックの優先順位を決定します。
  • リークや名前解決の問題を回避するために、PowerShell で直接、または接続プロパティを介して VPN ルートと DNS 設定を管理します。
  • DNS リークや解決の問題が心配な場合は、「スマート マルチホーム名前解決」を無効にします。

まとめ

WindowsでVPNのDNSとルーティングをスムーズに動作させるのは、ちょっとした手探り作業です。特にデフォルト設定が必ずしも最適とは限らないからです。インターフェースのメトリクスを調整したり、必要に応じてSMHNRを無効にしたり、扱いにくいサブネットには静的ルートを設定したりしてみてください。試行錯誤の繰り返しですが、一度設定がうまくいけば、VPNの動作ははるかに予測可能になります。この記事が、誰かの混乱を解消するのに役立つことを願っています。