MPLS-VPN を設定してみた

MPLS-VPN について勉強したので、検証してみました。構成と確認した内容をまとめています。MPLS の解説はしていません。

構成

f:id:naoki029:20190114154453p:plain

PE1, PE2, P1〜P4 で MPLS を設定しています。MPLS のための IGP として、 OSPF を使用しています。

f:id:naoki029:20190113223249p:plain
VPN

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 を送信し、次のポイントでパケットキャプチャした結果を確認してみます。

f:id:naoki029:20190113230722p:plain

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 がラベルスイッチングされています。 f:id:naoki029:20190113230959p:plain

キャプチャをした結果、2つの MPLS ラベルが付加されていることがわかります。

  • Outer Lable (19) : P4 が P1 へ転送する際に付加した ラベル。P1 が PE1 へ転送する際に付け替えられる。実際には PHP が動作しているため、P1ではラベルの付替えはせずに外される。
  • Inner Labe (26) : VRF を区別するために PE2 が 付加したラベル。P1 はこのラベルに対して操作は行わない。