クイックダウンロード:
スプリットホライズンは、距離ベクトル型ルーティングプロトコルがルーティングループを生成するのを防ぐための基本的なルールです。
-
RIPやEIGRPのような距離ベクトルプロトコルは、スプリットホライズンを利用して、無限ループやブラックホールトラフィックを引き起こす循環プレフィックスアドバタイズメントをブロックします。
-
iBGPは独自のスプリットホライズン方式を採用しており、iBGPルーターが他のiBGPピアから学習したプレフィックスを転送しないように、フルメッシュ隣接関係を必要とします。
-
ハブアンドスポーク型トポロジー(フレームリレー、DMVPNフェーズ1)は重要な例外です。スポークが互いのネットワークを学習できるように、ハブインターフェースでスプリットホライズンを無効にする必要があります。
-
スポークサイト間の接続障害の原因不明なトラブルシューティングを行う前に、ハブアンドスポークセグメントにおけるスプリットホライズンの設定ミスがないか監査してください。
スプリットホライズン:チュートリアルと例
動的ルーティングプロトコルを実行するルーターは、ルーティングテーブル内のネットワーク宛先プレフィックスを隣接ルーターに通知します。これにより、ルーターはルーティングドメイン全体で見つかったプレフィックスをルーティングテーブルに追加することができます。
さらに、ルーターは学習したプレフィックスをアドバタイズします。 近隣のすべてのルーターへここに問題が生じる。対策を講じなければ、隣接ルーターからプレフィックスを受信したルーターがそれを再アドバタイズし、その隣接ルーターがさらにそれを再アドバタイズすることで、循環アドバタイズが発生する可能性がある。
適切な対策を講じないと、ルーターはこれらの循環広告を送信することで、ルーティングループや誤ったメトリック計算を引き起こす可能性があります。
スプリットホライズンがルーティングループに対処する方法
Split Horizonは、以下のロジックを適用することでこれらの問題を解決します。
ルータは、自身が最初にプレフィックスを学習したネイバーに対して、そのプレフィックスをアドバタイズしてはならない。
簡単に言うと、ルーターAがプレフィックス10.10.10.0/24を含むアドバタイズメントをルーターBに送信した場合、ルーターBはそのプレフィックスをルーターAに再アドバタイズしてはならない。
スプリットホライズンはどのような場面で使用されますか?
スプリットホライズンは、EIGRPやRIPなどの距離ベクトルルーティングプロトコルの中心的な部分です。また、内部の不可欠な部分でもあります。 BGP (iBGP)。これらのプロトコルすべてにおいて、スプリットホライズンの主な機能は、プレフィックスが最初にアドバタイズしたルータに再アドバタイズされることで発生するルーティングループを防ぐことです。
しかし、スプリットホライズンが望ましくない場合もあります。そのような場合は、動的ルーティングプロトコルの適切な動作のために、スプリットホライズンを無効にする必要があります。
距離ベクトルネットワークにおいて、スプリットホライズンが重要な理由
分割ホライズンの必要性を完全に理解するには、分割ホライズンがない場合に何が起こるかを考えてみましょう。以下のトポロジーは、この問題を例示しています。

初期ルーティングテーブルを含むトポロジー
ここでの説明はRIPの動作に非常によく似ていますが、EIGRPなどの他のプロトコルでも概念は同じです。
動的ルーティングプロトコルが動作する前は、ルーティングテーブルには直接接続されているネットワークのみが含まれており、それぞれのネットワークに到達するためのメトリックは0であることに注意してください。
下の図に示すように、これらのルーターには動的ルーティングプロトコルが設定されています。
R1は10.10.10.0/24ネットワークをR2に通知し、R2はこの新たに学習した情報をR3に通知します。

10.10.10.0/24ネットワークのアドバタイズ後のルーティングテーブルを含むトポロジー
このアドバタイズされたネットワークのルーティングテーブルにおけるメトリックの値がどのように増加しているかに注目してください。
スプリットホライズンがない場合、R3は10.10.10.0/24プレフィックスをR2にアドバタイズします。

