ルーティングループ
同じ宛先へ向かうIPパケットが、ルータ間で循環して転送される状態である。経路の設定や経路情報の不整合によって発生し、宛先への到達を妨げるとともに回線やルータの処理能力を消費する。
イマシルちゃんの解説
ルータAが宛先へのパケットをBへ送り、Bも同じ宛先をAへ送る設定だったらどうなるかな。
配線はつながっていても、パケットは二台の間を行ったり来たりして、目的の相手へ進めないんだ。
このように、IPパケットがルータ間を回ってしまう状態をルーティングループというよ。
原因には設定の誤りだけでなく、経路情報を更新している途中の食い違いもあるの。
一つのパケットが永久に回り続けないための制限はあるけれど、それで経路の誤りまで直るわけではないよ。
同じ宛先について各ルータが誰へ渡すかを順に追うことが、原因を見つける手掛かりになるんだ。
この解説はわかりやすかったですか?
より深い解説
同じ宛先を各ルータで追う
通常のIP転送では、ルータは受信したパケットの宛先IPアドレスに基づいて、経路表から転送先を選ぶ。各装置が別々に判断するため、ある装置から次へ進んだ結果、以前に通った装置へ戻ることがある。この転送の循環が、ネットワーク層で生じるルーティングループである。
独自の例として、PCが203.0.113.80へ送信し、ルータAとBにはその宛先への具体的な経路がないとする。Aは未知の宛先をBへ、Bは未知の宛先をAへ送るように設定されている。
| 装置 | 選ばれる経路 | 転送先 |
|---|---|---|
| ルータA | 0.0.0.0/0 | ルータB |
| ルータB | 0.0.0.0/0 | ルータA |
0.0.0.0/0はデフォルトルートである。両装置ともそれより具体的な一致経路を持たないので、AからB、BからAへの転送を繰り返す。経路表に何か登録されていることや、隣のルータにpingで到達できることだけでは、最終宛先へ届くとは判断できない。
通常のIP転送では、各リンクの送出フレームに使うMACアドレスは変わっても、パケットの宛先IPアドレスは203.0.113.80のままである。ルータAのアドレスへ書き換わったためAへ戻るのではなく、同じ宛先に対してBがAを次ホップに選ぶことで戻る。
パケットの寿命と設定の修正を分ける
IPv4ではTTL、IPv6ではホップリミットによって、一つのパケットが転送され続けることを制限する。IPv4のルータは転送時にTTLを少なくとも1減らし、IPv6のルータはホップリミットを1減らす。転送に使える値がなくなるとパケットを破棄する。
例えばAが値4のIPv4パケットを受信し、各転送で1ずつ減らすとする。
| 処理する装置 | 受信した値 | 処理 |
|---|---|---|
| A | 4 | 3にしてBへ転送する |
| B | 3 | 2にしてAへ転送する |
| A | 2 | 1にしてBへ転送する |
| B | 1 | 0になるため破棄する |
この場合は、時間超過を示すICMPのTime Exceededが送信元へ返される。ただし、エラー通知の送信条件、通知を制限する設定、戻りの経路などによって受信できない場合もある。
注意:パケットの寿命を制限しても、誤った経路設定は修正されない。 新しいパケットが届けば、同じ転送が再び始まる。宛先への通信は失敗し、回線帯域や転送処理の能力を消費し続ける。寿命の値を大きくすることは対策にならない。
移行の途中で経路が食い違う
移行前に「Aは旧出口へ送り、BはAへ送る」という設定があり、移行後は「AはBへ送り、Bは新出口へ送る」構成にしたいとする。完成後の二つの設定だけを見れば、外部へ進む経路は成立する。
しかしAの転送先を先にBへ変えると、まだ旧設定のBはAへ戻す。この間は図と同じ関係になる。Bから新出口への転送を先に成立させ、その経路を確認してからAをBへ向けるなど、依存関係に沿った変更が必要である。実際の手順は戻りの経路と切戻し条件も含めて決める。
ループは静的ルーティングだけの問題ではない。動的ルーティングでも、障害や設定変更が全装置へ反映されるまで、古い経路を持つ装置と新しい経路を持つ装置が混在することがある。この情報の食い違いによって、一時的に転送が回り込む場合がある。経路情報と転送先が変更後の状態へ落ち着くことを収束という。
変化の途中だけ発生するのか、収束後も残るのかで調査する点は変わる。前者では更新の順序や反映時間を調べ、後者では採用された経路や広告方針を確認する。「しばらく待つ」だけで不適切な静的設定が直ることはない。
経路を受け渡す境界にも注意する
異なるルーティングプロトコル間で経路を受け渡す経路再配布では、別の境界を経由して元の経路が戻り、不適切な転送先として採用されることがある。受け渡す宛先の制限や、経路の識別に使うルートタグなどを用いて、元の側へ経路を戻さない方針を設計する。具体的な設定は経路再配布の記事で扱う。
また、複数の宛先を一つの範囲へまとめて広告する経路集約では、まとめた範囲の一部に実際の到達先がない場合がある。外側のルータは集約経路で内側へ送り、内側のルータは具体的な経路がないためデフォルトルートで外側へ戻す、という関係になり得る。
この場合は、集約した範囲に一致するが細かな経路に一致しないパケットを、集約元で破棄する設計が必要になる。これに使うNullルートと、より具体的な経路を優先するロンゲストマッチの関係は、それぞれの記事で説明している。全ての通信を捨てる経路を置けばよいという意味ではない。
レイヤ2のループと見分ける
同じ「ループ」でも、L2スイッチのフレーム転送によるものとは、参照する情報と対策が異なる。
| 観点 | ルーティングループ | レイヤ2のループ |
|---|---|---|
| 中心となる転送単位 | IPパケット | イーサネットフレーム |
| 転送の判断 | 経路表と宛先の照合 | MACアドレステーブルなど |
| 寿命の制限 | TTLなどを使う | フレーム自体には同等の項目がない |
| 主な対策 | 経路設定や経路広告を修正する | STPなどで転送経路を制御する |
冗長な配線があること自体は障害ではない。必要な代替経路を残しながら、実際の転送が戻り続けないように制御する。STPでL2の転送経路を制御しても、ルータの誤った静的経路は修正されない。
調査では、影響を受ける宛先IPアドレスを一つ選び、各ルータが採用している宛先範囲を表すプレフィックスと次ホップを順に追う。転送する先が以前に通った装置へ戻るなら、循環する区間を特定できる。
経路上の中継点を調べるtracerouteで同じアドレスが繰り返し現れれば、調査の手掛かりになる。ただし応答の欠落や複数経路の影響もあるので、表示だけで断定せず経路表と照合する。
参考資料
- RFC 1812 §4.2.2.9・§5.2:IPv4パケットの寿命と転送処理
- RFC 8200 §3:IPv6パケットの中継回数を制限するフィールド
- RFC 4632 §5.1:集約した範囲内で到達できない宛先の扱い
- Cisco:経路の受け渡しを制御し循環を防ぐ設定
- RFC 5715:障害や経路変更の途中に生じる転送の循環
実際の試験ではここに出る!全1問
ネットワークスペシャリスト
- 午後Ⅱ