MPLS-VPN を設定してみた
MPLS-VPN について勉強したので、検証してみました。構成と確認した内容をまとめています。MPLS の解説はしていません。
構成
PE1, PE2, P1〜P4 で MPLS を設定しています。MPLS のための IGP として、 OSPF を使用しています。
PE1 と PE2 は CE (CE-A1, CE-A2, CE-B1, CE-B2, CE-C1, CE-C2) に対して MPLS-VPN を提供しています。PE の内部で VRF を分け、 MP-BGP を使用してルート情報をVRF ごとに交換しています。CE の Default Route として Static で PE のインターフェイスを指定しています。
設定
P (Provider) ルーター
- OSPF
- MPLS-LDP
PE (Provider Edge) ルーター
- OSPF
- MPLS-LDP
- MP-BGP
- VRF
CE (Customer Edge) ルーター
- static route として PE を指定
動作確認
MPLS
P1 から PE2 宛てのラベルスイッチングに必要な LFIB テーブルが、どのように作成されているのかを確認します。
LDP ネイバー。
Peer LDP Ident: 10.100.1.1:0; Local LDP Ident 10.100.2.1:0 TCP connection: 10.100.1.1.646 - 10.100.2.1.64888 State: Oper; Msgs sent/rcvd: 1862/1860; Downstream Up time: 1d02h LDP discovery sources: GigabitEthernet0/1, Src IP addr: 10.0.0.6 Addresses bound to peer LDP Ident: 10.0.0.6 10.100.1.1 Peer LDP Ident: 10.100.2.2:0; Local LDP Ident 10.100.2.1:0 TCP connection: 10.100.2.2.30717 - 10.100.2.1.646 State: Oper; Msgs sent/rcvd: 1857/1859; Downstream Up time: 1d02h LDP discovery sources: GigabitEthernet0/2, Src IP addr: 10.0.0.22 Addresses bound to peer LDP Ident: 10.0.0.22 10.0.0.41 10.100.2.2 Peer LDP Ident: 10.100.2.4:0; Local LDP Ident 10.100.2.1:0 TCP connection: 10.100.2.4.51117 - 10.100.2.1.646 State: Oper; Msgs sent/rcvd: 1857/1863; Downstream Up time: 1d02h LDP discovery sources: GigabitEthernet0/3, Src IP addr: 10.0.0.26 Addresses bound to peer LDP Ident: 10.0.0.26 10.0.0.50 10.100.2.4
PE1, P2, P4 と LDP ネイバーを確立していることがわかります。
LIB テーブル。
P1#show mpls ldp bindings 10.100.1.2 255.255.255.255 lib entry: 10.100.1.2/32, rev 16 local binding: label: 20 remote binding: lsr: 10.100.2.2:0, label: 21 remote binding: lsr: 10.100.1.1:0, label: 21 remote binding: lsr: 10.100.2.4:0, label: 21 P1#
ルーティングテーブル。
P1#show ip route --- snip --- O 10.100.1.2/32 [110/4] via 10.0.0.26, 04:23:25, GigabitEthernet0/3 [110/4] via 10.0.0.22, 1d03h, GigabitEthernet0/2 O 10.100.2.2/32 [110/2] via 10.0.0.22, 1d03h, GigabitEthernet0/2 O 10.100.2.4/32 [110/2] via 10.0.0.26, 1d03h, GigabitEthernet0/3 --- snip --- P1#
LFIB テーブル。
P1#show mpls forwarding-table 10.100.1.2 Local Outgoing Prefix Bytes Label Outgoing Next Hop Label Label or Tunnel Id Switched interface 20 21 10.100.1.2/32 207665 Gi0/2 10.0.0.22 21 10.100.1.2/32 40889 Gi0/3 10.0.0.26 P1#
LIB テーブルには、 PE2 へのエントリーが 3つ存在しています。ルーティングテーブルには PE2 へのルートして、このうち2つのルートが最短経路として存在しています。これより、LFIB テーブルにはルーティングテーブルに最短経路として存在しているルートが MPLS の Next Hop として登録されていることがわかります。
VPN(MP-BGP)
PE1 と PE2 で iBGP ピアが確立しています。VPNv4 Prefix を3つ受け取っていることがわかります。
PE1#show bgp all summary For address family: IPv4 Unicast BGP router identifier 10.100.1.1, local AS number 65001 BGP table version is 1, main routing table version 1 Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd 10.100.1.2 4 65001 1838 1838 1 0 0 1d03h 0 For address family: VPNv4 Unicast --- snip --- Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd 10.100.1.2 4 65001 1838 1838 11 0 0 1d03h 3 PE1#
受け取っている VPNv4 Prefix。
PE1#show ip bgp vpnv4 all 192.168.2.0 BGP routing table entry for 1:100:192.168.2.0/24, version 5 Paths: (1 available, best #1, table CustA) Not advertised to any peer Refresh Epoch 1 Local 10.100.1.2 (metric 5) (via default) from 10.100.1.2 (10.100.1.2) Origin incomplete, metric 0, localpref 100, valid, internal, best Extended Community: RT:10:100 mpls labels in/out nolabel/26 ! MPLS のラベル rx pathid: 0, tx pathid: 0x0 BGP routing table entry for 2:200:192.168.2.0/24, version 8 Paths: (1 available, best #1, table CustB) Not advertised to any peer Refresh Epoch 1 Local 10.100.1.2 (metric 5) (via default) from 10.100.1.2 (10.100.1.2) Origin incomplete, metric 0, localpref 100, valid, internal, best Extended Community: RT:20:200 mpls labels in/out nolabel/27 ! MPLS のラベル rx pathid: 0, tx pathid: 0x0 BGP routing table entry for 3:300:192.168.2.0/24, version 11 Paths: (1 available, best #1, table CustC) Not advertised to any peer Refresh Epoch 1 Local 10.100.1.2 (metric 5) (via default) from 10.100.1.2 (10.100.1.2) Origin incomplete, metric 0, localpref 100, valid, internal, best Extended Community: RT:30:300 mpls labels in/out nolabel/28 ! MPLS のラベル rx pathid: 0, tx pathid: 0x0 PE1#
これより、PE2 から PE1 に対して送信されるパケットは VRF ごとに以下のラベルが付加されることがわかります。
- VRF: CustA 192.168.2.0/24 .... 26
- VRF: CustB 192.168.2.0/24 .... 27
- VRF: CustC 192.168.2.0/24 .... 28
パケットキャプチャ
実際にCE-A2(192.168.2.1) から CE-A1(192.168.1.1) に向かって ping を送信し、次のポイントでパケットキャプチャした結果を確認してみます。
P4 が PE1 へのパケットをラベルスイッチングする際は、ラベル 19が付加されることがわかります。
P4#show mpls forwarding-table 10.100.1.1 Local Outgoing Prefix Bytes Label Outgoing Next Hop Label Label or Tunnel Id Switched interface 19 19 10.100.1.1/32 51154 Gi0/1 10.0.0.25 P4#
実際にキャプチャした結果です。CE-A2 から CE-A1 への ICMP echo request がラベルスイッチングされています。
キャプチャをした結果、2つの MPLS ラベルが付加されていることがわかります。
- Outer Lable (19) : P4 が P1 へ転送する際に付加した ラベル。P1 が PE1 へ転送する際に付け替えられる。実際には PHP が動作しているため、P1ではラベルの付替えはせずに外される。
- Inner Labe (26) : VRF を区別するために PE2 が 付加したラベル。P1 はこのラベルに対して操作は行わない。