R3は10.10.10.0/24ネットワークをR2に再アドバタイズする
R2 は R3 から 10.10.10.0/24 のこの更新を受信しますが、この特定の宛先へのメトリックは 3 であり、ルーティング テーブルに既にインストールされているメトリック (値は 1) よりも大きくなっています。このプレフィックスのメトリックは Fa0/0経由の方がFa0/1経由よりも優れているこのプレフィックスは、ルーティングテーブル内の既存のルートを置き換えません。
スプリットホライズンは無効になっていますが、循環アドバタイズメントによってルーティングの問題は発生していません。唯一の問題は、R3からR2へ不要なアップデートを送信するために消費される余分な帯域幅とルーターリソースです。余分な帯域幅と処理オーバーヘッドはわずかな非効率性ではありますが、ルーティング障害には至りません。
動的ルーティングプロトコルが完全に収束し、すべてのルータがネットワーク内のすべてのプレフィックスを学習したと仮定します。

ルーティングテーブルを備えた完全統合トポロジー
R3のFa0/1インターフェースが故障すると、ルーティングループの問題が明らかになる。

R3のFa0/1インターフェースが故障しました
R3はルーティングテーブルから20.20.20.0/24のエントリを自動的に削除します。ただし、動的ルーティングプロトコルは定期的に更新情報を送信します。R2が20.20.20.0/24ネットワークの更新情報をR3に送信すると、R3はそれを代替ルートとしてインストールします。

R2は20.20.20.0/24ネットワークをR3に再アドバタイズする
R3は、Fa0/0インターフェース経由で20.20.20.0/24への代替ルートを取得しました。一定時間後、R3はこのルートをR2に再通知します。

R3は20.20.20.0/24ネットワークをR2に再アドバタイズする
今回は、R2がルーティングテーブル内の以前のエントリを変更します。 指標を増やすことによって前回のシナリオでは、既にメトリックの低いエントリが存在していたためルーティングの更新が無視されましたが、今回は同じソース(R3)からのエントリであるため変更されます。
この傾向が続くと、R2とR3はルーティングアップデートを無限に交換し続け、結果としてメトリックの割り当てが際限なく増加します。この現象は「無限カウント」状況として知られています。
このやり取り中にR1から宛先が20.20.20.1のパケットが送信された場合、そのパケットはR2とR3の間でルーティングループに入ります。

R1が20.20.20.1にパケットを送信すると、R2とR3の間でルーティングループが発生する。
IPパケットがこのようなトポロジーを無期限に通過するのを防ぐためのメカニズムは存在する。例えば、IPヘッダーのTime To Live(TTL)フィールドや、動的ルーティングプロトコルによって適用される最大メトリックなどが挙げられる。しかし、これらはそもそもルーティングループの発生を防ぐものではない。
スプリットホライズンがこれらの問題をどのように解決するか
スプリットホライズンが有効になっている場合、ルータはプレフィックスを最初に受信したルータに再アドバタイズしません。スプリットホライズンが有効になっている場合、R3 の Fa0/1 インターフェイスに障害が発生すると、異なる結果が生じます。

R3のFa0/1インターフェースが故障しました
スプリットホライズンが有効になっている場合、R2 は R3 からプレフィックス 20.20.20.0/24 を最初に受信したため、R3 にプレフィックス 20.20.20.0/24 を含むアップデートを送信しません。R2 のルーティング テーブルでプレフィックス 20.20.20.0/24 に対応するインターフェースは Fa0/1 です。これは、R2 が R3 に接続されているインターフェースです。したがって、スプリットホライズン ルールをより正確に調整できます。
ルーターはプレフィックスを外部にアドバタイズしません 同じインターフェース そこからそれが学ばれた。
その結果、ルーティングループのない安定したルーティングトポロジーが実現します。20.20.20.1宛てのパケットが送信されると、R3はルーティングテーブルに一致するエントリがないため、そのパケットを破棄します。

R1は20.20.20.1にパケットを送信するが、そのパケットはR3に到達した時点で破棄される。
R1とR2のルーティングテーブルには20.20.20.0/24ネットワークがまだ登録されているため、パケットはR3に到達します。しかし、R3に到達した時点で、ルーティングテーブルにそのようなエントリが存在しないことから、パケットは破棄されます。
毒の逆転
R3からこのネットワークに関する追加情報が提供されない場合、使用されている動的ルーティングプロトコルの仕組みにより、R2とR1の20.20.20.0/24ネットワークのエントリは最終的に期限切れとなります。しかし、スプリットホライズンの関連機能であるポイズンリバースを使用すれば、この問題を解決できます。
ポイズンリバース機能により、R3が20.20.20.0/24ネットワークへの接続を失うとすぐにこれらのエントリが削除されます。R3のFa0/1インターフェースが故障すると、20.20.20.0/24ネットワークはルーティングテーブルから削除されます。同時に、R3は、このルートが利用できなくなったことを示すトリガー更新をネイバーに送信します。これは、このルートに到達できないことを示す最大(または無限)メトリック値を送信することによって行われます。

