Open4

VPN接続中に特定ホストやネットワークへの通信をVPNを経由せずに行いたい

ほなふくほなふく

これは何

VPN接続中にローカルネットワーク上のファイルサーバーやSSHホストに接続したい場合がある。
winならroute addで経路を明示的に設定することでこれを設定できる

ほなふくほなふく

対象ネットワークの情報を集める

ローカルネットワーク上の対象マシン(VPNを経由せずアクセスしたいマシン)を10.1.1.1とする。

サブネットマスク

現在接続しているネットワークのサブネットマスクを調べる。
コントロール パネル\ネットワークとインターネット\ネットワーク接続から対象NICのプロパティを開き確認する。ipconfigなどを使いコマンドラインから調べることもできる

デフォルトゲートウェイ

現在接続しているネットワークのデフォルトゲートウェイを調べる。
先ほどと同じようにNICの詳細を確認し、IPv4 デフォルトゲートウェイと書かれた項目があるのでこの値をメモしておく

ネットワークアドレス

対象ホストだけでなく、対象のネットワークを指定して通信先を成業する場合はそのネットワークアドレスも調べる。
10.10.0.1/16の場合は、10.10.0.0がネットワークアドレスとなる。
以下のようなサイトを使っても良いが、自分で計算することもできる
https://note.cman.jp/network/subnetmask.cgi

ほなふくほなふく

NICの情報を集める

ローカルネットワークと接続しているNICの番号を調べる。
ipconfig /allで対象NICのMACアドレスを調べてメモしておく
( ここでは E0-2E-0B-3B-CA-59 となっている )

次にroute printを実行し先頭にインターフェイス一覧という項目がある
このリストの中から先ほどのNICを探し、その先頭の番号をメモしておく
ここで表示される項目名は先ほどの名前と違う(ここではNICのデバイス名)ので、MACアドレスを頼りに対象のものを見つける
( ここでは 12...e2 2e 0b 3b ca 59 ......Microsoft Wi-Fi Direct Virtual Adapter #2 となる。番号は先頭の12 )

ほなふくほなふく

経路を設定する

ip routeコマンドを実行しローカルネットワーク上のマシンに接続するための経路を設定する

筆者はwin環境にgsudoを導入しているので先頭にsudoをつけているが、導入せずにターミナルを管理者権限で開き、sudo以降のコマンドを実行してもいい
https://github.com/gerardog/gsudo

-p オプションはPermanentの略。再起動後もこの経路情報を保存する

10.1.1.1はローカルネットワーク上の対象マシンのIP
default_gateway_ipはデフォルトゲートウェイのIPに置き換える
metric 1 宛先ネットワークが複数ある場合の優先度を表す値。小さい方が優先される
if 21 ネットワークインターフェースを指定する。先ほど調べたNICの番号を入れる

# SSH先マシンだけを対象に
sudo route -p add 10.1.1.1 mask 255.255.255.255 default_gateway_ip metric 1 if 21

# 対象マシンのネットワークを指定する
sudo route -p add 10.1.0.0 mask 255.255.0.0 default_gateway_ip metric 1 if 21

参考にした資料

https://qiita.com/mindwood/items/5c56769a7fc40cafe7e3
https://milestone-of-se.nesuke.com/nw-basic/routing/host-routing/
https://www.infraexpert.com/study/routing4.html