だるろぐ

明日できることは、今日しない。

PowerShall:VPN 接続をセットアップする

OS をクリーンアップするたびに GUI で VPN をセットアップするのが面倒くさくなったので、PowerShell でできないかなーと思って少し調べた。

nasunoblog.blogspot.com

必要な部分だけ、上記のサイトから拝借、うちの場合[データの暗号化]を“最強の暗号化”にしなきゃいけないので、`AuthenticationMethod` に `Maximum` を指定。

$PreKey = "***"

$VpnUrl = "***"
$VpnName = "***"

Add-VpnConnection -Name $VpnName `
                  -ServerAddress $VpnUrl `
                  -RememberCredential -L2tpPsk $PreKey `
                  -AuthenticationMethod MSChapv2 `
                  -EncryptionLevel Maximum `
                  -TunnelType L2tp `
                  -Force

これであっさり VPN を追加できたのだけど、うちの環境では `CHAP` プロトコルも有効化しないと繋がらないらしい。ここのチェックボックスね。

f:id:daruyanagi:20181103200617p:plain

GUI ではできないのかなぁ、と思い設定後に `C:\Windows\system32\ncpa.cpl` を開いて手動でチェックを入れるスクリプトにしてみたりもしたけど、どうにもかっこ悪いので Twitter で聞いてみたら、幸い返事がいただけた。

ぉ、`AuthenticationMethod` って複数設定できるのか! ってことでちょい修正。

$PreKey = "***"

$VpnUrl = "***"
$VpnName = "テスト"

Add-VpnConnection -Name $VpnName `
                  -ServerAddress $VpnUrl `
                  -RememberCredential -L2tpPsk $PreKey `
                  -AuthenticationMethod Chap,MSChapv2 ` # ここ
                  -EncryptionLevel Maximum `
                  -TunnelType L2tp `
                  -Force

確かめてみたところ、意図したとおりにチェックボックスがオンになっていた。やったねー!

ちなみに ID とパスワードを設定するコマンドレットはないとのこと。

$RasExec = "C:\windows\system32\rasdial.exe"
$VpnUser  = "***"
$VpnPass = "***"

#Add User & Pass
cmd.exe /c $RasExec $VpnName $VpnUser $VpnPass

上記サイトでは rasdial.exe を使った解決策が示されていたけど、うちは定期的なパスワード変更が義務付けられている & 1Password で資格情報を生成・管理しているので、バッチファイルにパスワードを書くのはやめた。

f:id:daruyanagi:20181103201605p:plain

この認証ダイアログで[資格情報を記憶する]とかいうチェックボックスがあれば便利なんだがな―って思ってたけど、1度繋ぐと保存されるのかな? 2回目は聞かれなかった気がする。

とりあえずテストは完了したので、これを初期化スクリプトに追記して今日のお仕事は終わり。また便利になってしまった。

追伸