Windows で PowerShell を使用して VPN 接続を効果的に管理する方法

Windows での VPN の設定や管理で問題が発生していませんか?特に、高度な設定を調整したり、VPN 接続を自動化するためのスクリプトを作成したりする必要がある場合、組み込みの GUI では対応しきれないことがあります。このガイドでは、PowerShell を使用して VPN 接続を管理する方法について説明します。新しい接続の作成から既存の設定の調整まで、さまざまな手順を説明します。少し奇妙に感じるかもしれませんが、PowerShell は高度な制御機能を備えているため、トラブルシューティングや設定のカスタマイズに便利です。このガイドを最後まで読んでいただければ、コマンドラインから直接 VPN を設定、変更、切断できるようになり、時間と労力を節約できるはずです。

PowerShell を使用して Windows で VPN 接続を管理する方法

PowerShell を使用して VPN 接続を作成する

PowerShellでVPNを作成するには、Add-VpnConnectionコマンドレットを使用します。なぜでしょうか?それは、このコマンドレットが簡単で、ほとんどの一般的なVPNタイプで機能するからです。GUIで必要な情報が得られない場合や、自動化したい場合は、このコマンドレットを使用することをお勧めします。少なくとも、サーバーアドレスと接続名が必要です。一部のマシンでは、このコマンドは最初は失敗しますが、再起動またはPowerShellのクイック再起動後に正常に動作します。それでも、メニューをクリックするよりも高速です。

たとえば、基本的な VPN を作成するには、次のように入力します。

Add-VpnConnection -Name "VPNname1" -ServerAddress "vpn.woshub.com" -PassThru

多くの場合、より詳細な制御が必要になるため、TunnelType や認証方法などのオプションを追加できます。

カスタムVPN設定の構成

ここでコマンドが本当に役立ちます。例えば、事前共有キーを使ったL2TP VPNを使用したい場合や、特定の暗号化レベルを設定したい場合を考えてみましょう。理由は?互換性とセキュリティの向上に役立つからです。デフォルトの設定が機能しない場合や、VPNプロバイダーが特定の設定を推奨している場合、これらの設定は非常に重要です。IKEv2やL2TPなどのカスタムTunnelTypeを設定する場合は、事前に証明書をインポートする必要があるでしょう。Windowsは当然ながら、必要以上に手間がかかるためです。

事前共有キーを使用して L2TP/IPsec VPN を作成する例:

Add-VpnConnection -Name "VPN_L2TP" -ServerAddress "vpn.woshub.com" -TunnelType L2TP -L2tpPsk "My1pre-SharedKey2" -Force -EncryptionLevel "Required" -AuthenticationMethod MSChapv2 -UseWinlogonCredential -RememberCredential -AllUserConnection –PassThru

このコマンドは、IPsecを使用して安全なVPNを構築します。SSTPを使用する場合は、サーバーに有効なSSL証明書があることを確認し、証明書エラーを防ぐためにルートCAを証明書ストアにインポートしてください。

既存のVPN接続の調整

最初は接続がうまくいっても、その後、スプリットトンネリング、暗号化、認証情報など、何かを調整する必要があることがあります。そのような場合は、Set-VpnConnectionコマンドが役立ちます。例えば、スプリットトンネリングを無効にしたい場合は、次のようにします。

Set-VpnConnection -Name "VPN_SSTP" -SplitTunneling $false -PassThru

これは、特に特定のネットワークや静的ルートを使用している場合に、DNS 解決の遅延やアクセスの問題の解決に役立ちます。

VPN IPsec設定の処理

カスタムIPsec構成を扱う場合、Set-VpnConnectionIpsecConfigurationコマンドは必須です。これにより、セキュリティパラメータ、ハッシュ、暗号スイート、PFSグループを細かく調整できます。典型的な使用例:高度なセキュリティが求められる企業VPNへの接続。おそらく、最初にCA証明書とデバイス証明書をインポートする必要があります。これは少し面倒ですが、セキュリティ強化のためには価値があります。例:

Set-VpnConnectionIPsecConfiguration -ConnectionName "VPN_IKEv2" -AuthenticationTransformConstants SHA256128 -CipherTransformConstants AES256 -DHGroup Group14 -EncryptionMethod AES256 -IntegrityCheckMethod SHA256 -PfsGroup PFS2048 –PassThru

VPNの資格情報を保存する

毎回ユーザー名とパスワードを入力したくない場合や、スクリプトを使いたい場合は、VPNCredentialsHelperモジュールを使って認証情報を保存できます。まずはインストールしてください。

Install-Module -Name VPNCredentialsHelper

次に、VPN 資格情報を Windows 資格情報マネージャーに安全に保存します。

$user = "vpn_username1" $plainpass = "vpn_password1" Set-VpnConnectionUsernamePassword -connectionname "VPN_SSTP" -username $user -password $plainpass

この方法では、Windows が資格情報を処理するので、毎回プロンプトが表示されることはありません。

VPN Connectに静的ルートを追加する

特定のトラフィックを常にVPN経由で送信したい場合があります。接続時に動的に追加される静的ルートを設定できます。

Add-VpnConnectionRoute -ConnectionName "VPN" -DestinationPrefix 192.168.31.0/24 –PassThru

このルートは、VPN 接続後にのみ有効になり、一般的なネットワークを混乱させることなくリモート サブネットにアクセスするのに最適です。

VPNの一覧表示、削除、接続

すべての VPN を表示するのは次の操作で簡単です:

Get-VpnConnection

切断または削除するには、次のコマンドを実行します。

Remove-VpnConnection -Name "VPN_SSTP"

または、次の方法で保存したプロファイルに接続します。

rasdial "VPN_SSTP"

接続ステータスを確認するには:

Get-VpnConnection | Select Name, ConnectionStatus
ただし、Windowsのネットワーク設定やDNS解決に関連するVPNの問題が頻繁に発生することにご注意ください。これらの問題を解決するには、特定のネットワークアダプターやファイアウォールルールの詳細を調査する必要がある場合がありますが、PowerShellを使えばVPN管理のほとんどのニーズに対応できるはずです。