Inter-AS with BGP-LU

年も明けたことだし何か新しいことをしようと思い、手に入れた初期config1を基にCML2で模擬環境を作り、L2VPNの問題に挑戦しました。 AS跨ぎのVPNだから...という先入観が邪魔してすんなりと理解できませんでした。頭をスパッと切り替えるトレーニングは何をすれば良いのだろうか。

1. TS Ticket 3: L2VPN

f:id:chimay_wh:20220108094839p:plain
f:id:chimay_wh:20220108094900p:plain
f:id:chimay_wh:20220108094919p:plain

2. Config

初期Config、最終Configは以下のリンク先に公開されています。予告なく見れなくなる可能性がありますので、2018年度のcisco-live資料と合わせてPDFファイルをダウンロードしておくことをおススメします。
★問題(練習問題と解答)
https://www.ciscolive.com/c/dam/r/ciscolive/emea/docs/2018/pdf/LTRCCIE-3401.pdf
★初期Config(旧試験のTSHOOT、DIAG、CONFIGモジュールのTopology config)
https://www.ciscolive.com/c/dam/r/ciscolive/emea/docs/2018/pdf/LTRCCIE-3401-LG.pdf

3. 解答へのアプローチ

3.1 Inter-AS Option B と仮定

問題をよく読むと全部は使わないようです。使用するノードだけに限定して考えることにします。
f:id:chimay_wh:20220108103204p:plain
考察対象が減ったので気分的にも少し楽になりました。Inter-AS Option Bを下地にしてPE15-PE24でL2VPNを使用していると仮定して見ることにしました。
f:id:chimay_wh:20220108103311p:plain
いきなりconfig見ても頭に入らないので問題から情報を収集します。
f:id:chimay_wh:20220108104524p:plain
① PE15におけるL2VPNの対向ルータのIPアドレスが10.1.0.24
→ PE24におけるL2VPNの対向ルータは、PE15でそのIPアドレスが10.1.0.15 と想像する。
② PE15におけるL2VPNの参加インターフェースは、Gi5.10である。
→ PE24におけるL2VPNの参加インターフェースは、Gi6.10でありVLAN10に所属している。と想像する。
③ L2VPNのVC ID(Virtual Circuit ID)は44である。
→ PE24のL2VPNのVC ID(Virtual Circuit ID)は44である。と想像する。
④ CE44 からping応答が欲しいCE46のIPアドレスは、10.4.4.46である。
→ CE46 からping応答が欲しいCE44のIPアドレスは、10.4.4.44である。と想像する。
f:id:chimay_wh:20220108104718p:plain
① Targeted Hello ということから、non-directly connected LDP である。
→ PE15のL2VPN対向ルータ(PE24)は、PE15と直接接続していない。と想像する。
② PE15におけるLDP Helloの送信元IPは、10.1.0.15である。
→ PE24におけるL2VPNの宛先IPアドレスは10.1.0.15(PE15)である。と想像する。
③ L2VPNのVLANは10である。
→ PE24のL2VPNはVLAN10に所属している。と想像する。
④ L2VPNのVC ID(Virtual Circuit ID)は44である。
→ PE24のL2VPNのVC ID(Virtual Circuit ID)は44である。と想像する。
⑤ PE15におけるL2VPNの対向ルータのIPアドレスが10.1.0.24
→ PE24におけるL2VPNの送信元は10.1.0.24である。と想像する。
f:id:chimay_wh:20220108105310p:plain
① PE15からの10.1.0.24のnext-hopは、10.0.0.16が知っている。
→ PE15のL2VPN宛先は、iBGP neighbor(PE16)が知っている。と想像する。
② metricが0であることから、defaultのMED=0である。
→ MEDの定義はないであろう。と想像する。
③ 1HOP先から受信したNLRIで、AS200のタグとMPLSラベルがついている。
→ AS100とAS200は直接接続しており、Inter-AS Option等によるラベル付与がある。と想像する。
④ 10.0.0.16は、10.0.0.17からnext-hopの情報を貰っています。
→ PE16は、RR17のroute-reflector-clientであろう。と想像する。
⑤ 10.0.0.16は、PE16のloopback0のアドレスである。
⑥ 10.0.0.17は、RR17のloopback0のアドレスである。
ここまでで収集した情報を整理しました。
f:id:chimay_wh:20220108110128p:plain
もう私の頭の中はInter-AS Option Bしか考えていません。いつの間にか仮定が脳内で確定にすり替わっており、後に理解の邪魔になりました。
最後CEFの内容を確認するとトラブルの原因が見えてきました。
f:id:chimay_wh:20220108110330p:plain
① PE16は、1hop先のAS200に10.1.0.24が存在することを知っているはずが、不明になっている。
→ ここがトラブルの元であろう!
AS200へのnext-hopの情報(IPv4アドレス、インターフェース、ラベル)が表示されるはず。
② local label 24008は、先ほどの情報と一致している。(CEFとRIB一致)
→ ローカルのラベル情報に関しては問題がないであろう。と想像する。
③ AS100内で付与するlabelは分かっている状況かもしれない。
→ AS100側の通信で使用するラベル情報に関しては問題ないかもしれない。と想像する。

