はじめに
Lantern Festival では Main Stage から Workshop への往路が準備されていますが、応答が戻れません。既存サービスを保ちながら、本物の接続パケットを観察し、不足する復路を修復します。
先に「祭りの別のエリアに到達する」を完了するか、そこで学ぶ宛先照会、限定したルートの追加・置換・復旧手順を理解しておいてください。IPv4 アドレス、簡単な /24 範囲、クライアントとサーバー、ポートを識別し、ターミナルにコマンドを入力して ip addr でアドレスを表示できることを前提とします。準備済み Linux ノードは一つのカーネルを共有するネットワーク名前空間で、独立した物理マシンではありません。プログラミング、ファイアウォール、動的ルーティング、サブネット計算は不要です。
本物のプログラム要求には Area Plan、各クライアントには Area A と Area B、経路の変更には West Router と East Router を使います。各ターミナルは固有のディレクトリとネットワーク状態を保ちます。タブを開いても進行状況はリセットされません。このラボは独立して開始します。所要時間は読解と一般的な間違いへの対応を含む作者の見積もりで、初心者による実測ではありません。
応答の復路を修復し、祭りのネットワークを保つ
このステップでは、経路を変える前に接続の両方向を観察します。この独立環境では West Router から Workshop への経路は準備済みです。Area Plan で、Area A から Main Stage、Area B から Workshop を要求してください。両方のローカルプログラムは正常です。Area A から Broadcast Room も要求します。Area A からの Workshop 要求はまだ失敗します。
TCP(Transmission Control Protocol)は、この HTTP 交換の前に接続を確立します。クライアントは一時的な送信元ポート、つまりエフェメラルポートを選びます。応答では送信元と宛先のアドレスおよびポートが入れ替わります。TCP 接続はクライアントの SYN から始まり、HTTP を送る前にサーバーが SYN-ACK で答えます。サーバーのネットワークで SYN が見えても、HTTP 要求がサービスに届いた証拠にはなりません。二つのルーターで、範囲を限定した実トラフィックを見ます。
West Router に切り替えます。tcpdump はパケットを観察します。-n は数値アドレスを保ち、-i any はこのノードのインターフェースを監視し、-c 8 は一致したパケットが最大八個になったら終了します。引用符内のフィルターは TCP ポート 8080 を選びます。八個届かなくても timeout 120 が二分後に終了させます。収集を制限するだけで、トラフィックは生成しません。パケット行が終了時に初めて表示されることもあります。タブを変える前に起動メッセージを待ち、停止後に収集した行を読んでください。
timeout 120 tcpdump -ni any -c 8 'tcp port 8080'
listening on any を待ち、East Router に切り替えて同じ制限付き観察を開始します。
timeout 120 tcpdump -ni any -c 8 'tcp port 8080'
listening on any の後、Area A に切り替えて一度要求します。三秒でのタイムアウトを想定しています。
curl --noproxy '*' -fsS --max-time 3 http://10.72.0.10:8080/programme.txt
echo $?
28 を確認します。失敗後に East Router に切り替えます。観察がまだ実行中なら Ctrl+C で停止し、バッファーにあるパケット行を表示させます。既にプロンプトに戻っていれば、そのままにします。どちらでも、ほかのコマンドより先に直ちに終了ステータスを表示します。
echo $?
124 は意図した二分の上限で収集が終了したことを示します。0 は tcpdump が個数上限に達した場合や Ctrl+C を正常に処理した場合に返ります。中断されたラッパープログラムでは 130 のこともあります。観察コマンドのステータスだけでなく、パケット行を証拠にしてください。要求の前に時間切れになったり何も捕捉できなかった場合は、二つの制限付きキャプチャと要求を繰り返します。二分はタブ切り替えの余裕であり、初心者の実測に基づく保証ではありません。
送信元 10.71.0.10 から 10.72.0.10.8080 へ向かう Flags [S] を探します。transit から入り lan から出ます。応答はアドレスが逆になり、10.72.0.10.8080 から 10.71.0.10 へ向かう Flags [S.] が lan に入ります。その先へ進む有効な経路がありません。West Router に切り替え、まだ動作中なら Ctrl+C で観察を止め、こちらのステータスも読みます。
echo $?
West には Workshop へ向かう SYN が見えますが、戻る SYN-ACK はありません。時刻、エフェメラルポート、再送回数は変動します。この証拠は障害を復路に絞り込みます。完了した HTTP 交換のキャプチャではありません。
復路を追加する
ここでは応答の宛先に経路を用意します。East Router で経路表を読み、元のクライアントのアドレスを照会します。
ip route
ip route get 10.71.0.10
RTNETLINK answers: No route to host が表示されます。East Router は 10.72.0.0/24 と中継網 172.22.0.0/24 に接続されていますが、応答先は 10.71.0.0/24 に属します。次ホップは隣接する West Router の 172.22.0.1 でなければならず、遠隔のクライアント自身ではありません。
前のラボと同じ限定ルートの構文を使います。
ip route add 10.71.0.0/24 via 172.22.0.1 dev transit
ip route get 10.71.0.10
via 172.22.0.1 dev transit を確認します。Area A に切り替えて業務要求を繰り返します。
curl --noproxy '*' -fsS --max-time 3 http://10.72.0.10:8080/programme.txt
Workshop の完全なプログラムと Request received from: 10.71.0.10 を読みます。今回は接続ハンドシェイク、HTTP 要求、HTTP 応答まで成功しています。送信元は Area A の元のアドレスです。アドレス変換やプロキシは、不足する復路を修復せず隠してしまいます。
既にルートがあれば、表を読み ip route replace 10.71.0.0/24 via 172.22.0.1 dev transit を使います。まだ失敗するなら、両ルーターで宛先と次ホップを比較し、正しいクライアントのタブから再試行してください。すべてのサービスの再起動や端点アドレスの変更は不要です。
ほかの経路を維持する
ここでは両方向と保護対象の第三ネットワークを確認します。Area B から Main Stage を要求します。
curl --noproxy '*' -fsS --max-time 3 http://10.71.0.10:8080/programme.txt
開幕公演、ランタンパレード、Request received from: 10.72.0.10 を確認してください。ローカルプログラムと放送キューも要求します。
curl --noproxy '*' -fsS --max-time 3 http://10.72.0.10:8080/programme.txt
curl --noproxy '*' -fsS --max-time 3 http://10.73.0.10:8080/programme.txt
Area A に切り替え、元のローカルアクセスと放送室へのアクセスを保ちます。
ip -4 addr show dev eth0
ip route show default
curl --noproxy '*' -fsS --max-time 3 http://10.71.0.10:8080/programme.txt
curl --noproxy '*' -fsS --max-time 3 http://10.73.0.10:8080/programme.txt
アドレスは引き続き 10.71.0.10/24、クライアントのデフォルトは via 10.71.0.1 です。Area B に切り替えて対応する値を読みます。
ip -4 addr show dev eth0
ip route show default
アドレスは 10.72.0.10/24、デフォルトは via 10.72.0.1 のままです。Area Plan で Area A と Area B の両方から三つのリソースを要求します。内容と元の送信元を読み、両ルーターの経路表を開いてください。元の二つの unreachable default metric 32760 は残っています。限定した宛先ルートが優先され、デフォルトは置き換えません。
East Router で保護対象の第三ネットワークのルートを誤って消したら、習った置換形式でその項目だけを戻します。
ip route replace 10.73.0.0/24 via 172.22.0.1 dev transit
端点の元のデフォルトは上に示しました。ルーターの元のデフォルトは、それぞれのタブで ip route replace unreachable default metric 32760 により戻せます。これらのコース用コマンドをプラットフォームのネットワークに実行しないでください。修正後は表を読み、影響する要求をすべて再試行します。元の直結ルート、アドレス、リンク、サービスプロセスを保ちます。チェックは読み取り専用の観察と通常の GET だけを行い、ルートの追加や環境の修復はしません。示された遠隔エリア範囲内の、同等で正確なルートも受け入れます。

地図で二つの隣接する中継先を確認し、宛先行と維持されたデフォルトルートを比較してください。開いた表は、動作中のラボの本物のカーネル経路を示しています。
まとめ
実際の宛先照会と限定ルートで祭りのプログラムを届け、元のアドレスとほかの経路を保ちました。制限付きライブキャプチャで、接続要求と応答も区別しました。



