結論
routeコマンドでインターフェスを指定してあげる。windowsでも同じコマンドがあったのですが使い方が違うのでメモメモ。
自動的にいい感じにしてくれるスクリプト
これからも同様のことがあると思うのでスクリプト化しておいた。管理者権限で実行すれば、VPN接続時はrouteを張って、VPN非接続時はrouteを剥がしてくれる。
https://gist.githubusercontent.com/nak1114/36a5f29590f539bfd732f412b8c746b7/raw/add_route.rb
# !ruby
vpn_name="HOME"
vpn_ip="10.22.33"
m=/^\s*(\d+)\.{20,}#{vpn_name}$/.match `route print`
system "route delete #{vpn_ip}.0"
system("route -p add #{vpn_ip}.0 mask 255.255.255.0 #{vpn_ip}.1 METRIC 1 IF "+m[1])if m
puts `route print`
きっかけ
先日、某府中市管轄のFreeWifiに接続したら10.0.0.0/8という無茶苦茶なネットワークに繋がりました。自宅も10.x.y.*/24を使用しているのでそのままでは届きません。
やったこと
まずVPNのインターフェース番号を調べる
VPNを繋いだ状態で以下のコマンドを実行する。
> route print
===========================================================================
インターフェイス一覧
31...........................HOME
12...bf ff ef 8f 2f e6 ......Microsoft Wi-Fi Direct Virtual Adapter
6...bf ff ef 8f 2f e6 ......Broadcom 802.11ac Wireless PCIE Full Dongle Adapter
1...........................Software Loopback Interface 1
4...00 00 00 00 00 00 00 e0 Teredo Tunneling Pseudo-Interface
===========================================================================
HOME
がVPN接続名ですので31
番がネットワーク番号になります
31番を指定して自分の範囲のIPをVPNに向かわせます。
> route -p add 10.22.33.0 mask 255.255.255.0 10.22.33.1 metric 1 if 31
OK!
これで再起動すれば無事に自宅に繋がります。
VPNが終わったら固定ルートも解放しましょう
> route delete 10.22.33.0
OK!
最後に
FreeWifiでまさかクラスAのアドレスは使わないだろうと10.x.y.zを自宅ネットにしたのにもろ被りしてしまった。
まさかこのWifiに1600万台(日本の人口の1割強)も繋がることを想定しているのかな?どんだけ太い線引いているのだろう。もしそんな太いインフラを引いていたら府中市民は税金の無駄遣いだと怒っていいと思う。