Windows クライアントで VPN デバイス トンネルを構成する

Always On VPN を使用すると、デバイスまたはマシン専用の VPN プロファイルを作成できます。 Always On VPN 接続には、次の 2 種類のトンネルが含まれます。

  • "デバイス トンネル" は、ユーザーがデバイスにログオンする前に、指定された VPN サーバーに接続されます。 デバイス トンネルは、ログイン前の接続シナリオとデバイス管理の目的で使用されます。

  • "ユーザー トンネル" は、ユーザーがデバイスにログオンした後にのみ接続されます。 ユーザー トンネルを使用すると、ユーザーが VPN サーバーを通じて組織のリソースにアクセスすることができます。

ユーザーがデバイスまたはコンピューターにログオンした後にのみ接続される "ユーザー トンネル" とは異なり、"デバイス トンネル" では、ユーザーがログオンする前に VPN が接続を確立できます。 "デバイス トンネル" と "ユーザー トンネル" はどちらも VPN プロファイルで独立して動作し、同時に接続できます。また、必要に応じて、異なる認証方法や他の VPN 構成設定を使用できます。 ユーザー トンネルは SSTP と IKEv2 をサポートし、デバイス トンネルは、SSTP フォールバックがサポートされていない場合にのみ IKEv2 をサポートします。

ユーザー トンネルは、ドメインに参加しているデバイス、ドメインに参加していない (ワークグループ)、または Microsoft Entra ID に参加しているデバイスでサポートされており、エンタープライズ シナリオと BYOD シナリオの両方に対応します。 これは、すべての Windows エディションで利用できます。また、UWP VPN プラグインサポートによって、プラットフォーム機能がサードパーティで使用できるようになります。

デバイス トンネルは、Windows 10 Enterprise または Education バージョン 1709 以降を実行している、ドメインに参加しているデバイスでのみ構成できます。 デバイス トンネルのサードパーティ コントロールはサポートされていません。 システムでデバイス トンネルのみを使用する場合は、名前解決ポリシー テーブル (NRPT) を構成できます。 システムでユーザー トンネルとデバイス トンネルを使用する場合は、ユーザー トンネルでのみ名前解決ポリシー テーブル (NRPT) を使用できます。

デバイス トンネルでは、強制トンネルはサポートされていません。 分割トンネルとして構成する必要があります。 |

前提条件

VPN 接続に対してコンピューター証明書認証を有効にし、受信 VPN 接続を認証するためのルート証明機関を定義する必要があります。

$VPNRootCertAuthority = "Common Name of trusted root certification authority"
$RootCACert = (Get-ChildItem -Path cert:LocalMachine\root | Where-Object {$_.Subject -Like "*$VPNRootCertAuthority*" })
Set-VpnAuthProtocol -UserAuthProtocolAccepted Certificate, EAP -RootCertificateNameToAccept $RootCACert -PassThru

デバイス トンネルの機能と要件

VPN デバイス トンネルの構成

次のサンプル プロファイル XML では、デバイス トンネル経由でクライアントによって開始されたプルのみが必要であるシナリオに適したガイダンスを提供します。 トラフィック フィルターは、デバイス トンネルを管理トラフィックのみに制限するために利用されます。 この構成は、Windows Update、一般的なグループ ポリシー (GP) と Microsoft Endpoint Configuration Manager の更新シナリオ、および、キャッシュされた資格情報を使用しない最初のログオンの VPN 接続、またはパスワード リセットのシナリオに適しています。

Windows リモート管理 (WinRM)、リモート GPUpdate、リモート Configuration Manager の更新シナリオなど、サーバーによって開始されるプッシュの場合は、トラフィック フィルターを使用できないように、デバイス トンネルで受信トラフィックを許可する必要があります。 デバイス トンネル プロファイルでトラフィック フィルターをオンにすると、デバイス トンネルは受信トラフィックを拒否します。 この制限は、今後のリリースでは削除される予定です。

VPN profileXML の例

VPN profileXML の例を次に示します。

<VPNProfile>
  <NativeProfile>
<Servers>vpn.contoso.com</Servers>
<NativeProtocolType>IKEv2</NativeProtocolType>
<Authentication>
  <MachineMethod>Certificate</MachineMethod>
</Authentication>
<RoutingPolicyType>SplitTunnel</RoutingPolicyType>
 <!-- disable the addition of a class based route for the assigned IP address on the VPN interface -->
<DisableClassBasedDefaultRoute>true</DisableClassBasedDefaultRoute>
  </NativeProfile>
  <!-- use host routes(/32) to prevent routing conflicts -->
  <Route>
<Address>10.10.0.2</Address>
<PrefixSize>32</PrefixSize>
  </Route>
  <Route>
<Address>10.10.0.3</Address>
<PrefixSize>32</PrefixSize>
  </Route>
