「インターネットが落ちた」
ネットワークの障害の切り分けは、機器から外へ向かって一段階ずつ試し、接続が途切れる場所を見つけることです。あいまいな訴えを、直せる一つの故障に変えます。
月曜の朝、課長がヘルプデスクに電話します。インターネットが落ちたそうです。十分後、止まっていたのはプリンターが一台だけだとわかります。
腕のよい技術者は、当てずっぽうをしません。機器から外へ向かって、一段階ずつ試し、最初に失敗した段階で止まります。
今日は、その順番を学び、一段階を自分で壊して、見つけます。
このレッスンのゴール
メモ
一段階ずつ試して、接続が途切れる場所を見つけられる。
重要な言葉
| ことば | いみ |
|---|---|
| 症状 | 利用者から見て、うまくいかないこと |
| デフォルトルート | 他の経路に当たらないとき、機器が通信を送る道 |
| 到達不能 | そのネットワークへの経路が無いこと |
| タイムアウト | 時間内に返事が戻らないこと |
| 拒否 | 機器が答えて、ノーと言ったこと |
| traceroute | 道のりにあるルーターを順に並べる道具 |
学生が入力するセルは、このプレビューでは空白です。
一段階ずつ試す
接続には、いくつものものが順に必要です。アドレス、ゲートウェイへの道、経路、道のり、名前、開いたポートです。途中の段階の故障は、その先のすべてを隠します。
だから、この順に試します。最初に失敗した段階が見る場所で、その先は、まだ試す価値がありません。
例: 六つの段階
| 段階 | 問い | 命令 |
|---|---|---|
| 1 アドレス | この機器にアドレスはあるか | ip -br -4 addr |
| 2 ゲートウェイ | 自分のゲートウェイに届くか | ゲートウェイへのping |
| 3 経路 | 目的地への道を知っているか | ip route get |
| 4 道のり | パケットはどこで止まるか | traceroute -n |
| 5 名前 | 名前はアドレスになるか | dig、getent hosts |
| 6 ポート | ポートで答えるものはあるか | nc -zv、curl |
学生が入力するセルは、このプレビューでは空白です。
段階1: LAN機器のアドレスを読む
sudo ip netns exec lan ip -br -4 addrここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
段階2: ゲートウェイにpingする
sudo ip netns exec lan ping -c 1 -W 1 10.0.0.1ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
段階3: 経路を聞く
sudo ip netns exec lan ip route get 203.0.113.2ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
一段階を壊して、見つける
今度は、LAN機器のデフォルトルートを自分で消します。そのあと、段階を順に試して、どれが最初に失敗するか見ます。
この部分の最後の実行が、ルートを元に戻します。必ず最後まで行いましょう。
デフォルトルートを消す
sudo ip netns exec lan ip route del defaultここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
段階2をもう一度: ゲートウェイは答える
sudo ip netns exec lan ping -c 1 -W 1 10.0.0.1 | tail -n 2ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
段階3をもう一度: 外のサーバーを聞く
sudo ip netns exec lan ip route get 203.0.113.2ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
ウェブのリクエストは今どう言うか
sudo ip netns exec lan curl --noproxy '*' -sS -m 3 http://203.0.113.2:8000/; echo "curl exit code $?"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
デフォルトルートを戻す
sudo ip netns exec lan ip route add default via 10.0.0.1ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
失敗の言葉は、それぞれ違うことを言う
到達不能はすぐに出て、経路が無いという意味です。拒否は速く出て、機器が答えてノーと言ったという意味です。
タイムアウトはゆっくり出て、沈黙という意味です。dropか、道を見つけられない返事です。次の三つの実行が、あとの二つを示します。
拒否: 機器は答えた
sudo ip netns exec gw nc -zv -w 2 10.0.0.2 9999; echo "nc exit code $?"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
タイムアウト: LANに誰も答えない
sudo ip netns exec lan curl --noproxy '*' -sS -m 3 http://203.0.113.2:8000/; echo "curl exit code $?"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
段階4: パケットが止まる場所を見る
sudo ip netns exec lan traceroute -n -q 1 -w 1 -m 3 203.0.113.2ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
よくある間違い
注意
「pingが通れば、接続は問題ない」と考える人が多いのですが、pingが証明するのは一段階だけです。ウェブのリクエストには、戻りの経路、名前、開いたポートも必要です。ここでは、ゲートウェイはpingに答えますが、ウェブのリクエストはタイムアウトします。
例: 症状から次に見る場所へ
| 見えるもの | 意味 | 次に見る場所 |
|---|---|---|
| Network is unreachable、すぐ | そのネットワークへの経路が無い | ルーティング表とデフォルトルート |
| Could not resolve host | 名前がアドレスにならなかった | hostsファイルとDNSサーバー |
| Connection refused、速い | 機器は動いていて、待つものが無い | プログラム、そのポート、rejectのルール |
| Timed out、ゆっくり | 返事がまったく戻らない | dropのルール、または戻りの道 |
学生が入力するセルは、このプレビューでは空白です。
発展: 自分の順番
このレッスンの六つの段階を、自分の言葉で書き、それぞれに命令を一つずつ付けましょう。
次に、仕事や家で出会った故障を一つ選び、どの段階が最初にそれを見つけたかを言いましょう。そのページは取っておきます。自分用のチェックリストの始まりです。