はじめに
経緯を飛ばしたい方はこちら
私が通学してる大学は家から大学のVPNを通してアクセスするサイトで履修登録や成績確認をします。
自分が使用しているデスクトップパソコンにはGPUが二枚積んであり、普段マイニングをしていました。
ある日、いつも通りマイニングをしながら成績確認をするために3分ほどVPNを接続したところ
後日VPNの利用規約に反しているとのことで、
大学「君マイニングしたでしょ」
ぼく「あっ・・・」
大学「大学の資源の不正利用ね」
という風にお叱り(注意)を受けました。
以前からゲーム中に成績確認したかったり、VPN接続中のSpotifyの挙動がおかしかったり、自宅鯖をLANでSSH接続中に成績確認したかったりしたかったため、その成績確認するサイトのみVPN経由するルーティングをすることで解決しようとなったわけです。
追記
反省文書いたら許されました。ルーティング設定をしっかりしますって書いたら面白いやつがいるとうわさされたようです。
なんで?()
しばらくこれで運用してみて、もしルーティングがミスってた場合僕はどうなるんでしょう(
免責
この情報で直接的または間接的に被ったいかなる損害についても、私は一切の責任を負いません。
やり方
1.VPN接続のプロファイル作成
Windowsの標準機能だったり、ほかのVPNソフト等を使って普通にVPN接続をしてください。
私は"Kyutech"というプロファイル名(VPN接続名)で作成しているためスクリーンショットはその名称で撮影されています。
2.デフォルトゲートウェイの変更
1.を済ましたら、VPN用の仮想LANアダプタが作成されていると思います。
コントロールパネル->ネットワークとインターネット->ネットワーク接続を開いて、当該接続用アダプタのプロパティを開いてください。
プロパティ画面のネットワークタブにあるインターネットプロトコル バージョン4(TCP/IPv4)を選択、そのプロパティを開き、そののち、全般タブから詳細設定を選択してください。
詳細設定を開くとデフォルトは下のスクリーンショットのようになっていると思います。
それを赤矢印のように、リモートネットワークでデフォルトゲートウェイを使う
のチェックを外し、クラスベースのルートの追加を無視する
のチェックを追加してください。
クラスベースのルートの追加を無視する
のチェックが外れていると、VPN接続先のIPアドレスが宛先と同一の場合VPN経由で流れます。つまり、VPN接続先のIPアドレスと同一のアドレスがLAN内に存在する場合、LAN宛先のパケットがVPN経由で流れてしまいます。
この段階でVPNの接続を再接続すると、すべてのパケットでVPNを通さず通信していることが確認できると思います。
グローバルアドレスを確認したり、
tracert
コマンドでパケットの流れを確認するとよいでしょう。
3.ルーティングの追加
Powershellで作業していきます。
VPN接続をした状態で
Get-VpnConnection
と入力すると
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
のようにサブネットマスクを設定するとよいでしょう
Add-VpnConnectionRoute "VPN_Name" -DestinationPrefix "203.0.113.0/24" -PassThru
を実行すると、
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の工程を繰り返してください。
ルーティング設定の確認
Get-NetRoute -InterfaceAlias
とPowershellに入力すると確認することができます。
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にて下記を入力すると削除されます。
Remove-VpnConnectionRoute -ConnectionName "VPN_Name" -DestinationPrefix "203.0.113.0/24" -PassThru
このように設定することにより、VPN接続毎に設定することができ、永続的にルーティング設定を適用させることができました。
終わりに
とても簡単に設定することができ、なんでもっと前から調べておかなかったんだろうかと悔やんでおります。
これだけで本当にマイニングがVPN経由から外れてるか少し不安なので、VPN接続するときはマイニング止めるのは心がけようと思います
この記事が少しでも参考になればうれしいです。
以上、備忘録も兼ねたVPNのルーティングの設定方法でした。
参考記事
特定の宛先だけ VPN経由で通信させる
Windows10でVPN接続時に自動でrouting設定する方法
特定の宛先だけ VPN経由で通信させる(PowerShellで設定)
Windowsのtracertでネットワークの経路を調査する