祭りの別のエリアに到達する

LinuxBeginner
オンラインで実践に進む

はじめに

Lantern Festival の各エリアのサービスは動いていますが、スタッフは別のエリアのプログラムをまだ取得できません。放送室を利用できる状態に保ちながら、分離したネットワーク間に限定した経路を復旧します。

IPv4 アドレス、簡単な /24 範囲、クライアントとサーバー、ポートを識別し、ターミナルにコマンドを入力して ip addr でアドレスを表示できることを前提とします。準備済み Linux ノードは一つのカーネルを共有するネットワーク名前空間で、独立した物理マシンではありません。プログラミング、ファイアウォール、動的ルーティング、サブネット計算は不要です。

本物のプログラム要求には Area Plan、各クライアントには Area A と Area B、経路の変更には West Router と East Router を使います。各ターミナルは固有のディレクトリとネットワーク状態を保ちます。タブを開いても進行状況はリセットされません。このラボは独立して開始します。所要時間は読解と一般的な間違いへの対応を含む作者の見積もりで、初心者による実測ではありません。

Workshop への経路を復旧する

このステップでは、遠隔の宛先を調べる前に正常なローカル例を確認します。Area Plan から始めてください。Main Stage カードの Request from Area A を選びます。開幕公演とランタンパレードが表示され、最後は Request received from: 10.71.0.10 となります。ブラウザーの戻るボタンで戻ります。Broadcast Room の Request from Area A も選んでください。放送キューも取得できます。これらは維持すべき正常なサービスです。

Area A に切り替えます。ターミナルは既に /home/labex/project/festival-routes/a にあります。pwd はそのディレクトリを表示します。ip -4 addr show は IPv4 アドレスを表示し、dev eth0 はコースのインターフェースを指定します。

pwd
ip -4 addr show dev eth0

10.71.0.10/24 を確認してください。この計画の /24 は、10.71.0 で始まるアドレスがローカルであることを示します。Workshop は別のサブネット 10.72.0.0/24 を使います。ルーターはネットワーク間でパケットを転送し、元のアドレスは変更しません。

HTTP は準備済みプログラムサービスの要求・応答プロトコルです。curl は HTTP リソースを要求します。--noproxy '*' はすべての宛先でプロキシ設定を迂回し、引用符は * をそのままの文字として保ちます。-f は HTTP エラーを失敗として扱い、-s は進捗表示を隠し、-S はエラーを表示します。--max-time 3 は試行全体を三秒に制限します。ポート 8080 が準備済みプログラムサービスです。

curl --noproxy '*' -fsS --max-time 3 http://10.71.0.10:8080/programme.txt

送信元アドレスを含め、ローカルプログラムを最後まで読んでください。次は Workshop を試します。次の要求は失敗する想定で、ネットワークを壊す操作ではありません。

curl --noproxy '*' -fsS --max-time 3 http://10.72.0.10:8080/programme.txt

プログラムではなく接続失敗になります。直後にネイティブな終了ステータスを読みます。$? は直前のコマンドのステータスを保持し、echo がそれを表示します。

echo $?

ゼロ以外は今回の試行の失敗を示します。接続失敗(多くは 7)、タイムアウト(28)、HTTP の拒否(22、-f 使用時)は異なる観察結果で、どれか一つで全原因を特定できるわけではありません。ポートでの拒否は、ホストには到達したものの接続を受け付けるサービスがなかった場合にも起こります。入力を間違えたら、正しいタブ・アドレス・ポートを確認して再試行します。VM をリセットしないでください。

ローカルサービスと第三のネットワークは正常です。次は West Router が Workshop にどの経路を使うかを調べます。

ルーターの判断を読む

ここでは、クライアントのデフォルトゲートウェイとルーターの宛先別経路を区別します。Area A から始めます。ip route は稼働中の経路表を読み、ip route get はプログラム要求を送らずに、カーネルが選ぶ経路を照会します。

ip route
ip route get 10.72.0.10

via 10.71.0.1 dev eth0 が表示されます。次ホップは隣接する West Router です。via は隣接先、dev は出力インターフェースを示します。これだけでは West Router がその先の経路を知っているとは言えません。

West Router に切り替えます。コースの作業ディレクトリは /west で終わります。インターフェースと経路を読みます。

