前フリ
なかなかブログ書く風習が定着しませんが、どうもです。
さてVPN。便利ですよね。私も出先(ネカフェとかコワーキングスペースとか)から自宅にSoftEtherでつないで作業したりします。
ただ時々自宅LANのIPアドレス体系と出先の体系が同じとき、(10.X.X.X、192.168.X.Xとか)VPNって使えなくなるんですよね。 正確には使えるんですが手元側のルーティングテーブルが出先のルータになってしまい、戻りのパケットがうまく返ってこれなくなったりします。
そこで何とかする方法を見つけましたので共有します。 ようは手元端末のルーティングテーブルをVPN先ネットワークだけ高い形に書き換えるってことです。
前提
Windows 10で動作確認してますが、理屈はMacでもLinuxでも同じなので同等のコマンドで動くとおもいます。
- VPN先(自社、自宅など)のネットワーク: 10.1.1.0/24
- VPN元(出先、コワーキングスペースなど)のネットワーク: 10.200.100.0/24
- VPN元のゲートウェイ: 10.200.100.1
- VPN利用するパソコンのIPアドレス(VPN先): 10.1.1.100
- VPN利用するパソコンのIPアドレス(VPN元): 10.200.100.115
結論
以下コマンドを実行(適当に読み替えて)
route add 10.1.1.0 MASK 255.255.255.0 10.1.1.100 metric 25
詳細
まずはアドレス体系違う場合(VPN元ネットワークが192.168系以外の前提は同じ)
以下のように192.168.X.Xと10.X.X.Xがお互い干渉しないので通信に問題はありません。
C:\Users\name>route print =========================================================================== インターフェイス一覧 (略) =========================================================================== IPv4 ルート テーブル =========================================================================== アクティブ ルート: ネットワーク宛先 ネットマスク ゲートウェイ インターフェイス メトリック 0.0.0.0 0.0.0.0 192.168.1.1 192.168.1.2 4265 0.0.0.0 0.0.0.0 リンク上 10.1.1.100 26 (グローバルIPアドレス) 255.255.255.255 192.168.1.1 192.168.1.2 4266 10.1.1.100 255.255.255.255 リンク上 10.1.1.100 281 127.0.0.0 255.0.0.0 リンク上 127.0.0.1 4556 127.0.0.1 255.255.255.255 リンク上 127.0.0.1 4556 127.255.255.255 255.255.255.255 リンク上 127.0.0.1 4556 192.168.1.0 255.255.255.0 リンク上 192.168.1.2 4521 192.168.1.2 255.255.255.255 リンク上 192.168.1.2 4521 192.168.1.255 255.255.255.255 リンク上 192.168.1.2 4521 224.0.0.0 240.0.0.0 リンク上 127.0.0.1 4556 224.0.0.0 240.0.0.0 リンク上 192.168.1.2 4521 224.0.0.0 240.0.0.0 リンク上 10.1.1.100 26 255.255.255.255 255.255.255.255 リンク上 127.0.0.1 4556 255.255.255.255 255.255.255.255 リンク上 192.168.1.2 4521 255.255.255.255 255.255.255.255 リンク上 10.1.1.100 281 =========================================================================== 固定ルート: なし IPv6 ルート テーブル =========================================================================== アクティブ ルート: If メトリック ネットワーク宛先 ゲートウェイ (略) =========================================================================== 固定ルート: なし C:\Users\name>
問題のアドレス体系同じ場合
以下のようにお互い10.X.X.Xなのでルーティングテーブルが混同します。これはたとえお互いがサブネットを 切っていてもあんまり関係ありません。あくまでIPアドレスが何番ならどこへ飛ぶかだけなので。
C:\Users\name>route print =========================================================================== インターフェイス一覧 (略) =========================================================================== IPv4 ルート テーブル =========================================================================== アクティブ ルート: ネットワーク宛先 ネットマスク ゲートウェイ インターフェイス メトリック 0.0.0.0 0.0.0.0 10.128.128.128 10.200.100.1 4265 0.0.0.0 0.0.0.0 リンク上 10.1.1.100 26 10.0.0.0 255.0.0.0 リンク上 10.200.100.1 4521 10.1.1.0 255.255.255.0 10.1.1.100 10.200.100.1 4266 10.1.1.100 255.255.255.255 リンク上 10.1.1.100 281 10.200.100.1 255.255.255.255 リンク上 10.200.100.1 4521 10.255.255.255 255.255.255.255 リンク上 10.200.100.1 4521 127.0.0.0 255.0.0.0 リンク上 127.0.0.1 4556 127.0.0.1 255.255.255.255 リンク上 127.0.0.1 4556 127.255.255.255 255.255.255.255 リンク上 127.0.0.1 4556 (グローバルIPアドレス) 255.255.255.255 10.128.128.128 10.200.100.1 4266 224.0.0.0 240.0.0.0 リンク上 127.0.0.1 4556 224.0.0.0 240.0.0.0 リンク上 10.200.100.1 4521 224.0.0.0 240.0.0.0 リンク上 10.1.1.100 26 255.255.255.255 255.255.255.255 リンク上 127.0.0.1 4556 255.255.255.255 255.255.255.255 リンク上 10.200.100.1 4521 255.255.255.255 255.255.255.255 リンク上 10.1.1.100 281 =========================================================================== 固定ルート: なし IPv6 ルート テーブル =========================================================================== アクティブ ルート: (略) =========================================================================== 固定ルート: なし C:\Users\name>route print =========================================================================== インターフェイス一覧 (略) =========================================================================== IPv4 ルート テーブル =========================================================================== アクティブ ルート: ネットワーク宛先 ネットマスク ゲートウェイ インターフェイス メトリック 0.0.0.0 0.0.0.0 10.128.128.128 10.200.100.1 4265 0.0.0.0 0.0.0.0 リンク上 10.1.1.100 26 10.0.0.0 255.0.0.0 リンク上 10.200.100.1 4521 10.1.1.0 255.255.255.0 10.14.1.10 10.200.100.1 4290 10.1.1.100 255.255.255.255 リンク上 10.1.1.100 281 10.200.100.1 255.255.255.255 リンク上 10.200.100.1 4521 10.255.255.255 255.255.255.255 リンク上 10.200.100.1 4521 127.0.0.0 255.0.0.0 リンク上 127.0.0.1 4556 127.0.0.1 255.255.255.255 リンク上 127.0.0.1 4556 127.255.255.255 255.255.255.255 リンク上 127.0.0.1 4556 (グローバルIPアドレス) 255.255.255.255 10.128.128.128 10.200.100.1 4266 224.0.0.0 240.0.0.0 リンク上 127.0.0.1 4556 224.0.0.0 240.0.0.0 リンク上 10.200.100.1 4521 224.0.0.0 240.0.0.0 リンク上 10.1.1.100 26 255.255.255.255 255.255.255.255 リンク上 127.0.0.1 4556 255.255.255.255 255.255.255.255 リンク上 10.200.100.1 4521 255.255.255.255 255.255.255.255 リンク上 10.1.1.100 281 =========================================================================== 固定ルート: なし IPv6 ルート テーブル =========================================================================== アクティブ ルート: If メトリック ネットワーク宛先 ゲートウェイ (略) =========================================================================== 固定ルート: なし C:\Users\name>