macOSでVPN使用時にプライベートIPアドレスが重複したので、どうすべきだったのかを考える
注意
筆者はネットワークの専門家ではありません。以下で紹介する内容はベストプラクティスではない可能性があります。
経緯
コワーキングスペースから自宅LANにVPN接続したら、自作PC内の仮想環境のマシンに対してSSHができず、はて?となりました。
コワーキングスペースのプライベートIPアドレスとVPN経由した自宅のアドレスが被ってました〜!https://t.co/XH1ogl4Kdh が一緒だった。 https://t.co/Ie4dEqJ2AV
— さわら (@xhiroga) 2022年4月24日
図で表すとこんな感じです。
いろいろ試した末に原因が分かり、テザリングで接続することでプライベート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アドレス空間が重複するという珍しそうな経験をしました。
次回以降はよりスマートに切り分けをしたいところです(もっとも、対応は変わらずテザリングになりそうです)