ip -4 addr show
ip route
ip route get 10.72.0.10

最後の照会は RTNETLINK answers: No route to host となります。LAN インターフェースは 10.71.0.1/24、transit は 172.22.0.1/24 です。隣の East Router は 172.22.0.2/24 を使い、10.72.0.1/24 で Workshop に接続します。Broadcast Room は West Router の broadcast インターフェースの先にあり、そのアドレスは 10.73.0.1/24 です。

準備された unreachable default metric 32760 は意図的なデフォルトルートです。この隔離演習では、ほかの経路に一致しない宛先を拒否します。一般のデフォルトルートはゲートウェイを使うこともあります。ここでは元のルートを保ちます。metric 32760 は同じプレフィックスのルート間での優先度で、その比較では小さい metric が優先されます。10.72.0.0/24 の宛先ルートはデフォルトより具体的で、そのエリアの経路だけを変えます。デフォルトの置換や経路表全体の消去はしないでください。

Area Plan の West Router · live routing table を開き、同じネイティブな表を比べます。地図は構造を表し、プログラム要求は本物の通信を確かめます。この最初のラボでは East Router の復路は準備済みです。必要なのは West Router の不足する宛先ルートだけです。

限定した経路を追加する

ここでは宛先ルートを一つ追加し、遠隔リソース全体を取得します。West Router から始めてください。このターミナルにはコースの名前空間内での管理権限があります。ip route add は稼働中のルートを追加します。10.72.0.0/24 が宛先範囲、via 172.22.0.2 が隣のルーター、dev transit がそこへ接続するリンクです。

ip route add 10.72.0.0/24 via 172.22.0.2 dev transit

成功時は通常何も表示されません。判断を再び確認します。

ip route get 10.72.0.10

via 172.22.0.2 dev transit が表示されます。ここでの src はこのルーター自身が開始する要求の送信元です。転送される Area A の通信は自分の元アドレスを保ちます。Area A に切り替え、実際のクライアントから要求します。

curl --noproxy '*' -fsS --max-time 3 http://10.72.0.10:8080/programme.txt

Workshop、紙ランタンのワークショップ、リズムサークルと、Request received from: 10.71.0.10 を確認してください。

プログラムを保存し、ほかの経路を保つ

このステップでは遠隔リソースを保存し、ローカルと放送室への経路を保ちます。Area A から始めます。-o remote-programme.txt は受信したバイトをこのターミナルのディレクトリに保存します。cat は保存したファイルを読みます。

curl --noproxy '*' -fsS --max-time 3 -o remote-programme.txt http://10.72.0.10:8080/programme.txt
cat remote-programme.txt

保護対象の放送室への経路も確認します。

curl --noproxy '*' -fsS --max-time 3 http://10.73.0.10:8080/programme.txt

Area Plan のホームに戻り、Workshop の Request from Area A を選びます。同じプログラムと元の送信元アドレスを読んでください。ブラウザーの戻るボタンを使い、Main Stage と Broadcast Room も再び要求します。開いた経路表には、元のデフォルトルートと直結ルートが残っている必要があります。

add が File exists を返した場合は、West Router で ip route を読みます。replace は指定したプレフィックスだけを追加または更新します。

ip route replace 10.72.0.0/24 via 172.22.0.2 dev transit

誤って 10.72.1.0/24 を追加した場合、この宛先には一致しません。ip route del 10.72.1.0/24 でその誤った項目だけを削除し、示された正しいルートを使ってください。ほかの入力ミスでも、表を読み、自分が余分に追加したプレフィックスだけを削除します。flush は使わないでください。アドレス、元のルート、リンク、サービスを保ちます。失敗した試行で完全なファイルが残らなかったら、同じダウンロードを繰り返します。ルートはこのセッション中の設定で、再起動後の永続化は対象外です。

修復後に両方のネイティブ経路表を開いた Area Plan

地図で二つの隣接する中継先を確認し、宛先行と維持されたデフォルトルートを比較してください。開いた表は、動作中のラボの本物のカーネル経路を示しています。

まとめ

実際の宛先照会と限定ルートで祭りのプログラムを届け、元のアドレスとほかの経路を保ちました。クライアントのゲートウェイは最初のホップにすぎず、各ルーターにその先へ進む有効な経路判断が必要です。