大学のVPNの制限を回避した話

# はじめに

>経緯を飛ばしたい方は[こちら](#やり方)


私が通学してる大学は家から大学のVPNを通してアクセスするサイトで履修登録や成績確認をします。
自分が使用しているデスクトップパソコンにはGPUが二枚積んであり、普段マイニングをしていました。

ある日、いつも通りマイニングをしながら成績確認をするために3分ほどVPNを接続したところ
後日VPNの利用規約に反しているとのことで、

大学「君マイニングしたでしょ」
ぼく「あっ・・・」
大学「大学の資源の不正利用ね」
という風にお叱り(注意)を受けました。

以前からゲーム中に成績確認したかったり、VPN接続中のSpotifyの挙動がおかしかったり、自宅鯖をLANでSSH接続中に成績確認したかったりしたかったため、その成績確認するサイトのみVPN経由するルーティングをすることで解決しようとなったわけです。
> 追記
反省文書いたら許されました。ルーティング設定をしっかりしますって書いたら面白いやつがいるとうわさされたようです。
なんで？（）

しばらくこれで運用してみて、もしルーティングがミスってた場合僕はどうなるんでしょう（

# 免責
この情報で直接的または間接的に被ったいかなる損害についても、私は一切の責任を負いません。

# やり方

## 1.VPN接続のプロファイル作成
Windowsの標準機能だったり、ほかのVPNソフト等を使って普通にVPN接続をしてください。
>私は"Kyutech"というプロファイル名(VPN接続名)で作成しているためスクリーンショットはその名称で撮影されています。

## 2.デフォルトゲートウェイの変更
1.を済ましたら、VPN用の仮想LANアダプタが作成されていると思います。
コントロールパネル->ネットワークとインターネット->ネットワーク接続を開いて、当該接続用アダプタのプロパティを開いてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283010/8ede644c-d6f9-b590-e690-85f8468f20ef.png)
プロパティ画面のネットワークタブにあるインターネットプロトコル　バージョン4(TCP/IPv4)を選択、そのプロパティを開き、そののち、全般タブから詳細設定を選択してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283010/c18ded5a-e906-37f2-bc2d-6a6b9b7cb634.png)　　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283010/ac10b864-6cf9-7c7f-cbd3-55b5433e532e.png)

詳細設定を開くとデフォルトは下のスクリーンショットのようになっていると思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283010/9d5aaa9b-1e8d-759e-02ff-e22fe910b68f.png)　

それを赤矢印のように、`リモートネットワークでデフォルトゲートウェイを使う`のチェックを**外し**、`クラスベースのルートの追加を無視する`のチェックを**追加**してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283010/98a90ccb-91aa-a7d8-b0b1-aadbe65dff8e.png)
> `クラスベースのルートの追加を無視する`のチェックが外れていると、VPN接続先のIPアドレスが宛先と同一の場合VPN経由で流れます。
>>つまり、VPN接続先のIPアドレスと同一のアドレスがLAN内に存在する場合、LAN宛先のパケットがVPN経由で流れてしまいます。

この段階でVPNの接続を再接続すると、すべてのパケットでVPNを通さず通信していることが確認できると思います。

> グローバルアドレスを確認したり、`tracert`コマンドでパケットの流れを確認するとよいでしょう。

## 3.ルーティングの追加
Powershellで作業していきます。

VPN接続をした状態で

``` shell
Get-VpnConnection
```
と入力すると

```shell
PS C:\Windows\system32> Get-VpnConnection


Name                  : "VPN_Name"
ServerAddress         : ***
AllUserConnection     : False
Guid                  : {***}
TunnelType            : ***
AuthenticationMethod  : {***}
EncryptionLevel       : ***
L2tpIPsecAuth         : ***
UseWinlogonCredential : ***
EapConfigXmlStream    :
ConnectionStatus      : Connected
RememberCredential    : True
SplitTunneling        : ***
DnsSuffix             :
IdleDisconnectSeconds : ***
```

とVPNの接続情報が表示されます。

その**"VPN_Name"(各自で置き換えてください)**と、VPN経由で接続したい宛先のIPアドレスを取得して、**"203.0.113.0/24"**のところに置き換えてください。
>特定のサイトのみVPN接続したい場合、`***.***.***.***/32`のようにサブネットマスクを設定するとよいでしょう


```shell
Add-VpnConnectionRoute "VPN_Name" -DestinationPrefix "203.0.113.0/24" -PassThru
```

を実行すると、

```shell
PS C:\Windows\system32> Add-VpnConnectionRoute "VPN_Name" -DestinationPrefix "203.0.113.0/24" -PassThru


DestinationPrefix : 203.0.113.0/24
InterfaceIndex    :
InterfaceAlias    : VPN_Name
AddressFamily     : IPv4
NextHop           : 0.0.0.0
Publish           : 0
RouteMetric       : 1
PolicyStore       :
```

のように表示されたら完了です。

複数のサイトをVPN経由で接続するよう設定したい場合は[3の工程](#3.ルーティングの追加)を繰り返してください。

### ルーティング設定の確認

```shell
Get-NetRoute -InterfaceAlias
```
とPowershellに入力すると確認することができます。

```shell
PS C:\Windows\system32> Get-NetRoute -InterfaceAlias VPN_Name

ifIndex DestinationPrefix                              NextHop                                  RouteMetric ifMetric PolicyStore
------- -----------------                              -------                                  ----------- -------- -----------
30      255.255.255.255/32                             0.0.0.0                                          256 25       ActiveStore
30      224.0.0.0/4                                    0.0.0.0                                          256 25       ActiveStore
30      ***.**.***.**/32                               0.0.0.0                                          256 25       ActiveStore
30      203.0.113.0/24                                 0.0.0.0                                            1 25       ActiveStore

```

RouteMetricの数値(優先度)が1になっている行の設定を見るとよいでしょう。

### ルーティング設定の削除について
Powershellにて下記を入力すると削除されます。

```shell
Remove-VpnConnectionRoute -ConnectionName "VPN_Name" -DestinationPrefix "203.0.113.0/24" -PassThru
```

このように設定することにより、VPN接続毎に設定することができ、永続的にルーティング設定を適用させることができました。


# 終わりに
とても簡単に設定することができ、なんでもっと前から調べておかなかったんだろうかと悔やんでおります。
これだけで本当にマイニングがVPN経由から外れてるか少し不安なので、VPN接続するときはマイニング止めるのは心がけようと思います:frowning2:

この記事が少しでも参考になればうれしいです。

以上、備忘録も兼ねたVPNのルーティングの設定方法でした。


# 参考記事
[特定の宛先だけ VPN経由で通信させる](https://vogel.at.webry.info/201805/article_10.html)
[Windows10でVPN接続時に自動でrouting設定する方法](https://casualstartup.hatenablog.jp/entry/20170109/vpn_automatic_routing)
[特定の宛先だけ VPN経由で通信させる（PowerShellで設定）](https://vogel.at.webry.info/202008/article_4.html)
[Windowsのtracertでネットワークの経路を調査する](https://www.atmarkit.co.jp/ait/articles/0305/03/news002.html)