とても役に立ったCCOがあります。
www.cisco.com
www.cisco.com なるほど、だからNHを追加するのかと納得しました。

最終Configを見ると何か妙な感じがする。(。´・ω・)ん?変なInter-AS Optionだな。完全に先入観が邪魔をしてきちんと理解できませんでした。
Configを読み解きながら、違和感の原因を探ることにしました。

3.2 論理構成

configを図に描き起こしてみました。
f:id:chimay_wh:20220108111508p:plain

3.3 もしかしてBGP-LUか?

先入観が邪魔して変なInter-AS Option B にしか見えなくなっていました。何故AS間でVPNV4使わないのだろうと思っていました。
コマンドの意味を再確認しました。

Address family configuration (config-router-af)オンラインヘルプ)

RR25(config)#router bgp 200
RR25(config-router)#address-family vpnv4
RR25(config-router-af)#neighbor 1.1.1.1 ?
  send-community               Send Community attribute to this neighbor

RR25(config-router-af)#neighbor 1.1.1.1 send-community ?
  both      Send Standard and Extended Community attributes
  extended  Send Extended Community attribute
  standard  Send Standard Community attribute
  <cr>      <cr>


L2VPNは、MPLS網(PE15~PE24)でラベル通信ができれば良く、L3VPNのように拡張コミュニティ2を伝搬する必要がないから、IPv4のラベル情報を基にルーティング出来るBGP-LU3でも良い。だからPE16,PE22,PE31はVPNV4を使わなくても良いのか。という結論で納得しました。

3.4 念のため確認

3.4.1 BGP-LU

IOS-XRとIOS-XRでは定義の仕方とコマンドが若干異なります。
IOS-XRの例(PE22)
neighbor x.x.x.x address-family ipv4 labeled-unicast

RP/0/0/CPU0:PE22(config)#router bgp 200
RP/0/0/CPU0:PE22(config-bgp)#neighbor 172.16.3.16
RP/0/0/CPU0:PE22(config-bgp-nbr)#address-family ipv4 ?
  flowspec         Address Family modifier
  labeled-unicast  Address Family modifier
  mdt              Address Family modifier
  multicast        Address Family modifier
  mvpn             Address Family modifier
  rt-filter        Address Family modifier
  sr-policy        Address Family modifier
  tunnel           Address Family modifier
  unicast          Address Family modifier
RP/0/0/CPU0:PE22(config-bgp-nbr)#address-family ipv4 labeled-unicast

IOS-XEの例(PE24)
neighbor x.x.x.x send-label

PE24(config)#router bgp 200
PE24(config-router)#address-family ipv4 ?
PE24(config-router-af)#neighbor 10.0.0.25 ?
 <snip>
  activate                Enable the Address Family for this Neighbor
  send-label              Send NLRI + MPLS Label to this peer
 <snip>

PE24(config-router-af)#neighbor 10.0.0.25 send-label
3.4.2 L2VPN(xconnect)

CEルータとPEルータでVLAN-IDが一致するようにします。また、対向ルータとP2PなIPを指定します。
① PEルータ xconnect 【宛先】【VC ID】 encapsulation mpls

