eBGPのNext Hop
Third-Party Next Hopについて語る前にまずは通常のeBGPのNext Hopについておさらいします。
eBGPでは経路情報を広報する時にNEXTHOPを自身のアドレスに書き換えます。
例えば以下ネットワークにおいて、AS1のルータはAS2のルータに対して、192.0.2.0/24のネットワークを広報する時にNEXTHOPを198.51.1.1に書き換えます。
つまり、AS2のルータのルーティングテーブルには192.0.2.0/24宛てのネクストホップは198.51.1.0となります。
Third-Party Next Hop
CMLで以下のようなLABを作成しました。
R1-R2、R1-R3でeBGP Peerを張り、R2-R3ではeBGP Peerを張りません。
先に記載した通り、eBGPで経路情報を広報する時はNEXTHOPを自身のアドレスに書き換えます。
その為、R2は1.1.1.1宛ての経路を100.0.0.1として学習しています。(R3も同様)
R2#sh ip bgp 1.1.1.1
BGP routing table entry for 1.1.1.1/32, version 3
Paths: (1 available, best #1, table default)
Not advertised to any peer
Refresh Epoch 1
65001
100.0.0.1 from 100.0.0.1 (1.1.1.1)
Origin IGP, metric 0, localpref 100, valid, external, best
rx pathid: 0, tx pathid: 0x0
R2#
では、R2がR3のループバックアドレス3.3.3.3を学習する時の挙動を考えます。
R2とR3はeBGP Peerではない為、R3→R1→R2の順に広報されます。
普通に考えれば、R1はR2にR3のループバックアドレスを広報する時に自身のアドレスに書き換える為、NEXTHOPは100.0.0.1となるはずです。
しかし、NEXTHOPは100.0.0.3になっています。学習元はR1だしAS Pathも65001を経由しているように見えるのにNEXTHOPだけがR3に向いています。
R2#sh ip bgp 3.3.3.3
BGP routing table entry for 3.3.3.3/32, version 4
Paths: (1 available, best #1, table default)
Not advertised to any peer
Refresh Epoch 1
65001 65003
100.0.0.3 from 100.0.0.1 (1.1.1.1)
Origin IGP, localpref 100, valid, external, best
rx pathid: 0, tx pathid: 0x0
R2#
このように他のASを経由した場合においても、同一セグメント内の経路広報であればNEXTHOPを書き換えないという仕様がThird-Party Next Hopです。
上記のようにハブアンドスポークでPeerを張った場合でもスポーク間で直接通信を行います。
しかし、BGPの経路広報はハブを経由する(他ASを経由している)点には注意が必要です。
例えば、R2で発出したMED値はR1からR3に経路広報される時にクリアされます。
参考