PowerShellでVPN設定を追加してみた
今回はWindowsビルトインのVPN接続をPowerShellで追加する方法をご紹介します。クライアントVPNで事前共有キーを使ったL2TP/IPsec構成の説明です。
記事後半では作ったスクリプトをGPOで各クライアントに配布するところも紹介しています!
それでは行きましょう!
スクリプトを作成する
さっそくPowerShellスクリプトを作成しましょう。
今回使うコマンドは「Add-VpnConnection」のみです。
$VpnName ="VPNの接続名"
$VpnUrl = "VPNサーバ"
$PreKey = "事前共有キー"
Add-VpnConnection -Name $VpnName `
-ServerAddress $VpnUrl `
-RememberCredential -L2tpPsk $PreKey `
-AuthenticationMethod PAP `
-EncryptionLevel Optional `
-TunnelType L2tp `
-Force
まず、VPN接続に必要な情報を集めます。接続先VPNサーバのアドレスと事前共有キーをあらかじめ発行しておきます。
Name で指定するVPN接続名は、わかりやすいものにしておきましょう。
今回はPAPを使用するので、 AuthenticationMethod を「PAP」にします。
ここで注意しないといけないのは、プロトコルに「PAP」を選んだ場合は EncryptionLevel を「NoEncryption」か「Optional」にしてください。Required とかにするとコマンドが失敗します!
※CHAPやMS-CHAPを使う場合は必要に応じて変更して下さい
TonnelType は L2TP/IPsec を使うので「L2tp」と指定します。
基本的にはこれでOK。PowerShellを実行して動作するか確認します。
GPOでクライアント実行させる
スクリプトがうまく動作したら、次は実行用のグループポリシーオブジェクトを作成します。
パソコンを起動させたら実行させたいので「スクリプト(ログオン/ログオフ)」の「ログオン」を使用します。
VPN設定はユーザーごとになるので「ユーザーの構成」を使用します。
(コンピュータの構成でスタートアップに指定したら失敗した)
「PowerShell スクリプト」タブで作ったスクリプトを指定します。忘れずに実行の順序を設定しましょう。
あとは作ったGPOを適用したいOUにリンクさせます。
クライアントで確認する
設定がうまくいっていたら、クライアントを再起動するとVPN設定が登録されているはず!登録されていなければ、まずグループポリシーがちゃんと適用されているか「グループポリシーの結果」など確認しましょう。
必要に応じて、みんな大好き「gpupdate /force」など叩いて降ってくるのを待ちます。
あとは実際にログインIDとパスワードを入力してVPN接続が開始されるか確認すれば完了です!
【おまけ】サインインまで自動にする
今回の構成だと実際の接続に必要なサインインIDとパスワードはユーザーに入力させることになります。セキュリティ上そちらのほうが良いですが、rasdial.exeを使うとそこも自動にできます。
$RasExec = "C:\windows\system32\rasdial.exe"
$VpnUser = "サインインするユーザー名"
$VpnPass = "パスワード"
#一回接続する
cmd.exe /c $RasExec $VpnName $VpnUser $VpnPass
#切断する
cmd.exe /c $RasExec /Disconnect
通常、サインインユーザーはバラバラのはずなので、全体に配布するスクリプトに組むのはあまり現実的ではありません…。個人で使う分には良いかも知れませんが、それなら通常の設定からサインイン情報を記憶させたほうが良いでしょう。
PowerShell(とGPO)を使えば、ほとんどの設定は可能
いかがだったでしょうか。Windowsを使用する上でPowerShellは非常に強力なツールです。GPOを組み合わせれば情シスの強い味方になるはず…というか、使いこなさないとWindows管理なんかやってられないかも…。
大企業向けには Intune とか SCCM(あらため Configuration Manager)とかありますが、そんな大規模じゃない企業の情シスの皆さま、ぜひ PowerShell&GPOでデバイス管理を楽にしましょう!
それではまた!
参考サイト
https://docs.microsoft.com/en-us/powershell/module/vpnclient/add-vpnconnection