PE15(config)#int g5.10
PE15(config-subif)#encapsulation dot1q 10
PE15(config-subif)#?
Interface configuration commands:
 <snip>
  xconnect           Xconnect commands

PE15(config-subif)#xconnect ?
  A.B.C.D  IP address of peer

PE15(config-subif)#xconnect 10.1.0.24 ?
  <1-4294967295>  Enter VC ID value

PE15(config-subif)#xconnect 10.1.0.24 44 ?
  encapsulation  Data encapsulation method
  pw-class       Pseudowire-class to use for encapsulation and protocol configuration

PE15(config-subif)#xconnect 10.1.0.24 44 encapsulation ?
  l2tpv3  Use L2TPv3 encapsulation
  mpls    Use MPLS encapsulation

PE15(config-subif)#xconnect 10.1.0.24 44 encapsulation mpls ?
  manual    Manually configure MPLS session parameters
  pw-class  Optional pseudowire-class to use for advanced configuration
  <cr>      <cr>

PE15(config-subif)#xconnect 10.1.0.24 44 encapsulation mpls 

CEルータから見れば、AS100やAS200は関係なくなります。イメージとしてはunnumberedみたいな感じになります。
f:id:chimay_wh:20220108113027p:plain
② CEルータ
CEルータ同士をP2Pで通信可能なIPに指定します。また、PEルータと同じVLAN-IDにします。

CE44
!
interface GigabitEthernet0/1.10
 encapsulation dot1Q 10
 ip address 10.4.4.44 255.255.255.0
end
CE45
!
interface GigabitEthernet0/1.10
 encapsulation dot1Q 10
 ip address 10.4.4.46 255.255.255.0
end

4. 解答

ASBRで互いにstaticルートを追加してnext-hopを解決する。というのが解答でした。
https://www.cisco.com/c/ja_jp/support/docs/ios-nx-os-software/ios-xr-software/217202-cisco-ios-xr-bgp-with-mpls-designs.html#anc1
CCOではInter-AS OptionB,Cについて書かれていますが、BGP-LUでも同じことが当てはまると思います。IPv4にラベルが紐付けられていますが、確かにnext-hopが分からない。パケットの気持ちになって考えると理解しやすいかと。
f:id:chimay_wh:20220108113411p:plain
今回は、BGP-LUによるInter-AS接続でしたが、Inter-AS接続におけるしくじり易い典型的なトラブル例と言えるのではないでしょうか。ASBR同士のStatic Routeがない!そう言えばInter-AS Optionの検証でハマった経験がありました。
static routeの追加によってASBR間のnext-hopが解決できたので、ラベル通信が出来るようになりました。
f:id:chimay_wh:20220108114247p:plain
CML2の模擬環境だと若干ラベルが異なりますが、CEFとLFIBが一致していることが分かります。
★AS100のASBR(PE16)
f:id:chimay_wh:20220108114601p:plain
★AS200のASBR(PE22)
f:id:chimay_wh:20220108114615p:plain
最後にend-to-endの確認をしてお終いです。
f:id:chimay_wh:20220108114731p:plain
CEルータ同士が大きなL2スイッチで接続しているようになります。途中の経路は見えません。これがL2VPNの特徴であると言えます。

CE44#ping 10.4.4.46    
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.4.4.46, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 8/9/10 ms
CE44#
CE44#traceroute 10.4.4.46
Type escape sequence to abort.
Tracing the route to 10.4.4.46
VRF info: (vrf in name/id, vrf out name/id)
  1 10.4.4.46 9 msec *  9 msec
CE44#

最終Configと途中の確認showコマンドはあるけれど解説がないので合っているか分かりませんが、BGP-LUを使ったAS間のラベル通信について理解が深まりました。
今度は、TS Ticket 4: L3VPNに挑戦します。

最後までお読みいただきありがとうございました!


  1. Cisco-Live(LTRCCIE-3401) 2018 CCIE SP Practice Lab における各モジュールのConfig

  2. VRF(Virtual Routing and Forwarding)で使用するRT(Route-Target)は拡張コミュニティの一つです。

  3. BGPではIPv4 / IPv6のprefixと共にMPLSで使用するLabelも扱うことが可能であり、この機能をBGP-LU(BGP Labeled Unicast)と呼びます。