Return_path_problem
以前の記事 https://blog.ingenboy.com/post/problem_site2site/ こちらの記事でVPNクライアントを介して、別々のNWセグメントに所属するサーバ間で通信をする方法を軽く説目しました。 この問題は、リターンパス問題だったのですが、今回、改めてリターンパス問題について書きたい。 まず、 1. IP層での基本ルール 送信元IP と 宛先IP はパケットに埋め込まれていて、転送中は変わらない(※NATしない限り)。 各ホストやルータは「自分のルーティングテーブル」を参照して、この宛先IPはどこに渡すべきか? を決める。 宛先が自分の直接つながっているネットワークじゃなければ、**次のホップ(ゲートウェイ)**に渡す。 今回問題が起こった構成 [jhonny] 192.168.1.4 tun0:10.8.0.14 │ (LAN:192.168.1.0/24) │ デフォルトほぼVPN (0.0.0.0/1,128.0.0.0/1 → 10.8.0.13) ▼ [家庭ルータ(1系)] 192.168.1.1 │ (インターネット側へ) ▼ [VPN Server] tun0:10.8.0.1 gw:162.x.xxx.xxx ルート: 192.168.2.0/24 → 10.8.0.2(tun0) ▼ [kami] 192.168.2.10 tun0:10.8.0.30 ルート: 192.168.2.0/24 → enp6s0(直結) ▼ [Mac] 192.168.2.3 (LAN:192.168.2.0/24) デフォルトGW: 192.168.2.1(※ここがキモ) 2. 今回の例で流れを追う(リターンパスがなくてpingが返ってこないパターン) サーバから(jhonny)Mac に ping サーバ(10.8.0.1) が「192.168.2.3にICMPを送りたい」と思う VPNトンネルを経由して kaminogou(192.168.2.10) に届く kaminogou の Linux がルーティングを見て「192.168.2.3は自分のLAN直結だからそのまま出す」 Mac の en0 で「送信元=10.8.0.1 宛先=192.168.2.3」の ICMP が見える(ここまではOK) Mac が返信するとき Mac が「宛先=10.8.0.1に返したい」と思う Mac のルーティングテーブルを見る 10.8.0.0/24 の経路が無い なのでデフォルトゲートウェイ(192.168.2.1)に投げる 192.168.2.1(家庭用ルータなど)が「10.8.0.0/24 なんて知らん」と捨てる これがリターンパス問題 問い なぜ送信元が10.8.0.1になるのか? -> サーバから送ったからだな。完全理解。 ...