メインコンテンツへスキップ
  1. ネットワーク 記事一覧/
  2. BGP記事一覧/

MP-BGP(マルチプロトコル拡張)

目次

MP-BGPとは

BGPはもともとIPv4ユニキャストの経路だけを運ぶプロトコルでした。 MP-BGP(Multiprotocol Extensions for BGP-4、RFC 4760)は、 これをIPv6・VPN・L2VPNなどIPv4以外の経路情報にも使えるようにした拡張です。

仕組みは単純で、UPDATEメッセージに次の2つのパス属性を足しただけです。

属性Type code役割
MP_REACH_NLRI14「このアドレスファミリーの、この宛先へは、このネクストホップで行ける」
MP_UNREACH_NLRI15「このアドレスファミリーの、この宛先は取り消す」

どちらもOptional non-transitiveです。RFC 4760は、対応していないルータがこの属性を無視し、他へ渡さないようにわざとこの分類にしたと述べています。 メッセージの形式・状態遷移・ベストパス選択は変わらないので、1つのTCPセッション(ポート179)で複数のアドレスファミリーを同時に運べます

アドレスファミリー(AFI / SAFI)

運ぶ経路の種類は、AFI(Address Family Identifier、2バイト)とSAFI(Subsequent AFI、1バイト)の組で表します。 AFIがネットワーク層プロトコル、SAFIがその使い方です。

