VPN経由での接続先を限定したい(Windows route add)
create: 4/24/2020
Windows VPN

在宅ワークするとき、プロジェクトによっては VPN に接続する必要があります。
オフィスのルータが VPN サーバとして動くのですが、すべてのトラフィックを VPN 経由にしてしまうと見られないサイトはあるし、ダウンロード速度がガクッと下がったりします。
また原因は不明ですが、VPN 接続するようになってからちょいちょいルータごとダウンするので、できることなら使いたくない。

ルータの負荷を軽くする、という意味でも必要なトラフィックのみ VPN 経由となるように設定したいと思います。
手順はそれなりにめんどうですが、効果は抜群だ!

アダプターオプションの変更

VPN のネットワーク経路を変更します。
アダプターオプションの変更となるので、設定からもう少し深い階層にアクセスします。
設定の「ネットワークとインターネット」から、「状態」を表示します。

「アダプターオプションを変更する」をクリックします。
するとアダプター一覧が表示されるので、VPN 接続を選択し、右クリックから「プロパティ」を開きます。

IPv4 のプロパティを開く

「ネットワーク」タブから「インターネットプロトコルバージョン 4 (TCP/IPv4)」を選択し、「プロパティ」を開きます。

詳細設定を開く

「詳細設定」を開きます。

ゲートウェイのチェックを変更する

「リモートネットワークでデフォルトゲートウェイを使う」のチェックを外します。
「クラスベースのルート追加を無効にする」のチェックを入れます。

ここまでの設定で、VPN はデフォルトゲートウェイとして動作しなくなります。
VPN 接続を確立しても、セキュリティエリアには接続できなくなっているはずです。

コマンドラインからルートを追加する

PowerShell を管理者モードで開いてください。

インタフェース番号のチェック

VPN のインタフェース番号をチェックします。
route print と入力するとインターフェース一覧に VPN が表示されます。
一番左に表示されている番号がインターフェース番号です。
下記の例だと、45がインタフェース番号になります。

経路先の IP アドレスを確認

google.comなどの様にアクセス先はドメイン名であることが大半だと思いますが、設定は IP アドレス単位です。
IP アドレスはコマンドラインから nslookup ドメイン名 で調べます。
検索できない場合は nslookup でドメイン名から IP アドレスを取得する を参考に、DNS サーバを指定してみてください。

> nslookup google.com

サーバー:  UnKnown
Address:  192.168.11.1

権限のない回答:
名前:    google.com
Address:  172.217.26.14

google.com の IP アドレスが 172.217.26.14 であることが分かりました。
サーバによっては複数の IP アドレスを返すので、全部メモしておきます。

経路を登録する

PowerShell から route add コマンドで VPN で利用する経路を追加していきます。
以下の書式になっています。

route add [接続先IP]] mask [ネットマスク] [VPNのゲートウェイ]] metric 1 if [インタフェース番号] -p

最後の -p オプションを付けることで、再起動後も設定が残ります。
つけないと VPN が切断されたら無効になります。

これを先程調べた google のアドレスと ネットマスク、VPN ゲートウェイに置き換えると下記のようになります。

route add 172.217.26.14 mask 255.255.255.255 192.168.1.1 metric 1 if 45 -p

これを VPN でアクセスするサイトの数だけ行います。

1個ずつ設定するのがつらすぎる

172.217.26.* など、アドレス範囲指定するには、ネットマスクと一緒に書き換えます。

route add 172.217.26.0 mask 255.255.255.0 192.168.1.1 metric 1 if 45 -p

設定完了!

設定が完了すると、期待通りに特定経路のみ VPN を経由し、他は自宅のルータから直接インターネットを見るようになります。
Windows10 に標準インストールされている ニュース アプリが設定なしの VPN 内だと見られないので、確認しやすいかと思います。
あと Steam アプリからストアみたりとか。

これで アプリのアップデート、ネットサーフィンも快適に!

おまけ

AWS のアドレスを調べてroute addを補助するツールを作成しました。
AWSのルート情報・IP範囲取得

よろしければどうぞ。