VPN接続した時、デフォルトルートをVPN経由にするケースが結構ある。
ただ、この場合、VPN経由にしなくてもいいIPアドレスでもVPN経由になるので、結構帯域がキツくなる場合があります。
なので、デフォルトルートはVPNにせず、必要な時だけVPN経由にする方が楽な時もある。
macOSの場合、VPNの接続設定で「すべてのトラフィックをVPN接続経由で送信」のチェックボックスをオフにした後、事前に作っておいた routeコマンドでゲートウェイをVPNに指定するスクリプトを実行してVPN経由である必要があるIPアドレス・ネットワークだけルーティングを変更していた。
同じことをWindowsでやってみたので、メモとして記録。
Windowsでの手順
- VPN接続時のデフォルトゲートウェイをVPNにしない設定に変更する
- VPNの接続名を確認する
- VPNの接続時のルーティング変更を登録する
- 登録したルーティング変更を削除する
1) VPN接続時のデフォルトゲートウェイをVPNにしない設定に変更する
コントロールパネル > ネットワークとインターネット > ネットワークと共有センター
左側の「アダプターの設定変更」
VPNのアイコン > 右クリックでプロパティ > ネットワーク タブ
「インターネットプロトコルバージョン4」を選択して「プロパティ」ボタン
「詳細設定」ボタン
「リモートネットワークでデフォルトゲイトウェイを使う」のチェックボタンをはずす
「OK」ボタンを押す
2) VPNの接続名を確認する
PowerShellで以下を実行
PS C:\Users\hohiro> Get-VpnConnection
3) VPNの接続時のルーティング変更を登録する
以下をPowerShellで実行
$vpn = “xxxxx” ## 2) で確認した設定したいVPNのNameを指定
$addrs = @(
“192.168.1.1/32”, # ホストとか
“192.168.2.0/21” # ネットワークとか
)
foreach($addr in $addrs) {
Add-VpnConnectionRoute $vpn -DestinationPrefix $addr
}
4) 登録したルーティング変更を削除する
以下をPowerShellで実行
$vpn = “xxxxx” ## 2) で確認した設定したいVPNのNameを指定
foreach( $route in (Get-VpnConnection $vpn).Routes) {
Remove-VpnConnectionRoute $vpn -DestinationPrefix $route.DestinationPrefix
}
感想
route PRINT で確認してみたが、VPN接続をすると自動的にルーティングを追加。VPN接続を切ると自動的にルーティングを削除してくれる。
自分で route を追加・削除するスクリプトを実行する macOSより便利。VPN接続、切断時にフックできるといいのになぁとは思ってたんだけど、 (Add|Remove)-VpnConnectionRoute はまさしくそういう設定のようだ。
PowerShellはオブジェクト的に扱えるシェルというイメージだったけど、確かに便利は便利だなぁ。
対応してるものが多ければ。
一応、C#とかで拡張もできるっぽい。cmdletっていうのかな。
PowerShell Cmdlet を人道的に使いたいから頑張ってみるお話
Visual Studioかぁ… いまProfessionalっていくらするんだろうと思ったら、64,131円らしい。昔より安いとは思うけど、まだまだ結構おたかいのネ。
と思ったが、自分の立ち位置だとCommunityエディションでもいいのかな。