WindowsでVPN接続の問題に対処するのは、特にL2TP/IPSecサーバーに接続しようとしている場合は、かなり面倒な作業になることがあります。通常、エラーは不可解なコードとともにポップアップ表示され、何が欠けているか、何が壊れているかが必ずしも明確ではありません。さらに厄介なのは、ネットワークポートがブロックされている、レジストリ設定が間違っている、あるいはサーバーがルーターの背後にある場合はNAT関連の問題が原因となっていることが多いことです。そこで、接続エラー、NATの障害、競合バグなど、VPNを再び使えるようにするための実際の手順を以下にまとめました。
Windows で L2TP/IPSec VPN 接続の問題を解決する方法
修正1: ファイアウォールで適切なポートが開いていることを確認する
VPN接続が確立しない場合は、まずネットワークポートを確認してください。Windowsまたはルーター/ファイアウォールが必要なトラフィックをブロックしている可能性があります。L2TP/IPSecでは、特に以下のポートを開く必要があります。
- UDP 1701 — L2TPおよびレイヤー2転送プロトコル
- UDP 500 — 暗号化キーを管理するためのIKE
- ESP(プロトコル50) —IPsec暗号化の中核
- UDP 4500 — NAT-T、サーバーがNATデバイスの背後にある場合に重要
Windows Server では、これらのポートがWindows Defender ファイアウォール(セキュリティ強化版)で許可されていることを確認する必要があります。つまり、各ポートの受信規則を作成するか、すべてのポートをカバーする事前構成済みの VPN 規則を有効にする必要があります。場合によっては、ファイアウォールの単純な設定ミスが根本的な原因であり、ポートを開放するだけで接続が修復されることがあります。
修正2: NAT (NAT-T)をサポートするようにレジストリを変更する
サーバーがルーターまたはNATデバイスの背後にある場合、WindowsはIPsecパススルーをネイティブでサポートしていません。これは、IPsec(ESP)はNATを介さずには通過できないためです。NATトラバーサル(NAT-T)を有効にするには、レジストリを調整する必要があります。これはよくある問題ですが、Windowsがデフォルトで有効になっていないのは少々奇妙です。
次のレジストリに移動します:
- HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent
または、古いバージョンの Windows (XP や Server 2003 など) を使用している場合は、次の場所にある可能性があります。
- HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IPSec
AssumeUDPEncapsulationContextOnSendRuleDWORDというパラメータを探すか作成し、その値を2に設定します。これにより、Windows はクライアントとサーバーの両方が NAT の背後にある可能性があることを認識します。
reg add "HKLM\SYSTEM\CurrentControlSet\Services\PolicyAgent" /v AssumeUDPEncapsulationContextOnSendRule /t REG_DWORD /d 2 /f
サーバーとクライアントの両方がNATで保護されている場合は、両方でこの操作を行う必要があることに注意してください。編集後、コンピューターを再起動し、VPN接続が正常にネゴシエートされるかどうかをテストしてください。Windowsの挙動が不安定なため、一部の設定ではうまくいきましたが、他の設定ではうまくいきませんでした。試してみる価値はあります。
修正3: 同時接続のために適切なレジストリ設定でL2TP/IPsecを有効にする
Windowsは、既にVPN接続が有効な場合、新しいVPN接続を拒否することがあります。これは長年存在するバグです。LAN上で別のVPNが有効な状態で2台目のデバイスから接続しようとすると、809や789などのエラーが表示されます。Windowsがなぜ複数の接続に対してこれほど執着するのかは分かりませんが、修正方法をご紹介します。
次のレジストリ キーを調整する必要があります。
- HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RasMan\Parameters
AllowL2TPWeakCrypto を1 (MD5、DES などの弱い暗号化アルゴリズムのサポートを有効にする)に設定し、 ProhibitIpSecを0 (IPsec 暗号化を許可する)に設定します。
reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rasman\Parameters" /v AllowL2TPWeakCrypto /t REG_DWORD /d 1 /f reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rasman\Parameters" /v ProhibitIpSec /t REG_DWORD /d 0 /f
Windows のデフォルト設定では、複数の同時 L2TP 接続を許可しない場合があります。この設定を変更すると Windows の許容度が上がりますが、弱い暗号が使用されている場合はセキュリティが若干低下する可能性があります。ただし、複数のデバイスから接続しようとする場合、この回避策が唯一の方法となることがよくあります。
代替アプローチ: IPsec を無効にして簡素化する
それでも問題が解決しない場合は、VPN接続でIPsecを完全に無効にするという方法もあります。これは最終手段であり、応急処置的なものです。レジストリのProhibitIpSecパラメータを1に変更すると、WindowsはIPsec暗号化なしでL2TPを使用するようになります。セキュリティへの影響は小さくなりますが、接続の厳密性が下がる場合があり、より厳密な設定では失敗するような場合でも、この方法では接続が成功する可能性があります。
追加のヒント: VPNサーバーが設定をサポートしていることを確認する
場合によっては、トラブルシューティングはWindowsマシンではなく、サーバー自体に原因があることがあります。サーバーがL2TP/IPSecを受け入れるように設定され、正しい事前共有鍵(PSK)または証明書が使用されていることを確認してください。また、サーバーがルーターの背後にある場合は、接続の切断を防ぐため、NAT-Tが有効になっていることを確認してください。
また、VPN が Windows Server 上にある場合は、ファイアウォールのルールを再度確認してください。セキュリティが強化された Windows ファイアウォールでは、これらのポートでの受信接続が許可されているはずです。
VPN 設定を確認する必要がある場合は、PowerShell を使用できます。
Get-VpnConnection
このコマンドは、現在のすべての VPN プロファイルとその構成を表示し、すべてが正しく設定されているかどうかを確認するのに役立ちます。
一部のマシンでは、これらの修正がすぐには機能しない場合があります。再起動や再設定を数回行う必要があるかもしれません。WindowsはVPNに関して少し癖があり、レジストリをいじると別の部分が壊れてしまうことがあるため、不安な場合は事前にバックアップを取ってください。しかし、いざという時には、これらの対策を講じることで、NATの背後や複数のデバイスが接続を試みている場合でも、少なくとも基本的なトンネルが再び機能するようになることがよくあります。
まとめ
- 適切なネットワークポート(UDP 1701、UDP 500、UDP 4500、ESP 50)を開きます。
- レジストリをAssumeUDPEncapsulationContextOnSendRule=2に変更して NAT をサポートする
- AllowL2TPWeakCryptoとProhibitIpSecを編集して同時接続制限を修正します。
- NAT-T、適切なPSK/証明書、ファイアウォールルールに対するサーバー側のサポートを確保する
まとめ
WindowsでのL2TP/IPSec VPNの設定は必ずしも簡単ではありません。ポート、レジストリの調整、NATのサポート、レジストリのいじり回しなど、さまざまな要素が絡み合っています。試行錯誤で解決できる場合もありますが、これらの手順でよくある落とし穴のほとんどをカバーできます。レジストリを変更した後は再起動が必要になり、ファイアウォールのルールも必ず確認してください。少し面倒ですが、接続できればその価値は十分にあります。
VPN接続が途切れたり、接続に失敗したりしてお困りの方にとって、少しでも参考になれば幸いです。お役に立てれば幸いです!