さわらブログ

さわら(@xhiroga)の技術ブログ

macOSでVPN使用時にプライベートIPアドレスが重複したので、どうすべきだったのかを考える

注意

筆者はネットワークの専門家ではありません。以下で紹介する内容はベストプラクティスではない可能性があります。

経緯

コワーキングスペースから自宅LANにVPN接続したら、自作PC内の仮想環境のマシンに対してSSHができず、はて?となりました。

図で表すとこんな感じです。

VPNでプライベートIPアドレスが重複

いろいろ試した末に原因が分かり、テザリングで接続することでプライベートIPの重複を回避できました。しかし、実際にはどうするのがスマートだったのかを考えます。

問題の切り分け

ping で疎通確認をする、サーバーの電源がONになっているかを確かめる他に、ルーティングテーブルの設定の確認が有効です。

Linuxでは以下のコマンドで、特定のIPアドレスがどのネットワークインターフェース経由でアクセスされるかを知ることができます。

# 仮想ブリッジに接続したLinuxから実行
% ip route get 8.8.8.8
8.8.8.8 via 192.168.100.1 dev vmbr0 src 192.168.100.12 uid 0 
    cache

macOSではコマンドが異なります。

# テザリング + VPN
% route get 192.168.100.12
   route to: 192.168.100.12
destination: 192.168.100.0
       mask: 255.255.255.0
  interface: ppp0
      flags: <UP,DONE,STATIC,PRCLONING>
 recvpipe  sendpipe  ssthresh  rtt,msec    rttvar  hopcount      mtu     expire
       0         0         0         0         0         0      1280         0 

# LAN内から実行
% route get 192.168.100.12
   route to: 192.168.100.12
destination: 192.168.100.0
       mask: 255.255.255.0
  interface: en0
      flags: <UP,DONE,CLONING,STATIC>
 recvpipe  sendpipe  ssthresh  rtt,msec    rttvar  hopcount      mtu     expire
       0         0         0         0         0         0      1500        -6 

VPN接続時に実行した場合、interfaceが ppp0 になっているのが分かると思います。

これは PPPoE 接続に対応した仮想のネットワークインターフェースらしく、routeがこのインターフェースを通っていればVPNを経由していると考えて良さそうです。

参考

テザリング以外の対策

ルートテーブルを手動または自動で編集し、特定のIPアドレスの場合はVPNのネットワークインターフェースを利用するような設定が考えられます。

それ以外にもNATを使った設定もできるらしいですが、複雑そうなので除外。

参考

まとめ

コワーキングスペースと自宅LANのプライベートIPアドレス空間が重複するという珍しそうな経験をしました。

次回以降はよりスマートに切り分けをしたいところです(もっとも、対応は変わらずテザリングになりそうです)