【未経験向け】CCNA(200-301)とは? NW未経験が1ヶ月で合格した際に使用した魔法の学習教材、サイトを紹介!!!

【Windows10】VPN接続が切断された際に自動で再接続するスクリプトを作成し、VPN接続を常時接続状態にする!!

プログラミング

最近個人で運用しているAWS環境とローカルPC(Windows10)でVPN接続を確立させました。
基本接続しっぱなしにしておきたいのですが、何故か時間が立つと勝手に接続が切断されてしまう減少が発生。。
原因がよくわからずだったので、思い切ってVPN接続が切断された際に自動で再接続してくれるpowershellスクリプトを作成しました。

スポンサーリンク

概要

本記事の概要を以下に記載します。

<概要>
VPN接続を常時接続にしたいが、何故か時間が立つと接続が切断されてしまうので、切断された際に再接続を行いたい

<実現方法>
VPN接続が接続中か確認するpowershellスクリプトを作成し、切断を発見したらVPN接続を行うbatファイルを実行するような処理を記載します。
また、上記powershellスクリプトをタスクスケジューラに登録し、15分単位毎で定期実行させます。

<環境>
Windows10 (VPN接続元)

自動再接続スクリプト

上記概要の処理をPowershellとbatを使用して、実現します。
以下、スクリプト説明になります。

● VPN自動接続batファイル (Connect.bat)
指定のVPN接続を自動接続する
実行ログをログファイルに出力する

● 接続判定スクリプト(VPN_Reconnect.ps1)
指定のVPN接続か接続中か判定する
– 接続を確認 ⇒ ログ出力
– 切断を確認 ⇒ 接続判定スクリプト(VPN_Reconnect.ps1) を実行、及びログ出力

VPN自動接続batファイル

まずは、VPN自動接続batファイルを作成します。
接続にあたり、<VPN接続名> <ユーザー名> <パスワード>を指定します。
以下、batファイルになります。

@echo off

rem 現在の日付を取得
set YYYY=%date:~0,4%
set MM=%date:~5,2%
set dd=%date:~8,2%
set HH=%time:~0,2%
set m-m=%time:~3,2%
set SS=%time:~6,2%
 
rem ログファイル
set log_file=<ログファイルのパスを指定>

rem VPN自動接続 ⇒ ログ出力
rasdial.exe <VPN接続名> <ユーザー名> <パスワード> >> %log_file%

rem ログ見出し出力
Echo **************  VPN_Reconnect.ps1 %YYYY%-%MM%-%dd% %HH%:%m-m%:%SS% End  ************** >> %log_file%

接続判定スクリプト

続いて、VPNが現在接続中かを確認するpowershellスクリプトを作成します。
切断を確認したら先程作成した[ Connect.bat ]を実行します。また、実行ログは全てログファイルに出力します。
以下、powershellスクリプトになります。

#######################################################################################
#
# <スクリプト名>
# VPN接続スクリプト
#
# <概要>
# VPN接続状況を確認し、確認できない場合にVPN接続.batを実行する
#
# <更新履歴>
# 20210926 - 新規作成
#
#######################################################################################

#######################################################################################
# 事前設定
#######################################################################################

# 現在の日付(yyyyMM)を取得
$str_month = Get-Date -Format "yyyyMM"

# 現在の時刻(yyyyMMdd - hhmmss)を取得
$str_time = Get-Date -Format "yyyy-MM-dd hh:mm:ss"


#######################################################################################
# パラメータ設定
#######################################################################################

# VPN接続名
$A = ipconfig | Select-String <VPN接続名を指定>

# 実行ログの出力先パス
$output_log = "<実行ログのパス>"


#######################################################################################
## 実行前処理
#######################################################################################

# ログ見出し出力(Start)
Write-Output "************** VPN_Reconnect.ps1 $str_time Start **************" | Out-File -Append -Encoding default $output_log


#######################################################################################
# VPN接続確認 ⇒ VPN接続
#######################################################################################

if($A.length -eq "0"){
   Start-Process <batファイルパス> | Out-File -Append -Encoding default $output_log
}else{
   # 接続中メッセージ出力
   Write-Output "Connect Now" | Out-File -Append -Encoding default $output_log
   # 現在の時刻(yyyyMMddhhmmss)を取得
   $end_time = Get-Date -Format "yyyy-MM-dd hh:mm:ss"
   # ログ見出し出力(End)
   Write-Output "**************  VPN_Reconnect.ps1 $end_time End  **************" | Out-File -Append -Encoding default $output_log
}

タスクスケジューラへの登録

上記で作成したPowershellスクリプトをタスクスケジューラへ登録し、15分間毎で定期実行させます。

まずは、【タスクスケジューラ】を起動します。
管理画面右ペインにて、[ タスクの作成 ]をクリックします。

タスクの作成画面が表示されたことを確認してください。
確認後、[全般]画面にて以下項目を記入してください。

● 全般
———————————————————————————————–
・名前(M) = VPN_auto_Reconnect_ps1_bat_scipt
・以下にチェックを入れる
⇒ ユーザーがログインしているかどうかにかかわらず実行する(W)
⇒ 最上位の特権で実行する(I)
———————————————————————————————–

続いて、スクリプトの実行時間を設定します。15分間隔でスクリプトを実行するように設定したいと思います。
[トリガー]タブを選択し、[新規(N)…]をクリックします。
画面遷移後、以下項目を記入してください。

● 新しいトリガー
———————————————————————————————–
・設定 = 毎日
・開始 = <任意の時間を指定してください>
・詳細設定にて以下項目にチェックを入れる
⇒ 繰り返し間隔
・繰り返し間隔 = 15分
・継続時間 = 1日間
———————————————————————————————–

続いて、実行対象のスクリプトを設定します。
[操作]タブを選択し、[新規(N)…]をクリックします。
画面遷移後、以下項目を記入してください。

※ プログラム / スクリプト(P) にps1ファイルを登録すると、powershellではなくテキストエディタ(メモ帳)で実行されてしまうので、powershellで実行するように プログラム / スクリプト(P) で「Powershell」、引数ではスクリプトパスの前に 「-ExecutionPolicy Bypass 」という文言を追記します。

● 新しいトリガー
———————————————————————————————–
・プログラム / スクリプト(P) = Powershell
・引数の追加 = -ExecutionPolicy Bypass “<スクリプトパス>”
———————————————————————————————–

以上で設定は完了になります。
1~2時間程放置して、スクリプトが実行されていることを確認してみてください。

まとめ

これで15分毎にVPN接続状況を確認し、切断を確認した際に自動で再接続をするようになりました。

今回、 VPN接続をpowershellで行う方法がわからずbat処理を使用しました。
VPN接続をpowershellで行う方法をご存知の方がいらっしゃいましたらご連携くださると助かります。。

コメント

タイトルとURLをコピーしました