Inter-AS Option C
いよいよInter-AS Option Cの構築。
Option Cに関しては最初configの意味することが全く理解できなかった。
理解するのにだいぶ時間がかかってしまった。といっても完全にはまだ理解できていないけど。
OptionCの特徴は以下の通り。
・ASBR間はeBGP IPv4 + Labels でend-endのLSPを構築
・VPNv4情報はルートリフレクター間で交換
Option Cは他のOptionと比べて最も拡張性が高い(VPNv4情報はRRに集約されるので)が、最もinvasaiveとのこと。対向MPLS網に対してRRやPEのアドレスを広告しなくてはならないため。
まずはIOSで挙動の確認。
構成は以下。
まずはASBRのconfigから理解する。
R3(ASBR)config
! interface Loopback0 ip address 3.3.3.3 255.255.255.255 ! interface Ethernet0/0 ip address 192.168.34.3 255.255.255.0 mpls bgp forwarding ! interface Ethernet0/1 ip address 192.168.23.3 255.255.255.0 mpls ip ! interface Ethernet0/2 no ip address shutdown ! interface Ethernet0/3 no ip address shutdown ! router ospf 1 redistribute bgp 1 subnets ※2 network 3.3.3.3 0.0.0.0 area 0 network 192.168.23.0 0.0.0.255 area 0 ! router bgp 1 bgp router-id 3.3.3.3 bgp log-neighbor-changes no bgp default ipv4-unicast neighbor 192.168.34.4 remote-as 2 ! address-family ipv4 network 2.2.2.2 mask 255.255.255.255 ※1 network 7.7.7.7 mask 255.255.255.255 ※1 neighbor 192.168.34.4 activate neighbor 192.168.34.4 send-label ※3 exit-address-family ! !
特徴的なところは赤文字にした。
MPLS-VPN Inter-AS Option Cを構築させるためには大きく2stepあり、
まずは、end-endでLSPを確立させること。
そしてPE間でVPNv4情報を交換させる。
ということでまずはLSP。
LSPを構築するすために必要なlo0アドレスを接続MPLS網に広告する。
※1のnetworkコンフィグでPEとRRのアドレスを広告する。ebgp peer相手のR4も同様のコンフィグとなるため、
R3はR5とRR8のlo0アドレスを受信し、それを※2のospfへのredistributeでR2はR5のアドレスを学習し、RR7はRR8のアドレスを学習する。
続いて※3のsend-labelだがこのコマンドはbgpでMPLS識別ラベルを送信することができる。
仮にこのコマンドがない状態だとR2のLFIBは以下の通り、R5に対するoutおラベル情報がない。
R3#show mpls forwarding-table
Local Outgoing Prefix Bytes Label Outgoing Next Hop
Label Label or Tunnel Id Switched interface
16 Pop Label 2.2.2.2/32 0 Et0/1 192.168.23.2
17 No Label 5.5.5.5/32 0 Et0/0 192.168.34.4
18 No Label 8.8.8.8/32 774 Et0/0 192.168.34.4
19 No Label 192.168.34.4/32 0 Et0/0 192.168.34.4
20 Pop Label 7.7.7.7/32 0 Et0/1 192.168.23.7
ASBR間でsend-labelを設定すると以下のようなBGPパケットをお互いに送信する。
PATH AttributeのMP_REACH_NLRI(14)を使用して、SAFI(4)のLabeled Unicast情報を伝える。
ここではR4から5.5.5.5/32のLabel Stackを21として受け取ったので、この時点でLFIBに反映される。
R3#sho mpls forwarding-table
Local Outgoing Prefix Bytes Label Outgoing Next Hop
Label Label or Tunnel Id Switched interface
16 Pop Label 2.2.2.2/32 0 Et0/1 192.168.23.2
17 21 5.5.5.5/32 0 Et0/0 192.168.34.4
18 20 8.8.8.8/32 0 Et0/0 192.168.34.4
19 Pop Label 192.168.34.4/32 0 Et0/0 192.168.34.4
これでLSPは完了。
続いてVPNv4周り。
Option CではRR同士でaddress-family vpnv4 unicastのebgp接続を行う。
RR7 config
interface Loopback0 ip address 7.7.7.7 255.255.255.255 ! interface Ethernet0/1 ip address 192.168.23.7 255.255.255.0 mpls ip ! router ospf 1 network 7.7.7.7 0.0.0.0 area 0 network 192.168.23.0 0.0.0.255 area 0 ! router bgp 1 bgp router-id 7.7.7.7 bgp log-neighbor-changes no bgp default ipv4-unicast neighbor 2.2.2.2 remote-as 1 neighbor 2.2.2.2 update-source Loopback0 neighbor 8.8.8.8 remote-as 2 neighbor 8.8.8.8 ebgp-multihop 255 neighbor 8.8.8.8 update-source Loopback0 ! address-family ipv4 exit-address-family ! address-family vpnv4 neighbor 2.2.2.2 activate neighbor 2.2.2.2 send-community extended neighbor 2.2.2.2 route-reflector-client neighbor 8.8.8.8 activate neighbor 8.8.8.8 send-community extended neighbor 8.8.8.8 next-hop-unchanged exit-address-family
ルートリフレクタはaddress-family vpnv4でPEと対抗RRとpeerを張る。
同MPLS網のPEルータはRRとpeerを張ることでVPNv4情報をRRに集約し、対向のRRに情報を広告する構成となっている。
対向RRとpeerを張るときはnext-hop-uncangedを設定する。
設定した場合は、以下のようにR6宛のnexthopはR5となるが、
R2#show bgp vpnv4 unicast all Network Next Hop Metric LocPrf Weight Path Route Distinguisher: 1:1 (default for vrf USER1) *> 1.1.1.1/32 192.168.12.1 0 0 3 i *>i 6.6.6.6/32 5.5.5.5 0 100 0 2 4 i
設定しない場合は、RR8がnexthopとなってしまい、ルートリフレクタを経由した通信となってしまう。
R2#show bgp vpnv4 unicast all Network Next Hop Metric LocPrf Weight Path Route Distinguisher: 1:1 (default for vrf USER1) *> 1.1.1.1/32 192.168.12.1 0 0 3 i *>i 6.6.6.6/32 8.8.8.8 0 100 0 2 4 i
tracerouteもこんな感じ
R1#traceroute 6.6.6.6 so 1.1.1.1 Type escape sequence to abort. Tracing the route to 6.6.6.6 VRF info: (vrf in name/id, vrf out name/id) 1 192.168.12.2 4 msec 1 msec 1 msec 2 192.168.23.3 [MPLS: Labels 18/19 Exp 0] 4 msec 2 msec 2 msec 3 192.168.34.4 [MPLS: Labels 20/19 Exp 0] 2 msec 3 msec 1 msec 4 192.168.45.8 [MPLS: Label 19 Exp 0] 2 msec 3 msec 3 msec 5 192.168.56.5 [MPLS: Label 21 Exp 0] 2 msec 3 msec 5 msec 6 192.168.56.6 2 msec 9 msec *
正しい設定の場合は以下の通りRR分のhop数が少ない。
R1#traceroute 6.6.6.6 so 1.1.1.1 Type escape sequence to abort. Tracing the route to 6.6.6.6 VRF info: (vrf in name/id, vrf out name/id) 1 192.168.12.2 0 msec 0 msec 1 msec 2 192.168.23.3 [MPLS: Labels 17/21 Exp 0] 3 msec 2 msec 2 msec 3 192.168.34.4 [MPLS: Labels 21/21 Exp 0] 1 msec 2 msec 2 msec 4 192.168.56.5 [MPLS: Label 21 Exp 0] 1 msec 2 msec 1 msec 5 192.168.56.6 3 msec 2 msec *
これでIOSでのInter-AS Option Cの確認は完了。
続いてXRでの確認。
構成は下図の通り。
本来ならIOSと同様に間にSWをかました構成で比較するのがベストだけど、
ちょっと面倒くさかったので、前回の構成のままで確認することに。
アドレス帯は修正した。
#XRの再起動時間が長すぎて再起動したくない。。
XR4(ASBR)のconfig
hostname XR4 interface Loopback0 ipv4 address 4.4.4.4 255.255.255.255 ! interface MgmtEth0/0/CPU0/0 shutdown ! interface GigabitEthernet0/0/0/0 ipv4 address 192.168.48.4 255.255.255.0 ! interface GigabitEthernet0/0/0/1 shutdown ! interface GigabitEthernet0/0/0/2 ipv4 address 192.168.34.4 255.255.255.0 ! route-policy pass pass end-policy ! router static address-family ipv4 unicast 192.168.48.8/32 GigabitEthernet0/0/0/0 ! ! router ospf 1 redistribute bgp 65200 area 0 interface Loopback0 ! interface GigabitEthernet0/0/0/2 ! ! ! router bgp 65200 bgp router-id 4.4.4.4 mpls activate interface GigabitEthernet0/0/0/0 ! address-family ipv4 unicast network 2.2.2.2/32 network 3.3.3.3/32 allocate-label all ! neighbor 192.168.48.8 remote-as 65300 address-family ipv4 labeled-unicast route-policy pass in route-policy pass out ! ! ! mpls ldp interface GigabitEthernet0/0/0/2 ! ! end
IOSと異なる点は赤文字となる。
IOSでのsend-labelにあたる部分は、address-family ipv4 labeled-unicast配下でpeerを張り、アドバタイズするprefixをallocate-labelで設定する形となる。
まだroute-policyが必須ということに慣れておらず、address-family ipv4 labeled-unicast配下に設定を忘れて、TSに無駄に時間をかけてしまった。
RR3のconfig
hostname RR3 interface Loopback0 ipv4 address 3.3.3.3 255.255.255.255 ! interface MgmtEth0/0/CPU0/0 shutdown ! interface GigabitEthernet0/0/0/0 ipv4 address 192.168.23.3 255.255.255.0 ! interface GigabitEthernet0/0/0/1 shutdown ! interface GigabitEthernet0/0/0/2 ipv4 address 192.168.34.3 255.255.255.0 ! route-policy pass pass end-policy ! router ospf 1 area 0 interface Loopback0 ! interface GigabitEthernet0/0/0/0 ! interface GigabitEthernet0/0/0/2 ! ! ! router bgp 65200 bgp router-id 3.3.3.3 address-family ipv4 unicast ! address-family vpnv4 unicast ! neighbor 2.2.2.2 remote-as 65200 update-source Loopback0 address-family vpnv4 unicast route-reflector-client ! ! neighbor 7.7.7.7 remote-as 65300 ebgp-multihop 255 update-source Loopback0 address-family vpnv4 unicast route-policy pass in route-policy pass out next-hop-unchanged ! ! ! mpls ldp interface GigabitEthernet0/0/0/0 ! interface GigabitEthernet0/0/0/2 ! ! end
こちらはほぼIOSと同等のconfig内容。
IOSが理解できていれば問題なく設定できる。
tracerouteはこんな感じ。
CSR1#traceroute 9.9.9.9 so 1.1.1.1 Type escape sequence to abort. Tracing the route to 9.9.9.9 VRF info: (vrf in name/id, vrf out name/id) 1 192.168.12.2 15 msec 5 msec 4 msec 2 192.168.23.3 [MPLS: Labels 24003/24005 Exp 0] 50 msec 46 msec 31 msec 3 192.168.34.4 [MPLS: Labels 24002/24005 Exp 0] 52 msec 38 msec 31 msec 4 192.168.48.8 [MPLS: Labels 24000/24005 Exp 0] 48 msec 35 msec 41 msec 5 192.168.78.7 [MPLS: Labels 24000/24005 Exp 0] 60 msec 33 msec 30 msec 6 192.168.67.6 [MPLS: Label 24005 Exp 0] 47 msec 30 msec 30 msec 7 192.168.69.9 38 msec 44 msec *
次回はInter-AS最終回 Option D(AB)。