AFI / SAFI経路の種類使う場面
1 / 1IPv4 unicast通常のIPv4
2 / 1IPv6 unicast通常のIPv6
1 / 2、2 / 2IPv4 / IPv6 multicastマルチキャストのRPF用経路
1 / 4、2 / 4IPv4 / IPv6 labeled unicastラベル付きユニキャスト(RFC 8277
1 / 128、2 / 128VPNv4 / VPNv6MPLS L3VPN(RFC 4364
25 / 65、25 / 70VPLS、EVPNL2VPN
16388 / 71BGP-LSIGPのリンクステート情報

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属性の値のフォーマット

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属性の値のフォーマット

MP_UNREACH_NLRIはAFI / SAFIと取り消すプレフィックスだけです。 NLRIの符号化はどちらも<長さ(ビット), プレフィックス>の並びで、RFC 4271と同じです。

RFC 4760が定める規則をまとめます。

規則RFC 4760
MP_REACH_NLRIを運ぶUPDATEは、ORIGINAS_PATH必ず伴う。iBGPではLOCAL_PREF3(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の仕組み)で伝えます。

Multiprotocol Extensions Capabilityの値のフォーマット
規則内容
対応する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での設定

IPv4セッションでIPv4とIPv6の両方を運ぶ
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 out
IPv6ユニキャスト用に別セッションを張る
router 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 neighborsNeighbor capabilitiesにアドレスファミリーごとのadvertised / receivedが出る。show bgp ipv6 unicast summaryでは合意できなかったネイバーが(NoNeg)になる

実機での検証

XRd 26.1.1のルータ3台で確認します。

MP-BGPの検証トポロジ
  • AS 65001のR1とAS 65002のR2がeBGP、R2とR3がiBGP(Lo0同士、next-hop-self)。AS 65002内はOSPF(IPv6のLo0到達性は静的経路)
  • 各ルータはLo1の192.168.N.0/242001:db8:N::/64network文で広告する
  • STEP 0はIPv4セッションだけで、IPv6はSTEPを追って足していく。図は最終状態(IPv4とIPv6のセッションを別に張った形)
  • 出方向ポリシーはネイバーごとに別名(中身はpass)、全ネイバーにsoft-reconfiguration inbound always

各STEPの概要

STEP操作確認したこと結果主な根拠
0IPv4ユニキャストのみCapabilityの数、IPv4経路の運び方CapabilityはAFI 1 / SAFI 1の1つ。IPv4経路もMP_REACH_NLRIで届くR2 show bgp neighbors、pcap No.17・No.23
1IPv4セッションにIPv6ユニキャストを追加セッションの張り直し、IPv6経路のネクストホップAddress family activatedで切れて再確立。OPENにCapabilityが2つ。IPv6経路はリンクのグローバルIPv6 + リンクローカルをネクストホップに同じセッションで届くR1 syslog、pcap No.14・No.21
2R1のリンクからIPv6アドレスを外すネクストホップに使うアドレスが無い場合Idle (No global IPv6 address configured)。IPv4も含めてセッションが上がらないR1 show bgp neighbors
3IPv6セッションを別に張る(推奨構成)Next Hop長16 / 32の使い分け直結のeBGPは32(グローバル + リンクローカル)、iBGPは16 + LOCAL_PREFpcap No.47(R1-R2)・No.38(R2-R3)
4R2だけがIPv4セッションにIPv6を追加片側だけ広告したCapabilityIPv4だけでEstablished。R2にadvertisedのみ、summaryに(NoNeg)R2 show bgp neighbors、pcap No.10・No.16
5R2のIPv4セッションをIPv6のみに共通のアドレスファミリーが無い場合NOTIFICATION(OPEN Message Error / Unsupported Capability)を双方が送り、約30秒ごとに再試行pcap No.17
6R1のnetworkを外して戻す(最終状態)取り消しの形IPv6はMP_UNREACH_NLRI単独のUPDATE、IPv4はWithdrawn Routesフィールドpcap No.11・No.15

STEP 0:IPv4ユニキャストのみ

R2から見たR1とのセッションです。Neighbor capabilitiesAddress family IPv4 Unicastだけがあり、IPv6のBGPテーブルはまだ存在しません。

R2 show bgp neighbors(STEP 0)
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 received
R2 show bgp ipv6 unicast summary(STEP 0)
RP/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つだけです。

No.17 OPEN(R1 → R2)tshark -V
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)
上のtshark出力のパケット(No.17 OPEN)のpcapをダウンロード

続くUPDATE(No.23)では、IPv4の経路192.168.1.0/24MP_REACH_NLRI(AFI 1 / SAFI 1)に入っています。

No.23 UPDATE(R1 → R2)tshark -V
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.0
上のtshark出力のパケット(No.23 UPDATE)のpcapをダウンロード

STEP 1:IPv4セッションにIPv6ユニキャストを追加する

3台すべてでaddress-family ipv6 unicastを有効にし、既存のIPv4セッション(R1-R2、R2-R3)のネイバーにもaddress-family ipv6 unicastを足します。

R1(R2・R3も同様)
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 always

commitした瞬間にセッションが切れ、30秒ほどで再確立します。理由はsyslogにAddress family activatedと出ます。

R1 syslog(STEP 1)
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つ並びます。

No.14 OPEN(R1 → R2)tshark -V
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)
上のtshark出力のパケット(No.14 OPEN)のpcapをダウンロード

R2のshow bgp neighborsでも両方がadvertised and receivedになります。

R2 show bgp neighbors(STEP 1)
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 received

IPv6の経路はIPv4のTCPセッションの中を、IPv4とは別のUPDATE(No.21)で流れます。 Next Hopは R1のリンクのグローバルIPv6アドレス2001:db8:12::1と、そのリンクローカルアドレスの2つ(32バイト) です。 R1とR2が同じサブネットにいるので、RFC 2545 3のとおりリンクローカルが付きます。

No.21 UPDATE(R1 → R2、IPv6経路)tshark -V
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::
上のtshark出力のパケット(No.21 UPDATE)のpcapをダウンロード

R2のIPv6テーブルではネクストホップが2001:db8:12::1で、経路はベストパスになっています。R3へはnext-hop-selfによりR2のLo0のIPv6アドレス2001:db8::2で届きます。

R2 show bgp ipv6 unicast(STEP 1)
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 paths
R3 show bgp ipv6 unicast(STEP 1)
RP/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 paths

