TT Lab
はじめる
学ぶ 学習パス コース

ネットワークトラブルシューティング

到達性と経路の確認

TT Labで続きを見る

目標

インターフェースとルーティングを読み、pingの統計を解釈し、UDPモードのtracerouteとmtrを実行します。最後に、ICMPの到達性とTCPの到達性が別々の問いであることを、自分で証明します。

なぜ重要なのか

pingが証明するのは、IP層までだけです。その上のポートも、アプリケーションも、さらには大きなパケットが通れるかどうかも証明しません。逆に、pingの失敗がサーバーのダウンを意味するわけでもありません。多くの組織がICMP echoを遮断しています。このラボ環境はcapabilityが取り除かれているため、tracerouteのICMPモードとmtrの既定モードが動作しません。この制約自体がよい教材です。ある診断ツールは特権を要求するため、特権のない環境では代替モードを知っておく必要があります。

ステップ

  1. /root/reachディレクトリを作成し、インターフェースの1行サマリーを/root/reach/iface.txtに保存してください。loが含まれている必要があります。
  2. ルーティングテーブルを/root/reach/route.txtに保存してください。defaultで始まる行がある必要があります。
  3. 127.0.0.1に3回pingした出力全体を/root/reach/ping-loop.txtに保存してください。パケット損失が0%である必要があります。
  4. 自分自身のデフォルトインターフェースのIPに3回pingした出力を/root/reach/ping-self.txtに保存してください。損失が0%である必要があります。
  5. ステップ3の結果から、RTTのmin / avg / maxの3つの値だけを空白で区切って1行で/root/reach/rtt.txtに書いてください。
  6. 127.0.0.1に対してtracerouteを実行して出力を/root/reach/trace.txtに保存し、使用したモードを小文字で/root/reach/trace-mode.txtに1行(udp、icmp、tcpのいずれか)で書いてください。
  7. 127.0.0.1に対してmtrレポートを3サイクル実行して、/root/reach/mtr.txtに保存してください。Loss%ヘッダーが含まれている必要があります。
  8. /root/reach/summary.txtを次の3行で作成してください。各値は、実際に試した結果である必要があります。 icmp=<ok|fail> / tcp2222=<ok|fail> / tcp9999=<ok|fail> (ICMPは127.0.0.1に対して、TCPは127.0.0.1の該当ポートに対して判断します。)

参考

インターフェース一覧の確認

/root/reachディレクトリを作成し、インターフェースの1行サマリーを/root/reach/iface.txtに保存してください。loが含まれている必要があります。

ipコマンドには、1行サマリー形式(-br)があります。ループバックと実際のインターフェースの両方が見える必要があります。

ルーティングテーブルの確認

ルーティングテーブルを/root/reach/route.txtに保存してください。defaultで始まる行がある必要があります。

デフォルト経路は、defaultで始まる行です。ゲートウェイのアドレスはviaの後ろに来ます。

ループバックへのping

127.0.0.1に3回pingした出力全体を/root/reach/ping-loop.txtに保存してください。パケット損失が0%である必要があります。

-cで回数を決めると、統計サマリーが最後に出力されます。損失率はそのサマリー行にあります。

自分のIPへのping

自分自身のデフォルトインターフェースのIPに3回pingした出力を/root/reach/ping-self.txtに保存してください。損失が0%である必要があります。

ステップ1で確認したインターフェースのアドレスを使ってください。自分自身に向かうパケットも、損失がないはずです。

RTT統計を読む

ステップ3の結果から、RTTのmin / avg / maxの3つの値だけを空白で区切って1行で/root/reach/rtt.txtに書いてください。

統計の最後の行に、min/avg/max/mdevがスラッシュ区切りで出ます。前の3つの値だけを取り出せば十分です。

UDPモードのtraceroute

127.0.0.1に対してtracerouteを実行して出力を/root/reach/trace.txtに保存し、使用したモードを小文字で/root/reach/trace-mode.txtに1行(udp、icmp、tcpのいずれか)で書いてください。

この環境にはraw socketの権限がないため、ICMPモードが動作しません。tracerouteの既定のモードが何か、確認してみてください。

mtrレポート

127.0.0.1に対してmtrレポートを3サイクル実行して、/root/reach/mtr.txtに保存してください。Loss%ヘッダーが含まれている必要があります。

mtrも同じ理由でUDPモードが必要です。1回実行して終わるレポートモードと、回数指定オプションを一緒に使ってください。

ICMPとTCPの比較

/root/reach/summary.txtを次の3行で作成してください。各値は、実際に試した結果である必要があります。 icmp=<ok|fail> / tcp2222=<ok|fail> / tcp9999=<ok|fail> (ICMPは127.0.0.1に対して、TCPは127.0.0.1の該当ポートに対して判断します。)

sshdは2222で動いており、9999は誰もリッスンしていません。3つの結果がそれぞれ何を証明するのか、考えてみてください。