<!-- traffic filters for the routes specified above so that only this traffic can go over the device tunnel -->
  <TrafficFilter>
<RemoteAddressRanges>10.10.0.2, 10.10.0.3</RemoteAddressRanges>
  </TrafficFilter>
<!-- need to specify always on = true -->
  <AlwaysOn>true</AlwaysOn>
<!-- new node to specify that this is a device tunnel -->
 <DeviceTunnel>true</DeviceTunnel>
<!--new node to register client IP address in DNS to enable manage out -->
<RegisterDNS>true</RegisterDNS>
</VPNProfile>

特定の展開シナリオのニーズに応じて、デバイス トンネルを使用して構成できる別の VPN 機能は、信頼されたネットワーク検出です。

 <!-- inside/outside detection -->
  <TrustedNetworkDetection>corp.contoso.com</TrustedNetworkDetection>

配置とテスト

Windows PowerShell スクリプトを使用し、Windows Management Instrumentation (WMI) ブリッジを使用して、デバイス トンネルを構成できます。 Always On VPN デバイス トンネルは、ローカル システム アカウントのコンテキストで構成する必要があります。 これを実行するには、Sysinternals スイートのユーティリティに含まれている PsTools の 1 つである PsExec を使用する必要があります。

デバイス単位 (.\Device) およびユーザー単位 (.\User) のプロファイルを展開する方法に関するガイドラインについては、「WMI ブリッジ プロバイダーでの PowerShell スクリプトの使用」を参照してください。

次の Windows PowerShell コマンドを実行して、デバイス プロファイルが正常に展開されたことを確認します。

Get-VpnConnection -AllUserConnection

出力には、デバイスに展開されているデバイス全体の VPN プロファイルの一覧が表示されます。

Windows PowerShell スクリプトの例

次の Windows PowerShell スクリプトを使用すると、プロファイル作成用の独自のスクリプトを作成できます。

Param(
[string]$xmlFilePath,
[string]$ProfileName
)

$a = Test-Path $xmlFilePath
echo $a

$ProfileXML = Get-Content $xmlFilePath

echo $XML

$ProfileNameEscaped = $ProfileName -replace ' ', '%20'

$Version = 201606090004

$ProfileXML = $ProfileXML -replace '<', '&lt;'
$ProfileXML = $ProfileXML -replace '>', '&gt;'
$ProfileXML = $ProfileXML -replace '"', '&quot;'

$nodeCSPURI = './Vendor/MSFT/VPNv2'
$namespaceName = "root\cimv2\mdm\dmmap"
$className = "MDM_VPNv2_01"

$session = New-CimSession

try
{
$newInstance = New-Object Microsoft.Management.Infrastructure.CimInstance $className, $namespaceName
$property = [Microsoft.Management.Infrastructure.CimProperty]::Create("ParentID", "$nodeCSPURI", 'String', 'Key')
$newInstance.CimInstanceProperties.Add($property)
$property = [Microsoft.Management.Infrastructure.CimProperty]::Create("InstanceID", "$ProfileNameEscaped", 'String', 'Key')
$newInstance.CimInstanceProperties.Add($property)
$property = [Microsoft.Management.Infrastructure.CimProperty]::Create("ProfileXML", "$ProfileXML", 'String', 'Property')
$newInstance.CimInstanceProperties.Add($property)

$session.CreateInstance($namespaceName, $newInstance)
$Message = "Created $ProfileName profile."
Write-Host "$Message"
}
catch [Exception]
{
$Message = "Unable to create $ProfileName profile: $_"
Write-Host "$Message"
exit
}
$Message = "Complete."
Write-Host "$Message"

その他のリソース

VPN の展開に役立つその他のリソースを次に示します。

VPN クライアントの構成リソース

VPN クライアントの構成リソースは次のとおりです。

リモート アクセス サーバー ゲートウェイのリソース

リモート アクセス サーバー (RAS) ゲートウェイのリソースを次に示します。

重要

Microsoft RAS ゲートウェイでデバイス トンネルを使用する場合は、ここで説明するように、[コンピューターによる IKEv2 の証明書認証を許可する] 認証方法を有効にすることで、IKEv2 コンピューター証明書認証をサポートするように RRAS サーバーを構成する必要があります。 この設定を有効にした後は、RootCertificateNameToAccept 省略可能なパラメーターと共に Set-VpnAuthProtocol PowerShell コマンドレットを使用して、明示的に定義された内部またはプライベート ルート証明機関にチェーンされている VPN クライアント証明書に対してのみ RRAS IKEv2 接続が許可されるようにすることを強くお勧めします。 または、ここで説明するように、RRAS サーバーの信頼されたルート証明機関ストアを修正して、公開証明機関が含まれていないことを確認する必要があります。 同様の方法は、他の VPN ゲートウェイでも考慮する必要がある場合があります。