リモートワークに必須のVPN接続。だがWindows 10のGUIでVPN接続をセットアップするのは手順が多くて非常に面倒だ。そこで「PowerShell」を使ってVPN接続の作成をプログラム化すれば、手順数も減らせて手順書も単純化できる。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
対象OS:Windows 10
スタッフ(従業員)に自宅でリモートワーク(テレワーク)をしてもらうために、「VPN」で自宅PCと社内ネットワークを接続できるようにしている、という会社(組織)は多いだろう。
それには、スタッフの自宅PCにVPN接続(VPNクライアント)をセットアップする必要がある。
ところが、Windows 10のGUIでVPN接続を作成しようとすると、その手順のステップ数が非常に多くなってしまう。スタッフ自身に作成してもらう場合、その負担はかなりのものだ。GUIだと、作成時にミスが生じる恐れもあるだろう。
システム管理者にとっては、用意しなければならないVPN接続の作成手順書が長大になるという問題もある。それを書くのも更新するのもやっかいな仕事になりがちだ。
そこで、Windows OS標準装備の「PowerShell」を使って、GUIよりずっと少ない手順で簡単にVPN接続を作成できるようにしよう。手順書も単純化でき、設定ミスによるサポートコストも減らせるはずだ。
本Tech TIPSでは、従業員(スタッフ)の自宅にあるWindows 10搭載PCに、PowerShellでVPN接続を作成する方法を紹介する。前提として、システム管理者がVPN接続の作成スクリプトファイルを用意して配布し、それを受け取ったスタッフに実行してもらう。またスクリプトの配布方法などは、どちらかといえば手軽さを優先している。厳格なセキュリティポリシーで運用しているシステム環境にはそぐわないだろう。
作成できるVPN接続はWindows 10標準のVPNプロバイダを使ったものに限り、サードパーティ製のプラグインを必要とするものは対象外としている。
掲載したPowerShellのコードについては、Windows 10標準のPowerShell Ver.5.1の他、Ver.7.1でも動作を確認している。
まずは、MS-CHAP v2など比較的単純な認証方式を利用するVPN接続を、PowerShellで作成する手順を説明する。拡張認証プロトコル(EAP)を用いるVPN接続については後述する。
PowerShellによるVPN接続の作成には、「Add-VpnConnection」コマンドレットを用いる。単純な認証方式なら、これだけでVPN接続が作成できる。
以下のリストでは、トンネルがL2TP/IPsecで認証がMS-CHAP v2のVPN接続が作成される。VPN接続の名称(変数「$vpnName」)や接続先のVPNゲートウェイ(変数「$serverAddress」)は適宜変更していただきたい。各オプションについては後述する。
$vpnName = "<VPN接続の名称>"
$serverAddress = "<接続先のVPNゲートウェイのFQDNまたはIPアドレス>"
$pskInput = (Read-Host "$serverAddress の事前共有キーを入力してください" -AsSecureString)
Add-VpnConnection -Name $vpnName `
-ServerAddress $serverAddress `
-TunnelType L2tp `
-EncryptionLevel Maximum `
-AuthenticationMethod MSChapv2 `
-RememberCredential `
-SplitTunneling `
-L2tpPsk ([System.Runtime.InteropServices.Marshal]::PtrToStringBSTR([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pskInput))) `
-Force
Get-VpnConnection -Name $vpnName
まずPowerShellを起動する。Windows 10の場合、[スタート]メニューを開いてから「powershell」と入力して検索し、見つかった「Windows PowerShell」を実行する。
次に、上記リストで必要な個所を修正してからコピーし、起動したPowerShellのウィンドウにペーストして実行する。L2TP/IPsecの事前共有キーが求められるので、入力して[Enter]キーを押すと、VPN接続が作成される。なお、同名のVPN接続が既に存在しているとエラーが生じるので、$vpnNameの値を変更するか、同名の既存VPN接続を削除しておく。
正常に実行できると、最後の「Get-VpnConnection」コマンドレットにより、作成されたVPN接続の主要な設定内容が表示される。
トンネルの方式や暗号化レベルなどの設定内容は、以下のようにコマンドレットのオプションで指定する。
オプション | 機能や指定方法 |
---|---|
-AllUserConnection | 接続元のWindows OSの全ユーザーに対して、このVPN接続を利用できるようにする |
-AuthenticationMethod <認証方式> | VPNの基本的な認証方式を選択する。「Pap」「Chap」「MSChapv2」「Eap」「MachineCertificate」のいずれかを指定 |
-DnsSuffix <DNSサフィックス> | VPN接続にひも付けるDNSサフィックスを指定 |
-EapConfigXmlStream <XML> | <XML>の内容に従って拡張認証プロトコル(EAP)を設定(詳細は後述) |
-EncryptionLevel <暗号化レベル> | VPNの暗号化レベルを選択する。「NoEncryption」(←暗号化を許可しない)「Optional」(←暗号化は省略可能)「Required」(←暗号化が必要)「Maximum」(←最強の暗号化)「Custom」のいずれかを指定 |
-IdleDisconnectSeconds <タイムアウトの秒数> | VPN接続を切断するまでの待ち時間を秒単位で指定。未指定だと「切断しない」 |
-L2tpPsk <事前共有キー> | L2TP/IPsecトンネルの事前共有キーを指定 |
-Name <接続の名称> | 作成するVPN接続の名称を指定。スペースを含む名称の場合はダブルクォートでくくる |
-RememberCredential | VPN接続時の認証に指定した資格情報(ユーザー名/パスワードなど)を保存する。次の接続時に資格情報の入力を省略できる |
-ServerAddress <サーバのFQDNまたはIPアドレス> | 接続先のVPNゲートウェイを指定する。例:「vpngw.example.jp」「203.0.113.101」 |
-SplitTunneling | VPN接続先のネットワークに含まれない宛先向けのパケットは、VPN接続を経由しないようにルーティングする |
-TunnelType <トンネル名称> | 暗号化トンネルのプロトコル種別を選択する。「Pptp」「L2tp」(←L2TP/IPsec)「Sstp」「Ikev2」「Automatic」(←自動選択)のいずれかを指定 |
-UseWinlogonCredential | VPN接続の認証に、接続元のWindows OSのサインイン名とパスワードを利用する |
-Force | 確認のプロンプトを表示せず、VPN接続の作成を強行する |
「Add-VpnConnection」コマンドレットの主要なオプション |
GUIでVPN接続のプロパティを開いた時に表示される設定項目と、上記の主要なオプションとの対応を以下に記す。
前述のAdd-VpnConnectionコマンドレットでは、ユーザー名とパスワードの指定が行えない。そのため、ユーザー名/パスワードで認証してVPNに接続する場合は、作成したVPN接続で実際に接続する際に表示されるダイアログで指定する必要がある。
Add-VpnConnectionの実行時に「-RememberCredential」オプションを指定すると、最初の接続時に入力したユーザー名とパスワードがシステムに保存される。それ以後、同じVPN接続を実行すると、ユーザー名とパスワードを改めて入力しなくても接続できる(言うまでもなく、自分以外の誰かがVPN接続を実行できないように、PCのセキュリティには一層の注意を払う必要がある)。
VPN接続時にスマートカードやユーザー証明書で認証する場合、拡張認証プロトコル「EAP」(Extensible Authentication Protocol)の設定が必須だ。また、PEAP(Protected EAP)を介したMS-CHAP v2での認証にも、EAPの設定が求められる。
もしEAPが使われているなら、前述したAdd-VpnConnectionの実行方法ではVPN接続を作成できない。
既存のVPN接続でEAPが使われているかどうかは、そのプロパティの[セキュリティ]タブにある「認証」枠で、[拡張認証プロトコル(EAP)を使う]ラジオボタンが選択されているかどうかで判断できる。
Copyright© Digital Advantage Corp. All Rights Reserved.