MP-BGPとは
BGPはもともとIPv4ユニキャストの経路だけを運ぶプロトコルでした。 MP-BGP(Multiprotocol Extensions for BGP-4、RFC 4760)は、 これをIPv6・VPN・L2VPNなどIPv4以外の経路情報にも使えるようにした拡張です。
仕組みは単純で、UPDATEメッセージに次の2つのパス属性を足しただけです。
| 属性 | Type code | 役割 |
|---|---|---|
MP_REACH_NLRI | 14 | 「このアドレスファミリーの、この宛先へは、このネクストホップで行ける」 |
MP_UNREACH_NLRI | 15 | 「このアドレスファミリーの、この宛先は取り消す」 |
どちらもOptional non-transitiveです。RFC 4760は、対応していないルータがこの属性を無視し、他へ渡さないようにわざとこの分類にしたと述べています。 メッセージの形式・状態遷移・ベストパス選択は変わらないので、1つのTCPセッション(ポート179)で複数のアドレスファミリーを同時に運べます。
アドレスファミリー(AFI / SAFI)
運ぶ経路の種類は、AFI(Address Family Identifier、2バイト)とSAFI(Subsequent AFI、1バイト)の組で表します。 AFIがネットワーク層プロトコル、SAFIがその使い方です。
| AFI / SAFI | 経路の種類 | 使う場面 |
|---|---|---|
| 1 / 1 | IPv4 unicast | 通常のIPv4 |
| 2 / 1 | IPv6 unicast | 通常のIPv6 |
| 1 / 2、2 / 2 | IPv4 / IPv6 multicast | マルチキャストのRPF用経路 |
| 1 / 4、2 / 4 | IPv4 / IPv6 labeled unicast | ラベル付きユニキャスト(RFC 8277) |
| 1 / 128、2 / 128 | VPNv4 / VPNv6 | MPLS L3VPN(RFC 4364) |
| 25 / 65、25 / 70 | VPLS、EVPN | L2VPN |
| 16388 / 71 | BGP-LS | IGPのリンクステート情報 |
AFIの値はIANAのAddress Family Numbers、SAFIはRFC 4760が1(unicast)と2(multicast)を定義し、残りはIANAが管理しています。
アドレスファミリーごとにBGPテーブルとポリシーは別です。 IOS XRではaddress-familyブロックごとにnetwork文やroute-policyを書きます。
MP_REACH_NLRIとMP_UNREACH_NLRI
MP_REACH_NLRIは、ネクストホップと宛先プレフィックスをAFI / SAFIと一緒に1つの属性に入れたものです。
RFC 4271の基本形では、ネクストホップはNEXT_HOP属性(NEXT_HOP)、プレフィックスはUPDATE本体のNLRIフィールドでした。
それを属性の中に移した形で、Next Hopの長さは1バイトのフィールドで示すのでアドレスの種類を選びません(IPv4は4、IPv6は16または32)。
MP_UNREACH_NLRIはAFI / SAFIと取り消すプレフィックスだけです。
NLRIの符号化はどちらも<長さ(ビット), プレフィックス>の並びで、RFC 4271と同じです。
RFC 4760が定める規則をまとめます。
| 規則 | RFC 4760 |
|---|---|
MP_REACH_NLRIを運ぶUPDATEは、ORIGINとAS_PATHを必ず伴う。iBGPではLOCAL_PREFも | 3(MUST) |
MP_REACH_NLRI以外にNLRIが無いUPDATEはNEXT_HOP属性を含めるべきでない。含まれていても受信側は無視する | 3(SHOULD NOT / SHOULD) |
MP_UNREACH_NLRIだけのUPDATEは、他の属性を伴わなくてよい | 4 |
1つの属性に入れる<AFI, SAFI>は1組だけ | 11 |
| 属性が壊れていたら、そのAFI / SAFIの経路をすべて捨てる。セッションを切ってもよい(Optional Attribute Error) | 7 |
IOS XRはIPv4ユニキャストの経路もMP_REACH_NLRIで運びます(BGPメッセージ)。
一方、IPv4の取り消しはRFC 4271の基本形(UPDATE本体のWithdrawn Routesフィールド)を使います。
IPv6の取り消しはMP_UNREACH_NLRIです。
アドレスファミリーはOPENのCapabilityで合意する
どのアドレスファミリーを交換するかは、セッション確立時にOPENメッセージのMultiprotocol Extensions Capability(Capability code 1、RFC 5492の仕組み)で伝えます。
| 規則 | 内容 |
|---|---|
| 対応するAFI / SAFIの組ごとにCapabilityを1つ入れる | IPv4とIPv6を運ぶならCapabilityが2つ並ぶ |
| 両者が広告したAFI / SAFIだけ交換される(RFC 4760 8、MUST) | 片側だけが広告したアドレスファミリーは流れない。相手の知らないCapabilityは無視される(RFC 5492 3、MUST) |
| 共通のAFI / SAFIが1つも無ければ、ピアリングを続けられない | RFC 5492 3・5は、必要なCapabilityをピアが広告していないときNOTIFICATION(OPEN Message Error / Unsupported Capability、subcode 7)を送って切ってよい(MAY)としている。IOS XRはこれを送り、その後も接続を試み続ける |
| IOS XRはネイバーのアドレスファミリーを足す・外すとセッションを張り直す | Capabilityを交換し直すため。稼働中のセッションにアドレスファミリーを足すと一度切れる(syslogにAddress family activated) |
IPv6経路のネクストホップ(RFC 2545)
IPv6ユニキャスト(AFI 2 / SAFI 1)の運び方はRFC 2545が定めています。
IPv6にはリンクローカルアドレスがあるため、MP_REACH_NLRIのNext Hopが2通りになります。
| Next Hop長 | 中身 | 使う条件(RFC 2545 3) |
|---|---|---|
| 16 | グローバルアドレスだけ | それ以外のすべて。iBGPへ広告するときはリンクローカルを外してよい |
| 32 | グローバル + リンクローカル(fe80::/10) | 広告する側・ネクストホップ・広告先ピアが同じサブネットにいるときだけ。直結のeBGPが典型 |
もう1つ、TCPセッションをIPv4で張るかIPv6で張るかはBGPと無関係で、IPv4のセッションでIPv6経路を運ぶこともできます(RFC 2545 4)。
ただし、IPv4セッションからはIPv6のネクストホップが決まらないので、RFC 2545は「別途明示的な設定が要る」としています。
IOS XRは、ピアへ向かうインタフェース(update-sourceがあればそのインタフェース)のグローバルIPv6アドレスをネクストホップに使います。
そのインタフェースにグローバルIPv6アドレスが無いと、IPv4を含めてセッション自体を確立しません(Idle (No global IPv6 address configured))。
実運用では、IPv6ユニキャストはIPv6のセッションで運ぶのが一般的です。ネクストホップが自然に決まり、IPv6の到達性がセッション自体で確認できます(RFC 2545 4)。 逆向き(IPv6セッションでIPv4経路を運ぶ)には、IPv4経路にIPv6ネクストホップを付けるExtended Next Hop Encoding Capability(code 5、RFC 8950)があり、XRdは既定でこれを広告します。
IOS XRでの設定
router bgp 65002
address-family ipv4 unicast
network 192.168.2.0/24
!
address-family ipv6 unicast
network 2001:db8:2::/64
!
neighbor 10.1.2.1
remote-as 65001
address-family ipv4 unicast
route-policy PASS-ALL in
route-policy TO-R1-V4 out
!
address-family ipv6 unicast
route-policy PASS-ALL in
route-policy TO-R1-V6 outrouter bgp 65002
neighbor 2001:db8:12::1
remote-as 65001
address-family ipv6 unicast
route-policy PASS-ALL in
route-policy TO-R1-V6 out| 項目 | 内容 |
|---|---|
グローバルのaddress-family | そのアドレスファミリーを有効にし、network文を書く |
ネイバーのaddress-family | そのネイバーと交換するアドレスファミリー。書いた分だけCapabilityに入る |
show bgp ipv6 unicast … | IPv6のBGPテーブル・ネイバー・summaryはipv6 unicastを付けて見る(show bgpはIPv4) |
show bgp neighbors | Neighbor capabilitiesにアドレスファミリーごとのadvertised / receivedが出る。show bgp ipv6 unicast summaryでは合意できなかったネイバーが(NoNeg)になる |
実機での検証
XRd 26.1.1のルータ3台で確認します。
- AS 65001のR1とAS 65002のR2がeBGP、R2とR3がiBGP(Lo0同士、
next-hop-self)。AS 65002内はOSPF(IPv6のLo0到達性は静的経路) - 各ルータはLo1の
192.168.N.0/24と2001:db8:N::/64をnetwork文で広告する - STEP 0はIPv4セッションだけで、IPv6はSTEPを追って足していく。図は最終状態(IPv4とIPv6のセッションを別に張った形)
- 出方向ポリシーはネイバーごとに別名(中身は
pass)、全ネイバーにsoft-reconfiguration inbound always
各STEPの概要
| STEP | 操作 | 確認したこと | 結果 | 主な根拠 |
|---|---|---|---|---|
| 0 | IPv4ユニキャストのみ | Capabilityの数、IPv4経路の運び方 | CapabilityはAFI 1 / SAFI 1の1つ。IPv4経路もMP_REACH_NLRIで届く | R2 show bgp neighbors、pcap No.17・No.23 |
| 1 | IPv4セッションにIPv6ユニキャストを追加 | セッションの張り直し、IPv6経路のネクストホップ | Address family activatedで切れて再確立。OPENにCapabilityが2つ。IPv6経路はリンクのグローバルIPv6 + リンクローカルをネクストホップに同じセッションで届く | R1 syslog、pcap No.14・No.21 |
| 2 | R1のリンクからIPv6アドレスを外す | ネクストホップに使うアドレスが無い場合 | Idle (No global IPv6 address configured)。IPv4も含めてセッションが上がらない | R1 show bgp neighbors |
| 3 | IPv6セッションを別に張る(推奨構成) | Next Hop長16 / 32の使い分け | 直結のeBGPは32(グローバル + リンクローカル)、iBGPは16 + LOCAL_PREF | pcap No.47(R1-R2)・No.38(R2-R3) |
| 4 | R2だけがIPv4セッションにIPv6を追加 | 片側だけ広告したCapability | IPv4だけでEstablished。R2にadvertisedのみ、summaryに(NoNeg) | R2 show bgp neighbors、pcap No.10・No.16 |
| 5 | R2のIPv4セッションをIPv6のみに | 共通のアドレスファミリーが無い場合 | NOTIFICATION(OPEN Message Error / Unsupported Capability)を双方が送り、約30秒ごとに再試行 | pcap No.17 |
| 6 | R1のnetworkを外して戻す(最終状態) | 取り消しの形 | IPv6はMP_UNREACH_NLRI単独のUPDATE、IPv4はWithdrawn Routesフィールド | pcap No.11・No.15 |
STEP 0:IPv4ユニキャストのみ
R2から見たR1とのセッションです。Neighbor capabilitiesにAddress family IPv4 Unicastだけがあり、IPv6のBGPテーブルはまだ存在しません。
RP/0/RP0/CPU0:R2#show bgp neighbors
Wed Sep 9 23:06:27.258 UTC
<snip>
BGP neighbor is 10.1.2.1
Remote AS 65001, local AS 65002, external link
Description: eBGP to R1 (AS 65001) IPv4 session
Remote router ID 10.0.0.1
BGP state = Established, up for 00:01:28
<snip>
Neighbor capabilities:
Route refresh: advertised (old + new) and received (old + new)
4-byte AS: advertised and received
Address family IPv4 Unicast: advertised and receivedRP/0/RP0/CPU0:R2#show bgp ipv6 unicast summary
Wed Sep 9 23:06:26.652 UTC
% None of the requested address families are configured for instance 'default'(40600)R1が送ったOPEN(R1-R2間のキャプチャーのNo.17)です。Multiprotocol Extensions CapabilityはAFI: IPv4 / SAFI: Unicastの1つだけです。
Border Gateway Protocol - OPEN Message
Marker: ffffffffffffffffffffffffffffffff
Length: 75
Type: OPEN Message (1)
<snip>
Optional Parameters Length: 46
Optional Parameters
Optional Parameter: Capability
Parameter Type: Capability (2)
Parameter Length: 6
Capability: Multiprotocol extensions capability
Type: Multiprotocol extensions capability (1)
Length: 4
AFI: IPv4 (1)
Reserved: 00
SAFI: Unicast (1)続くUPDATE(No.23)では、IPv4の経路192.168.1.0/24がMP_REACH_NLRI(AFI 1 / SAFI 1)に入っています。
Border Gateway Protocol - UPDATE Message
Marker: ffffffffffffffffffffffffffffffff
Length: 60
Type: UPDATE Message (2)
<snip>
Path Attribute - MP_REACH_NLRI
Flags: 0x90, Optional, Extended-Length, Non-transitive, Complete
Type Code: MP_REACH_NLRI (14)
Length: 13
Address family identifier (AFI): IPv4 (1)
Subsequent address family identifier (SAFI): Unicast (1)
Next hop: 10.1.2.1
IPv4 Address: 10.1.2.1
Number of Subnetwork points of attachment (SNPA): 0
Network Layer Reachability Information (NLRI)
192.168.1.0/24
MP Reach NLRI prefix length: 24
MP Reach NLRI IPv4 prefix: 192.168.1.0STEP 1:IPv4セッションにIPv6ユニキャストを追加する
3台すべてでaddress-family ipv6 unicastを有効にし、既存のIPv4セッション(R1-R2、R2-R3)のネイバーにもaddress-family ipv6 unicastを足します。
router bgp 65001
address-family ipv6 unicast
network 2001:db8:1::/64
!
neighbor 10.1.2.2
address-family ipv6 unicast
route-policy PASS-ALL in
route-policy TO-R2-V6 out
soft-reconfiguration inbound alwayscommitした瞬間にセッションが切れ、30秒ほどで再確立します。理由はsyslogにAddress family activatedと出ます。
RP/0/RP0/CPU0:Sep 9 23:08:02.839 UTC: bgp[1084]: %ROUTING-BGP-5-ADJCHANGE : neighbor 10.1.2.2 Down - Address family activated (VRF: default) (AS: 65002)
RP/0/RP0/CPU0:Sep 9 23:08:34.336 UTC: bgp[1084]: %ROUTING-BGP-5-ADJCHANGE : neighbor 10.1.2.2 Up (VRF: default) (AS: 65002) 再確立後のOPEN(No.14)にはMultiprotocol Extensions Capabilityが2つ並びます。
Border Gateway Protocol - OPEN Message
Marker: ffffffffffffffffffffffffffffffff
Length: 83
Type: OPEN Message (1)
<snip>
Optional Parameters Length: 54
Optional Parameters
Optional Parameter: Capability
Parameter Type: Capability (2)
Parameter Length: 6
Capability: Multiprotocol extensions capability
Type: Multiprotocol extensions capability (1)
Length: 4
AFI: IPv4 (1)
Reserved: 00
SAFI: Unicast (1)
Optional Parameter: Capability
Parameter Type: Capability (2)
Parameter Length: 6
Capability: Multiprotocol extensions capability
Type: Multiprotocol extensions capability (1)
Length: 4
AFI: IPv6 (2)
Reserved: 00
SAFI: Unicast (1)
Optional Parameter: Capability
Parameter Type: Capability (2)
Parameter Length: 2
Capability: Route Refresh Capability (Cisco)R2のshow bgp neighborsでも両方がadvertised and receivedになります。
RP/0/RP0/CPU0:R2#show bgp neighbors
Wed Sep 9 23:11:36.482 UTC
<snip>
BGP neighbor is 10.1.2.1
Remote AS 65001, local AS 65002, external link
Description: eBGP to R1 (AS 65001) IPv4 session
Remote router ID 10.0.0.1
BGP state = Established, up for 00:03:02
<snip>
Neighbor capabilities:
Route refresh: advertised (old + new) and received (old + new)
4-byte AS: advertised and received
Address family IPv4 Unicast: advertised and received
Address family IPv6 Unicast: advertised and receivedIPv6の経路はIPv4のTCPセッションの中を、IPv4とは別のUPDATE(No.21)で流れます。
Next Hopは R1のリンクのグローバルIPv6アドレス2001:db8:12::1と、そのリンクローカルアドレスの2つ(32バイト) です。
R1とR2が同じサブネットにいるので、RFC 2545 3のとおりリンクローカルが付きます。
Border Gateway Protocol - UPDATE Message
Marker: ffffffffffffffffffffffffffffffff
Length: 93
Type: UPDATE Message (2)
<snip>
Path Attribute - MP_REACH_NLRI
Flags: 0x90, Optional, Extended-Length, Non-transitive, Complete
Type Code: MP_REACH_NLRI (14)
Length: 46
Address family identifier (AFI): IPv6 (2)
Subsequent address family identifier (SAFI): Unicast (1)
Next hop: IPv6=2001:db8:12::1 Link-local=fe80::5054:ff:fe10:5587
IPv6 Address: 2001:db8:12::1
Link-local Address: fe80::5054:ff:fe10:5587
Number of Subnetwork points of attachment (SNPA): 0
Network Layer Reachability Information (NLRI)
2001:db8:1::/64
MP Reach NLRI prefix length: 64
MP Reach NLRI IPv6 prefix: 2001:db8:1::R2のIPv6テーブルではネクストホップが2001:db8:12::1で、経路はベストパスになっています。R3へはnext-hop-selfによりR2のLo0のIPv6アドレス2001:db8::2で届きます。
RP/0/RP0/CPU0:R2#show bgp ipv6 unicast
Wed Sep 9 23:11:36.283 UTC
BGP router identifier 10.0.0.2, local AS number 65002
BGP generic scan interval 60 secs
Non-stop routing is enabled
BGP table state: Active
Table ID: 0xe0800000 RD version: 4
BGP main routing table version 4
BGP NSR Initial initsync version 4 (Not Reached)
BGP NSR/ISSU Sync-Group versions 0/0
BGP scan interval 60 secs
Status codes: s suppressed, d damped, h history, * valid, > best
i - internal, r RIB-failure, S stale, N Nexthop-discard
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
*> 2001:db8:1::/64 2001:db8:12::1 0 0 65001 i
*> 2001:db8:2::/64 :: 0 32768 i
*>i2001:db8:3::/64 2001:db8::3 0 100 0 i
Processed 3 prefixes, 3 pathsRP/0/RP0/CPU0:R3#show bgp ipv6 unicast
Wed Sep 9 23:12:02.387 UTC
BGP router identifier 10.0.0.3, local AS number 65002
BGP generic scan interval 60 secs
Non-stop routing is enabled
BGP table state: Active
Table ID: 0xe0800000 RD version: 4
BGP main routing table version 4
BGP NSR Initial initsync version 2 (Reached)
BGP NSR/ISSU Sync-Group versions 0/0
BGP scan interval 60 secs
Status codes: s suppressed, d damped, h history, * valid, > best
i - internal, r RIB-failure, S stale, N Nexthop-discard
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
*>i2001:db8:1::/64 2001:db8::2 0 100 0 65001 i
*>i2001:db8:2::/64 2001:db8::2 0 100 0 i
*> 2001:db8:3::/64 :: 0 32768 i
Processed 3 prefixes, 3 pathsSTEP 2:ネクストホップに使うIPv6アドレスが無いとき
R1のR2向きインタフェースからIPv6アドレスを外します(R2側はそのまま)。
interface GigabitEthernet0/0/0/0
no ipv6 address 2001:db8:12::1/64R1はセッションを切り(Neighbor local address configuration changed)、その後はIPv4を含めてIdleのままです。理由はNo global IPv6 address configuredと表示されます。
RP/0/RP0/CPU0:Sep 9 23:17:20.604 UTC: bgp[1084]: %ROUTING-BGP-5-ADJCHANGE : neighbor 10.1.2.2 Down - Neighbor local address configuration changed (VRF: default) (AS: 65002) RP/0/RP0/CPU0:R1#show bgp neighbors
Wed Sep 9 23:19:36.002 UTC
<snip>
BGP neighbor is 10.1.2.2
Remote AS 65002, local AS 65001, external link
Description: eBGP to R2 (AS 65002) IPv4 session
Remote router ID 0.0.0.0
BGP state = Idle (No global IPv6 address configured)R2のIPv6テーブルからR1の経路が消えています。
RP/0/RP0/CPU0:R2#show bgp ipv6 unicast
Wed Sep 9 23:27:35.391 UTC
BGP router identifier 10.0.0.2, local AS number 65002
BGP generic scan interval 60 secs
Non-stop routing is enabled
BGP table state: Active
Table ID: 0xe0800000 RD version: 8
BGP main routing table version 8
BGP NSR Initial initsync version 7 (Not Reached)
BGP NSR/ISSU Sync-Group versions 0/0
BGP scan interval 60 secs
Status codes: s suppressed, d damped, h history, * valid, > best
i - internal, r RIB-failure, S stale, N Nexthop-discard
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
*> 2001:db8:2::/64 :: 0 32768 i
*>i2001:db8:3::/64 2001:db8::3 0 100 0 i
Processed 2 prefixes, 2 pathsSTEP 3:IPv6セッションを別に張る
R1のIPv6アドレスを戻したうえで、IPv4セッションからaddress-family ipv6 unicastを外し、IPv6のセッションを別に張ります(R1-R2はリンクのアドレス、R2-R3はLo0)。
router bgp 65002
neighbor 10.1.2.1
no address-family ipv6 unicast
!
neighbor 10.0.0.3
no address-family ipv6 unicast
!
neighbor 2001:db8:12::1
remote-as 65001
address-family ipv6 unicast
route-policy PASS-ALL in
route-policy TO-R1-V6 out
soft-reconfiguration inbound always
!
neighbor 2001:db8::3
remote-as 65002
update-source Loopback0
address-family ipv6 unicast
next-hop-self
route-policy TO-R3-V6 out
soft-reconfiguration inbound alwaysIPv4とIPv6でネイバーが分かれます。
RP/0/RP0/CPU0:R2#show bgp summary
Wed Sep 9 23:39:30.239 UTC
<snip>
Neighbor Spk AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down St/PfxRcd
10.0.0.3 0 65002 20 31 11 0 0 00:01:29 1
10.1.2.1 0 65001 9 36 11 0 0 00:01:21 1RP/0/RP0/CPU0:R2#show bgp ipv6 unicast summary
Wed Sep 9 23:39:30.554 UTC
<snip>
Neighbor Spk AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down St/PfxRcd
2001:db8::3 0 65002 5 7 13 0 0 00:01:26 1
2001:db8:12::1 0 65001 4 6 13 0 0 00:01:23 1R1-R2間のキャプチャーです。IPv4セッション(10.1.2.x)とIPv6セッション(2001:db8:12::x)のOPEN・UPDATEが別々に流れています。
4 0.006420 10.1.2.2 → 10.1.2.1 BGP 137 OPEN Message
9 35.336182 10.1.2.1 → 10.1.2.2 BGP 129 OPEN Message
12 37.365285 10.1.2.2 → 10.1.2.1 BGP 137 OPEN Message
15 37.404549 10.1.2.1 → 10.1.2.2 BGP 137 UPDATE Message, UPDATE Message
17 39.397120 10.1.2.2 → 10.1.2.1 BGP 190 UPDATE Message, UPDATE Message, UPDATE Message
19 42.888864 10.1.2.2 → 10.1.2.1 BGP 75 NOTIFICATION Message
27 71.762945 2001:db8:12::1 → 2001:db8:12::2 BGP 149 OPEN Message
32 73.548537 10.1.2.1 → 10.1.2.2 BGP 129 OPEN Message
35 73.768992 2001:db8:12::2 → 2001:db8:12::1 BGP 168 OPEN Message, KEEPALIVE Message
40 75.553940 10.1.2.2 → 10.1.2.1 BGP 129 OPEN Message
43 75.595623 10.1.2.1 → 10.1.2.2 BGP 137 UPDATE Message, UPDATE Message
44 75.598462 10.1.2.2 → 10.1.2.1 BGP 190 UPDATE Message, UPDATE Message, UPDATE Message
45 75.800483 2001:db8:12::2 → 2001:db8:12::1 BGP 282 UPDATE Message, UPDATE Message, UPDATE Message
47 75.802339 2001:db8:12::1 → 2001:db8:12::2 BGP 167 UPDATE MessageIPv6セッションでR1が送ったUPDATE(No.47)のNext Hopは、STEP 1と同じくグローバル + リンクローカルの32バイトです。
Border Gateway Protocol - UPDATE Message
Marker: ffffffffffffffffffffffffffffffff
Length: 93
Type: UPDATE Message (2)
<snip>
Path Attribute - MP_REACH_NLRI
Flags: 0x90, Optional, Extended-Length, Non-transitive, Complete
Type Code: MP_REACH_NLRI (14)
Length: 46
Address family identifier (AFI): IPv6 (2)
Subsequent address family identifier (SAFI): Unicast (1)
Next hop: IPv6=2001:db8:12::1 Link-local=fe80::5054:ff:fe10:5587
IPv6 Address: 2001:db8:12::1
Link-local Address: fe80::5054:ff:fe10:5587
Number of Subnetwork points of attachment (SNPA): 0
Network Layer Reachability Information (NLRI)
2001:db8:1::/64
MP Reach NLRI prefix length: 64
MP Reach NLRI IPv6 prefix: 2001:db8:1::R2がR3へ送ったUPDATE(R2-R3間のキャプチャーのNo.38)はnext-hop-selfでネクストホップがR2のLo0に置き換わり、リンクローカルの無い16バイトです。
iBGPなのでLOCAL_PREFが付いています(RFC 4760 3のMUST)。
Border Gateway Protocol - UPDATE Message
Marker: ffffffffffffffffffffffffffffffff
Length: 84
Type: UPDATE Message (2)
<snip>
Path Attribute - MP_REACH_NLRI
Flags: 0x90, Optional, Extended-Length, Non-transitive, Complete
Type Code: MP_REACH_NLRI (14)
Length: 30
Address family identifier (AFI): IPv6 (2)
Subsequent address family identifier (SAFI): Unicast (1)
Next hop: 2001:db8::2
IPv6 Address: 2001:db8::2
Number of Subnetwork points of attachment (SNPA): 0
Network Layer Reachability Information (NLRI)
2001:db8:1::/64
MP Reach NLRI prefix length: 64
MP Reach NLRI IPv6 prefix: 2001:db8:1::
Path Attribute - ORIGIN: IGP
Flags: 0x40, Transitive, Well-known, Complete
Type Code: ORIGIN (1)
Length: 1
Origin: IGP (0)
Path Attribute - AS_PATH: 65001
Flags: 0x40, Transitive, Well-known, Complete
Type Code: AS_PATH (2)
Length: 6
AS Path segment: 65001
Segment type: AS_SEQUENCE (2)
Segment length (number of ASN): 1
AS4: 65001
Path Attribute - MULTI_EXIT_DISC: 0
Flags: 0x80, Optional, Non-transitive, Complete
Type Code: MULTI_EXIT_DISC (4)
Length: 4
Multiple exit discriminator: 0
Path Attribute - LOCAL_PREF: 100
Flags: 0x40, Transitive, Well-known, Complete
Type Code: LOCAL_PREF (5)
Length: 4
Local preference: 100R3のIPv6テーブルはSTEP 1と同じ内容になります。
RP/0/RP0/CPU0:R3#show bgp ipv6 unicast
Wed Sep 9 23:39:55.962 UTC
BGP router identifier 10.0.0.3, local AS number 65002
BGP generic scan interval 60 secs
Non-stop routing is enabled
BGP table state: Active
Table ID: 0xe0800000 RD version: 11
BGP main routing table version 11
BGP NSR Initial initsync version 6 (Reached)
BGP NSR/ISSU Sync-Group versions 0/0
BGP scan interval 60 secs
Status codes: s suppressed, d damped, h history, * valid, > best
i - internal, r RIB-failure, S stale, N Nexthop-discard
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
*>i2001:db8:1::/64 2001:db8::2 0 100 0 65001 i
*>i2001:db8:2::/64 2001:db8::2 0 100 0 i
*> 2001:db8:3::/64 :: 0 32768 i
Processed 3 prefixes, 3 pathsSTEP 4:片側だけがIPv6を広告する
R2だけが、R1とのIPv4セッションにaddress-family ipv6 unicastを足します。R1側は足しません。
router bgp 65002
neighbor 10.1.2.1
address-family ipv6 unicast
route-policy PASS-ALL in
route-policy TO-R1-V6 out
soft-reconfiguration inbound alwaysR2のOPEN(No.10)にはCapabilityが2つ、R1のOPEN(No.16)には1つです。
Border Gateway Protocol - OPEN Message
Marker: ffffffffffffffffffffffffffffffff
Length: 83
Type: OPEN Message (1)
<snip>
Optional Parameters Length: 54
Optional Parameters
Optional Parameter: Capability
Parameter Type: Capability (2)
Parameter Length: 6
Capability: Multiprotocol extensions capability
Type: Multiprotocol extensions capability (1)
Length: 4
AFI: IPv4 (1)
Reserved: 00
SAFI: Unicast (1)
Optional Parameter: Capability
Parameter Type: Capability (2)
Parameter Length: 6
Capability: Multiprotocol extensions capability
Type: Multiprotocol extensions capability (1)
Length: 4
AFI: IPv6 (2)
Reserved: 00
SAFI: Unicast (1)
Optional Parameter: Capability
Parameter Type: Capability (2)
Parameter Length: 2
Capability: Route Refresh Capability (Cisco)Border Gateway Protocol - OPEN Message
Marker: ffffffffffffffffffffffffffffffff
Length: 75
Type: OPEN Message (1)
<snip>
Optional Parameters Length: 46
Optional Parameters
Optional Parameter: Capability
Parameter Type: Capability (2)
Parameter Length: 6
Capability: Multiprotocol extensions capability
Type: Multiprotocol extensions capability (1)
Length: 4
AFI: IPv4 (1)
Reserved: 00
SAFI: Unicast (1)
Optional Parameter: Capability
Parameter Type: Capability (2)
Parameter Length: 2
Capability: Route Refresh Capability (Cisco)セッションはIPv4だけでEstablishedになります。R2ではIPv6がadvertisedのみ(receivedが無い)で、summaryは(NoNeg)です。IPv6の経路はSTEP 3で張ったIPv6セッションで流れ続けます。
RP/0/RP0/CPU0:R2#show bgp neighbors
Wed Sep 9 23:54:35.420 UTC
<snip>
BGP neighbor is 10.1.2.1
Remote AS 65001, local AS 65002, external link
Description: eBGP to R1 (AS 65001) IPv4 session
Remote router ID 10.0.0.1
BGP state = Established, up for 00:01:49
<snip>
Neighbor capabilities:
Route refresh: advertised (old + new) and received (old + new)
4-byte AS: advertised and received
Address family IPv4 Unicast: advertised and received
Address family IPv6 Unicast: advertisedRP/0/RP0/CPU0:R2#show bgp ipv6 unicast summary
Wed Sep 9 23:54:34.763 UTC
<snip>
Neighbor Spk AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down St/PfxRcd
10.1.2.1 0 65001 11 13 0 0 0 00:01:48 (NoNeg)
2001:db8::3 0 65002 8 8 10 0 0 00:04:41 1
2001:db8:12::1 0 65001 7 8 10 0 0 00:04:41 1STEP 5:共通のアドレスファミリーが無い
STEP 4の状態から、R2のIPv4セッションのaddress-family ipv4 unicastも外します。R2はIPv6だけ、R1はIPv4だけを広告する形です。
router bgp 65002
neighbor 10.1.2.1
no address-family ipv4 unicastR2はCEASE(Address family removed)でセッションを切り、その後はOPENを交換するたびにNOTIFICATION(OPEN Message Error / Unsupported Capability) が返ってIdleに戻ります。
R2から接続してもR1から接続しても同じで、約30秒ごとに繰り返します。
RP/0/RP0/CPU0:Sep 10 00:04:22.675 UTC: bgp[1084]: %ROUTING-BGP-5-ADJCHANGE : neighbor 10.1.2.1 Down - Address family removed (CEASE notification sent - configuration change) (VRF: default) (AS: 65001) 1 0.000000 10.1.2.2 → 10.1.2.1 BGP 75 NOTIFICATION Message
14 39.940555 10.1.2.2 → 10.1.2.1 BGP 129 OPEN Message
17 41.946354 10.1.2.1 → 10.1.2.2 BGP 75 NOTIFICATION Message
25 71.616775 10.1.2.2 → 10.1.2.1 BGP 129 OPEN Message
29 73.625902 10.1.2.1 → 10.1.2.2 BGP 75 NOTIFICATION Message
42 115.729900 10.1.2.1 → 10.1.2.2 BGP 129 OPEN Message
45 117.736475 10.1.2.2 → 10.1.2.1 BGP 75 NOTIFICATION Message
55 142.971931 10.1.2.2 → 10.1.2.1 BGP 129 OPEN Message
58 144.977190 10.1.2.1 → 10.1.2.2 BGP 75 NOTIFICATION Message
70 186.209437 10.1.2.2 → 10.1.2.1 BGP 129 OPEN Message
73 188.214263 10.1.2.1 → 10.1.2.2 BGP 75 NOTIFICATION Message
85 214.364693 10.1.2.2 → 10.1.2.1 BGP 129 OPEN Message
88 216.420766 10.1.2.1 → 10.1.2.2 BGP 75 NOTIFICATION Message
97 247.328135 10.1.2.1 → 10.1.2.2 BGP 129 OPEN Message
100 249.388728 10.1.2.2 → 10.1.2.1 BGP 75 NOTIFICATION Message
113 279.768969 10.1.2.2 → 10.1.2.1 BGP 129 OPEN Message
116 281.775177 10.1.2.1 → 10.1.2.2 BGP 75 NOTIFICATION MessageBorder Gateway Protocol - NOTIFICATION Message
Marker: ffffffffffffffffffffffffffffffff
Length: 21
Type: NOTIFICATION Message (3)
Major error Code: OPEN Message Error (2)
Minor error Code (Open Message): Unsupported Capability (7)長さ21バイトで、Dataフィールドは空です(RFC 5492 5は原因のCapabilityを入れるようMUSTで求めていますが、XRdは入れません)。
show bgp neighborsにはunsupported/disjoint capabilityとして送受信の両方が記録されます。
RP/0/RP0/CPU0:R2#show bgp neighbors
Thu Sep 10 00:08:16.122 UTC
<snip>
Connections established 2; dropped 2
Local host: 10.1.2.2, Local port: 54254, IF Handle: 0x00000018
Foreign host: 10.1.2.1, Foreign port: 179
Last reset 00:00:17, due to BGP Notification received: unsupported/disjoint capability
Time since last notification sent to neighbor: 00:01:55
Error Code: unsupported/disjoint capability
Notification data sent:
None
Time since last notification received from neighbor: 00:00:17
Error Code: unsupported/disjoint capability
Notification data received:確認後、R2のIPv4セッションをSTEP 3の状態(IPv4のみ)に戻しました。
STEP 6:経路の取り消し(最終状態)
R1でnetwork文を2つとも外し、収束後に戻します。
router bgp 65001
address-family ipv4 unicast
no network 192.168.1.0/24
!
address-family ipv6 unicast
no network 2001:db8:1::/64R1-R2間のキャプチャーです。IPv6の取り消し(No.11、IPv6セッション)とIPv4の取り消し(No.15、IPv4セッション)が別々のセッションで流れます。
11 61.041671 2001:db8:12::1 → 2001:db8:12::2 BGP 132 UPDATE Message, KEEPALIVE Message
15 63.047004 10.1.2.1 → 10.1.2.2 BGP 100 UPDATE Message, KEEPALIVE MessageIPv6の取り消しはMP_UNREACH_NLRIだけのUPDATEです。ほかのパス属性はありません(RFC 4760 4)。
Border Gateway Protocol - UPDATE Message
Marker: ffffffffffffffffffffffffffffffff
Length: 39
Type: UPDATE Message (2)
Withdrawn Routes Length: 0
Total Path Attribute Length: 16
Path attributes
Path Attribute - MP_UNREACH_NLRI
Flags: 0x90, Optional, Extended-Length, Non-transitive, Complete
Type Code: MP_UNREACH_NLRI (15)
Length: 12
Address family identifier (AFI): IPv6 (2)
Subsequent address family identifier (SAFI): Unicast (1)
Withdrawn Routes
2001:db8:1::/64
MP Unreach NLRI prefix length: 64
MP Unreach NLRI IPv6 prefix: 2001:db8:1::
Border Gateway Protocol - KEEPALIVE Message
Marker: ffffffffffffffffffffffffffffffff
Length: 19
Type: KEEPALIVE Message (4)IPv4の取り消しはMP_UNREACH_NLRIではなく、UPDATE本体のWithdrawn Routesフィールドです。広告はMP_REACH_NLRIだったのに対し、取り消しは基本形を使っています。
Border Gateway Protocol - UPDATE Message
Marker: ffffffffffffffffffffffffffffffff
Length: 27
Type: UPDATE Message (2)
Withdrawn Routes Length: 4
Withdrawn Routes
192.168.1.0/24
Withdrawn route prefix length: 24
Withdrawn prefix: 192.168.1.0
Total Path Attribute Length: 0
Border Gateway Protocol - KEEPALIVE Message
Marker: ffffffffffffffffffffffffffffffff
Length: 19
Type: KEEPALIVE Message (4)R3からR1の経路が消え、network文を戻すと復活します(最終状態)。
RP/0/RP0/CPU0:R3#show bgp ipv6 unicast
Thu Sep 10 00:54:29.226 UTC
BGP router identifier 10.0.0.3, local AS number 65002
BGP generic scan interval 60 secs
Non-stop routing is enabled
BGP table state: Active
Table ID: 0xe0800000 RD version: 11
BGP main routing table version 11
BGP NSR Initial initsync version 6 (Reached)
BGP NSR/ISSU Sync-Group versions 0/0
BGP scan interval 60 secs
Status codes: s suppressed, d damped, h history, * valid, > best
i - internal, r RIB-failure, S stale, N Nexthop-discard
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
*>i2001:db8:2::/64 2001:db8::2 0 100 0 i
*> 2001:db8:3::/64 :: 0 32768 i
Processed 2 prefixes, 2 pathsRP/0/RP0/CPU0:R3#show bgp ipv6 unicast
Thu Sep 10 01:08:27.849 UTC
BGP router identifier 10.0.0.3, local AS number 65002
BGP generic scan interval 60 secs
Non-stop routing is enabled
BGP table state: Active
Table ID: 0xe0800000 RD version: 12
BGP main routing table version 12
BGP NSR Initial initsync version 6 (Reached)
BGP NSR/ISSU Sync-Group versions 0/0
BGP scan interval 60 secs
Status codes: s suppressed, d damped, h history, * valid, > best
i - internal, r RIB-failure, S stale, N Nexthop-discard
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
*>i2001:db8:1::/64 2001:db8::2 0 100 0 65001 i
*>i2001:db8:2::/64 2001:db8::2 0 100 0 i
*> 2001:db8:3::/64 :: 0 32768 i
Processed 3 prefixes, 3 paths検証のまとめ
- 1つのTCPセッションで複数のアドレスファミリーを運べる。アドレスファミリーごとにOPENのCapabilityが1つ、UPDATEは別々(STEP 0・1)
- 両者が広告したアドレスファミリーだけが交換される。片側だけならそのアドレスファミリーは流れず、共通が無ければNOTIFICATION(Unsupported Capability)で確立しない(STEP 4・5)
- アドレスファミリーの追加・削除でIOS XRはセッションを張り直す(STEP 1・4・5)
- IPv6のネクストホップは、直結のeBGPではグローバル + リンクローカルの32バイト、iBGPではグローバルだけの16バイト(STEP 1・3)
- IPv4セッションでIPv6経路を運ぶとき、IOS XRはピア向きインタフェースのグローバルIPv6アドレスをネクストホップにする。無ければセッション自体が上がらない(STEP 1・2)
- IPv6の取り消しは
MP_UNREACH_NLRI単独、IPv4の取り消しはWithdrawn Routesフィールド(STEP 6)
検証Configおよびshow結果
各STEPで3台すべてから、次の3種類をルータごとに分けて取得しています。検証Configはこの..._run.txtです(最終状態は最後のSTEPのもの)。
| ファイル | 内容 |
|---|---|
..._show.txt | show version / show interface description / show route / show route ipv6 / show ospf neighbor / show ospfv3 neighbor / show bgp summary / show bgp ipv6 unicast summary / show bgp / show bgp ipv6 unicast / show bgp neighbors / show bgp ipv6 unicast neighbors / show bgp <プレフィックス>(6本) / show bgp update-group / show bgp ipv6 unicast update-group / show bgp nexthops / show bgp ipv6 unicast nexthops / ピアごとのadvertised-routes / routes / received routes(IPv4・IPv6) / show rpl route-policy |
..._log.txt | そのSTEPの範囲だけに絞ったshow logging。各STEPの開始時にlogmsgでマーカーを入れ、その時刻をshow logging startに指定して取得したもの |
..._run.txt | そのSTEP時点のshow running-config(=そのSTEPの検証Config) |
最終状態(STEP 7)は、IPv4セッション(R1-R2はリンク、R2-R3はLo0)とIPv6セッション(同じく)を別に張り、各ルータが192.168.N.0/24と2001:db8:N::/64を広告している構成です。
show ospfv3 neighborは当初OSPFv3で検証していた名残で、途中から静的経路に置き換えたため何も返しません。
STEP 0:IPv4ユニキャストのみ
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
STEP 1:IPv4セッションにIPv6ユニキャストを追加
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
STEP 2:R1のリンクからIPv6アドレスを外す
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
STEP 3:IPv6セッションを別に張る
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
STEP 4:R2だけがIPv4セッションにIPv6を追加
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
STEP 5:共通のアドレスファミリーが無い
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
STEP 6:R1のnetworkを外した状態
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
STEP 7:networkを戻した状態(最終状態)
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
パケットキャプチャーはSTEPごとに取得しています(STEP 2・4・5はR1-R2間のみ)。
| STEP | R1-R2間 | R2-R3間 |
|---|---|---|
| 0 | pcap | pcap |
| 1 | pcap | pcap |
| 2 | pcap | — |
| 3 | pcap | pcap |
| 4 | pcap | — |
| 5 | pcap | — |
| 6 | pcap | pcap |
参考
| 資料 | タイトル | 概要 |
|---|---|---|
| RFC 4760 | Multiprotocol Extensions for BGP-4 | MP_REACH_NLRI(3)とMP_UNREACH_NLRI(4)、SAFI(6・9)、Capability(8) |
| RFC 5492 | Capabilities Advertisement with BGP-4 | OPENのOptional ParameterでCapabilityを交換する仕組みと、Unsupported Capability(5) |
| RFC 2545 | Use of BGP-4 Multiprotocol Extensions for IPv6 Inter-Domain Routing | IPv6のネクストホップ(グローバル + リンクローカル、長さ16 / 32)とトランスポートの独立性 |
| RFC 8950 | Advertising IPv4 Network Layer Reachability Information (NLRI) with an IPv6 Next Hop | IPv4経路にIPv6ネクストホップを付けるExtended Next Hop Encoding Capability |
| IANA Address Family Numbers | Address Family Numbers | AFIの値の一覧 |