STEP 2:ネクストホップに使うIPv6アドレスが無いとき

R1のR2向きインタフェースからIPv6アドレスを外します(R2側はそのまま)。

R1
interface GigabitEthernet0/0/0/0
 no ipv6 address 2001:db8:12::1/64

R1はセッションを切り(Neighbor local address configuration changed)、その後はIPv4を含めてIdleのままです。理由はNo global IPv6 address configuredと表示されます。

R1 syslog(STEP 2)
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) 
R1 show bgp neighbors(STEP 2)
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の経路が消えています。

R2 show bgp ipv6 unicast(STEP 2)
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 paths

STEP 3:IPv6セッションを別に張る

R1のIPv6アドレスを戻したうえで、IPv4セッションからaddress-family ipv6 unicastを外し、IPv6のセッションを別に張ります(R1-R2はリンクのアドレス、R2-R3はLo0)。

R2
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 always

IPv4とIPv6でネイバーが分かれます。

R2 show bgp summary(STEP 3)
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          1
R2 show bgp ipv6 unicast summary(STEP 3)
RP/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          1

R1-R2間のキャプチャーです。IPv4セッション(10.1.2.x)とIPv6セッション(2001:db8:12::x)のOPEN・UPDATEが別々に流れています。

R1-R2間 パケットキャプチャー(STEP 3、tshark一覧)
    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 Message

IPv6セッションでR1が送ったUPDATE(No.47)のNext Hopは、STEP 1と同じくグローバル + リンクローカルの32バイトです。

No.47 UPDATE(R1 → R2、IPv6セッション)tshark -V
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::
上のtshark出力のパケット(No.47 UPDATE)のpcapをダウンロード

R2がR3へ送ったUPDATE(R2-R3間のキャプチャーのNo.38)はnext-hop-selfでネクストホップがR2のLo0に置き換わり、リンクローカルの無い16バイトです。 iBGPなのでLOCAL_PREFが付いています(RFC 4760 3のMUST)。

No.38 UPDATE(R2 → R3、IPv6セッション)tshark -V
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: 100
上のtshark出力のパケット(No.38 UPDATE)のpcapをダウンロード

R3のIPv6テーブルはSTEP 1と同じ内容になります。

R3 show bgp ipv6 unicast(STEP 3)
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 paths

STEP 4:片側だけがIPv6を広告する

R2だけが、R1とのIPv4セッションにaddress-family ipv6 unicastを足します。R1側は足しません。

R2
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 always

R2のOPEN(No.10)にはCapabilityが2つ、R1のOPEN(No.16)には1つです。

No.10 OPEN(R2 → R1)tshark -V
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)
上のtshark出力のパケット(No.10 OPEN)のpcapをダウンロード
No.16 OPEN(R1 → R2)tshark -V
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)
上のtshark出力のパケット(No.16 OPEN)のpcapをダウンロード

セッションはIPv4だけでEstablishedになります。R2ではIPv6がadvertisedのみ(receivedが無い)で、summaryは(NoNeg)です。IPv6の経路はSTEP 3で張ったIPv6セッションで流れ続けます。

R2 show bgp neighbors(STEP 4)
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: advertised
R2 show bgp ipv6 unicast summary(STEP 4)
RP/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          1

STEP 5:共通のアドレスファミリーが無い

STEP 4の状態から、R2のIPv4セッションのaddress-family ipv4 unicastも外します。R2はIPv6だけ、R1はIPv4だけを広告する形です。

R2
router bgp 65002
 neighbor 10.1.2.1
  no address-family ipv4 unicast

R2はCEASE(Address family removed)でセッションを切り、その後はOPENを交換するたびにNOTIFICATION(OPEN Message Error / Unsupported Capability) が返ってIdleに戻ります。 R2から接続してもR1から接続しても同じで、約30秒ごとに繰り返します。