R3は20.20.20.0/24ネットワーク宛てのルートポイズンをR2とR1に送信しており、その結果、ルーティングテーブル内のその宛先へのメトリックが無限大になっている。
これにより、R1とR2は、このネットワークがR3経由では到達できなくなったことを即座に認識し、ルーティングテーブルからこれらのエントリを削除するためのタイムアウトが不要になります。
動的ルーティングプロトコルの分割ホライズン例
スプリットホライズンの動作は、RIP、EIGRP、BGPで若干異なります。
RIPを
上記の例は、RIPがスプリットホライズンを使用する方法に最も近いので、これ以上説明する必要はないでしょう。ただし、RIPを使用する場合、ほとんどのインターフェースタイプでスプリットホライズンがデフォルトで有効になっていることに注意することが重要です。
Ciscoルータでは、インターフェース設定モードでインターフェースごとにスプリットホライズンを設定します。
RIPが有効になっているCisco IOSデバイスでこれを無効にするには、目的のインターフェイスで次のコマンドを使用します。
Device(config-if)# no ip split-horizonEIGRP
拡張距離ベクトルルーティングプロトコルであるEIGRPは、デフォルトでスプリットホライズンを採用しています。EIGRPは、ループを防止するために、実現可能性条件などの追加機能を使用しますが、ここでは説明しません。EIGRPに参加しているインターフェイスでスプリットホライズンを無効にするには、次のコマンドを使用する必要があります。
Device(config-if)# no ip split-horizon 1BGP
BGPは距離ベクトル型ルーティングプロトコルではありませんが、内部BGPではスプリットホライズンを使用します。これは、距離ベクトル型ルーティングプロトコルで使用されるスプリットホライズンの実装とは若干異なります。iBGPのスプリットホライズンは次のように規定しています。
BGPルーターは、あるiBGPネイバーから別のiBGPネイバーへプレフィックスをアドバタイズしません。
スプリットホライズンルールがない場合、特定のAS内のBGPアップデートは次のようにアナウンスされる可能性があります。

スプリットホライズンルールなしのBGPアップデート
R1からR2に送信された最初のアップデートは、その後R3に送信され、再びR1に戻ります。R3はR1から直接アップデートを受信します。
したがって、R3がそのメッセージをR1に送信すると、R1は自身が発信したプレフィックスに関する更新情報を受け取り、ルーティングループが発生します。スプリットホライズンルールを使用すると、R2はR1から学習したiBGPプレフィックスをR3に転送しません(下図参照)。

iBGPアップデートにスプリットホライズンルールを適用
実際、このスプリットホライズンルールでは、iBGPルーターはiBGP経由で学習したプレフィックスを他のiBGPルーターに転送しないことが規定されています。このスプリットホライズンルールのため、すべてのiBGPルーターはAS内の他のすべてのiBGPルーターとネイバー関係を確立する必要があり、その結果、フルメッシュ隣接関係が構築されます。そうでない場合、iBGPアップデートは正常に送信されず、コンバージェンスも発生しません。
これはiBGPの組み込み機能であり、変更することはできません。
OSPFとeBGP:スプリットホライズンを使用しないルーティングプロトコル
OSPFはリンクステート型の動的ルーティングプロトコルであり、スプリットホライズンの概念は採用していません。距離ベクトル型プロトコルとは異なり、リンクステート型プロトコルはルータに完全なネットワークトポロジーを提供します。OSPFは最短経路優先(SPF)アルゴリズムを使用して、目的の宛先への最短経路ツリー(SPT)を作成します。SPTは定義上ループのない経路であるため、スプリットホライズンルールは不要です。
外部BGP(eBGP)は、ルータが自律システムを介して宛先へのパスを決定するために使用されます。eBGPはAS_PATH属性を使用してルーティングループを回避します。eBGPルータは、自身のAS番号がプレフィックスとして認識された場合、そのプレフィックスを受け入れません。したがって、eBGPは本質的にルーティングループを回避し、スプリットホライズンを不要にします。一方で、このチェックは実際にはスプリットホライズンのメカニズムに似ているとも言えます。
スプリットホライズンはどのような場合に無効にすべきでしょうか?
RIPおよびEIGRPには、管理者がスプリットホライズンを無効にするべきユースケースがいくつかあります。しかし、ルーティングループのリスクがあるため、管理者は必要な場合にのみスプリットホライズンを無効にするべきです。
スプリットホライズンを無効にすることが理にかなう状況としては、通常、ハブアンドスポーク型のネットワークトポロジーにおいて、スポーク間の通信が不可能な場合があり、その場合はスプリットホライズンを無効にする必要があるかもしれません。
下の図は、具体的な例を示しています。


ハブアンドスポーク型トポロジー
このトポロジーでは、通信はハブとスポーク1の間、およびハブとスポーク2の間でのみ行われます。 スポーク同士の直接的な通信は行われません。 Frame-Relay または DMVPN フェーズ 1 を実装する際に、このようなトポロジーが見られます。ここで重要なのは、ハブが両方のスポークと通信することです。 同じインターフェースを介して.
このようなシナリオでは、スプリットホライズンルールによって、スポーク同士が互いのネットワークを学習することが妨げられます。スポーク1からハブにアドバタイズされた10.10.10.0/24ネットワークは、ハブが学習したインターフェースと同じインターフェースからネットワークをアドバタイズしないため、スポーク2には再アドバタイズされません。これはスプリットホライズンルールに違反します。このような場合は、スプリットホライズンを無効にする必要があり、そうすることがベストプラクティスです。
結論
スプリットホライズンは、EIGRPやRIPといった距離ベクトル型プロトコル、そしてiBGPにとって不可欠な要素です。このルールがなければ、ルーティングループが発生し、これらのプロトコルは使用できなくなります。スプリットホライズンは、ポイズンリバースと組み合わせることで、ルーティングループを軽減し、トポロジー変更時のコンバージェンスを高速化します。
場合によっては、特定のトポロジーが正しく機能するように、管理者はスプリットホライズンを無効にする必要があるが、ルーティングループを避けるために慎重に行う必要がある。
スプリットホライズンの設定ミスがスポークサイトに影響を与える前に発見する。
LogicMonitorは、ハブアンドスポークネットワーク全体におけるルーティングの変更、プロトコルの健全性、およびパスの問題を明らかにするため、到達可能性の問題をより迅速にトラブルシューティングし、同様のインシデントの再発を防ぐことができます。
よくあるご質問
スプリットホライズンとポイズンリバースの違いは何ですか?
スプリットホライズンは、ルーターがプレフィックスを学習したネイバーにそのプレフィックスを再アドバタイズすることを防ぎます。ポイズンリバースはさらに一歩進んで、ルートが到達不能になった場合、ルーターはタイムアウトを待つのではなく、無限大のメトリックを含むアップデートを積極的に送信し、ネイバーにそのルートを直ちに削除するように指示します。
スプリットホライズンはOSPFにも適用されますか?
いいえ。OSPFはリンクステートプロトコルであり、すべてのルータにネットワークの完全なトポロジマップを提供します。最短経路優先アルゴリズムを使用してループのない経路を計算するため、スプリットホライズンルールは必要ありません。
分割ホライズンを無効にするべきタイミングはいつですか?
ハブルータが同じインターフェースを介して複数のスポークと通信するハブアンドスポークトポロジー(フレームリレーやDMVPNフェーズ1など)では、スプリットホライズンを無効にしてください。これを無効にしないと、スポークはハブを介して互いのネットワークを学習できません。
スプリットホライズンは到達可能性の問題を引き起こす可能性がありますか?
はい。ハブアンドスポークネットワークでは、スプリットホライズンが有効になっていると、スポークルータが他のスポークへのルートを学習できなくなる場合があります。スポークサイト間で原因不明の到達不能が発生している場合は、ハブのインターフェイスでスプリットホライズンが有効になっているかどうかを確認してください。