R2 syslog(STEP 5)
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) 
R1-R2間 パケットキャプチャー(STEP 5、tshark一覧。OPENとNOTIFICATIONのみ)
    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 Message
No.17 NOTIFICATION(R1 → R2)tshark -V
Border 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)
上のtshark出力のパケット(No.17 NOTIFICATION)のpcapをダウンロード

長さ21バイトで、Dataフィールドは空です(RFC 5492 5は原因のCapabilityを入れるようMUSTで求めていますが、XRdは入れません)。 show bgp neighborsにはunsupported/disjoint capabilityとして送受信の両方が記録されます。

R2 show bgp neighbors(STEP 5、10.1.2.1の末尾)
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つとも外し、収束後に戻します。

R1
router bgp 65001
 address-family ipv4 unicast
  no network 192.168.1.0/24
 !
 address-family ipv6 unicast
  no network 2001:db8:1::/64

R1-R2間のキャプチャーです。IPv6の取り消し(No.11、IPv6セッション)とIPv4の取り消し(No.15、IPv4セッション)が別々のセッションで流れます。

R1-R2間 パケットキャプチャー(STEP 6、tshark一覧。UPDATEのみ)
   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 Message

IPv6の取り消しはMP_UNREACH_NLRIだけのUPDATEです。ほかのパス属性はありません(RFC 4760 4)。

No.11 UPDATE(R1 → R2、IPv6セッション)tshark -V
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)
上のtshark出力のパケット(No.11 UPDATE)のpcapをダウンロード

IPv4の取り消しはMP_UNREACH_NLRIではなく、UPDATE本体のWithdrawn Routesフィールドです。広告はMP_REACH_NLRIだったのに対し、取り消しは基本形を使っています。

No.15 UPDATE(R1 → R2、IPv4セッション)tshark -V
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)
上のtshark出力のパケット(No.15 UPDATE)のpcapをダウンロード

R3からR1の経路が消え、network文を戻すと復活します(最終状態)。

R3 show bgp ipv6 unicast(STEP 6、取り消し後)
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 paths
R3 show bgp ipv6 unicast(最終状態)
RP/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.txtshow 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/242001:db8:N::/64を広告している構成です。 show ospfv3 neighborは当初OSPFv3で検証していた名残で、途中から静的経路に置き換えたため何も返しません。

STEP 0:IPv4ユニキャストのみ

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun

STEP 1:IPv4セッションにIPv6ユニキャストを追加

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun

STEP 2:R1のリンクからIPv6アドレスを外す

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun

STEP 3:IPv6セッションを別に張る

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun

STEP 4:R2だけがIPv4セッションにIPv6を追加

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun

STEP 5:共通のアドレスファミリーが無い

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun

STEP 6:R1のnetworkを外した状態

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun

STEP 7:networkを戻した状態(最終状態)

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun

パケットキャプチャーはSTEPごとに取得しています(STEP 2・4・5はR1-R2間のみ)。

STEPR1-R2間R2-R3間
0pcappcap
1pcappcap
2pcap
3pcappcap
4pcap
5pcap
6pcappcap

参考

資料タイトル概要
RFC 4760Multiprotocol Extensions for BGP-4MP_REACH_NLRI(3)とMP_UNREACH_NLRI(4)、SAFI(6・9)、Capability(8)
RFC 5492Capabilities Advertisement with BGP-4OPENのOptional ParameterでCapabilityを交換する仕組みと、Unsupported Capability(5)
RFC 2545Use of BGP-4 Multiprotocol Extensions for IPv6 Inter-Domain RoutingIPv6のネクストホップ(グローバル + リンクローカル、長さ16 / 32)とトランスポートの独立性
RFC 8950Advertising IPv4 Network Layer Reachability Information (NLRI) with an IPv6 Next HopIPv4経路にIPv6ネクストホップを付けるExtended Next Hop Encoding Capability
IANA Address Family NumbersAddress Family NumbersAFIの値の一覧

関連記事