MPLS-VPN

NOTE

  • MPLS の大前提はIGP によるルーティングが解決されていること
    – R1 ~ R4 のLoopback 0で疎通が取れる
    – R3 とR4 のFa1/0は含まなくてよい
  • Pルータ(R1,R2)  :VRFを持たずにLabel転送がメイン
  • PEルータ(R3,R4):VRFを使いユーザルータと接続
  • CEルータ(R5,R6):ユーザルータ

 

 

Label Distribution Protocol (LDP)

  • R1 ~ R4 にルータID を設定する。
    – mpls ldp router-id
    – OSPF で疎通を取ったLoopback 0 をルータID にする
    – force をつけて強制的にするのが良い
    – 他に大きなアドレスのLoopback インタフェースがあってもルータID になる
  • P ルータ、PE ルータの物理インタフェースでLDP を有効にする。方法は2通り。
    – インタフェースレベルで指定( mpls ip (interface configuration) )
    – OSPF を使っていればルーティングプロセス内で指定( mpls ldp autoconfig )
    – CEとの接続インタフェースは不要
  • LDP がデフォルトなので mpls label protocol (interface configuration) 無しでも可だが覚えておくほうが良い。
  • mpls ip propagate-ttl は無くても問題無いが、使うケースは理解しておくこと
  • 224.0.0.2 (UDP 646) を宛先として検出を行う。検出後、自ルータID を送信元、相手ルータID を宛先としてTCP 646でTCP コネクション/LDP セッションの確立を行う。
  • show の確認は忘れずに
R1#show mpls interfaces
Interface              IP            Tunnel   BGP Static Operational
FastEthernet0/0        Yes (ldp)     No       No  No     Yes
FastEthernet1/0        Yes (ldp)     No       No  No     Yes
R1#
R1#show mpls ldp neighbor
    Peer LDP Ident: 10.0.0.2:0; Local LDP Ident 10.0.0.1:0
        TCP connection: 10.0.0.2.47307 - 10.0.0.1.646
        State: Oper; Msgs sent/rcvd: 13/13; Downstream
        Up time: 00:03:08
        LDP discovery sources:
          FastEthernet0/0, Src IP addr: 10.1.2.2
        Addresses bound to peer LDP Ident:
          10.1.2.2        10.2.4.2        10.0.0.2
    Peer LDP Ident: 10.0.0.3:0; Local LDP Ident 10.0.0.1:0
        TCP connection: 10.0.0.3.25326 - 10.0.0.1.646
        State: Oper; Msgs sent/rcvd: 13/14; Downstream
        Up time: 00:02:57
        LDP discovery sources:
          FastEthernet1/0, Src IP addr: 10.1.3.3
        Addresses bound to peer LDP Ident:
          10.1.3.3        172.16.35.3     10.0.0.3
R1#

 

網内転送ラベル

  • ここで生成されるラベルは網内転送ラベル。
    – MPLS のLabel は2種類あり、網内を転送するための網内転送ラベルとVPN を識別するためのVPN 識別ラベルがある
    – [参考] MPLS-VPN パケットの区別
  • 自身のIGP ルーティングエントリ毎に16~1048575のうち、小さい順にラベル値を自動で割り当てる。
    – connected なエントリにはimp-null という特別なラベル
  • ラベルはルータ上でユニークとなる(他ルータとは重複しても良い)。
    – 重複しても良いと言うか、16から順に割り当てるので重複するのが普通
  • 割り当てが終わると経路情報と一緒に隣接ルータに渡す
  • 同様に自分も隣接ルータから通知される
R1#show mpls ldp bindings local
  lib entry: 10.0.0.1/32, rev 2
        local binding:  label: imp-null
  lib entry: 10.0.0.2/32, rev 8
        local binding:  label: 16
  lib entry: 10.0.0.3/32, rev 12
        local binding:  label: 18
  lib entry: 10.0.0.4/32, rev 15
        local binding:  label: 19
  lib entry: 10.1.2.0/24, rev 4
        local binding:  label: imp-null
  lib entry: 10.1.3.0/24, rev 6
        local binding:  label: imp-null
  lib entry: 10.2.4.0/24, rev 10
        local binding:  label: 17
R1#

 

Label Information Base (LIB)

  • 自身で生成した網内転送ラベルと通知された網内転送ラベルを元にテーブルを作る
  • 例:10.0.0.1/32 の経路に対しては
    – 自分はimp-null と言うラベルを割り当てた
    – 隣接ルータ(10.0.0.2) からはラベル値16と通知された
    – 隣接ルータ(10.0.0.3) からはラベル値17と通知された
R1#show mpls ldp bindings
  lib entry: 10.0.0.1/32, rev 2
        local binding:  label: imp-null
        remote binding: lsr: 10.0.0.2:0, label: 16
        remote binding: lsr: 10.0.0.3:0, label: 17

!!! omit
R1#

 

  • 例:10.0.0.1/32 の経路に対しては
    – 自分はラベル値16を割り当てた
    – 隣接ルータ(10.0.0.1)からはimp-null と通知された
    – 隣接ルータ(10.0.0.4)からはラベル値18と通知された
R2#show mpls ldp bindings
  lib entry: 10.0.0.1/32, rev 8
        local binding:  label: 16
        remote binding: lsr: 10.0.0.1:0, label: imp-null
        remote binding: lsr: 10.0.0.4:0, label: 18

!!! omit
R2#

 

  • 例:10.0.0.1/32 の経路に対しては
    – 自分はラベル値17を割り当てた
    – 隣接ルータ(10.0.0.1)からはimp-null と通知された
R3#show mpls ldp bindings
  lib entry: 10.0.0.1/32, rev 10
        local binding:  label: 17
        remote binding: lsr: 10.0.0.1:0, label: imp-null

!!! omit
R3#

 

  • 例:10.0.0.1/32 の経路に対しては
    – 自分はラベル値18を割り当てた
    – 隣接ルータ(10.0.0.2)からはラベル値16と通知された
R4#show mpls ldp bindings
  lib entry: 10.0.0.1/32, rev 12
        local binding:  label: 18
        remote binding: lsr: 10.0.0.2:0, label: 16

!!! omit
R4#

 

Label Forwarding Information Base (LFIB)

  • LIB を元にLFIB を作成する
  • ラベルスイッチングのための転送テーブル
  • 自分が【Local Label】を受け取ったら、【Outgoing Label】を付けてNext Hopに送り出す
  • Pop labelの場合は「Pop Label」と言うラベルをつけるのではなく、ラベルを取り除く(=ラベルを付けずに送る)と言う意味になる
R1#show mpls forwarding-table
Local      Outgoing   Prefix           Bytes Label   Outgoing   Next Hop
Label      Label      or Tunnel Id     Switched      interface
16         Pop Label  10.0.0.2/32      0             Fa0/0      10.1.2.2
17         Pop Label  10.2.4.0/24      0             Fa0/0      10.1.2.2
18         Pop Label  10.0.0.3/32      0             Fa1/0      10.1.3.3
19         19         10.0.0.4/32      0             Fa0/0      10.1.2.2
R1#

 

Virtual Routing and Forwarding (VRF)

  • MPLS-VPN は複数のユーザで共用させることができ、各ユーザ毎にVRF を使う
  • Route Distinguisher ( rd )
    – VRF を使うことで他のVPNユーザとアドレス重複ができるが、ローカルルータの共通のテーブル(GRT, Global Routing Table)上では区別できなくなるので、Route Distinguisherを付与してユニークにする

 

 

 

  • Route Target ( route-target )
    – Export とImport がある。
    – VRF からGRT に経路を渡す時にExportの値を付与する
    – VRF がGRT から取り込みたい経路を指定するためにImport を付与する
    – Export とImport を同じ値にして、ユーザ毎に違う値にする
    複雑になるがExport とImport は一致させなくても問題は無い

 

 

 

VRF 作成は2通り

ip vrf (IPv4のみ)

ip vrf VPN-A
 rd 65000:100
 route-target export 65000:100
 route-target import 65000:100

vrf definition (IPv4/IPv6)

vrf definition VPN-A
 rd 65000:100
 route-target export 65000:100
 route-target import 65000:100
 !
 address-family ipv4
 exit-address-family

vrf definition の場合は address-family ipv4 を空打ちしておく

 

VRF をインタフェースに適用

対象となるインタフェースにVRF を適用する

  • ユーザを接続する部分なので、R3,R4のFa1/0に適用する
  • 設定済みのIPアドレスが一度削除されるので、事前にsh run int で表示させる癖をつけることをおすすめ(そのままコピペできるので)
  • VRF 作成方法により、それぞれ

ip vrf forwarding (interface configuration)

R3(config)#int fa1/0
R3(config-if)#do sh run int fa1/0
Building configuration...

Current configuration : 84 bytes
!
interface FastEthernet1/0
 ip address 172.16.35.3 255.255.255.0
 duplex half
end

R3(config-if)#
R3(config-if)#ip vrf forwarding VPN-A
% Interface FastEthernet1/0 IPv4 disabled and address(es) removed due to enabling VRF VPN-A
R3(config-if)#interface FastEthernet1/0
R3(config-if)# ip address 172.16.35.3 255.255.255.0
R3(config-if)#

 

vrf forwarding

R3(config)#int fa1/0
R3(config-if)#do sh run int fa1/0
Building configuration...

Current configuration : 84 bytes
!
interface FastEthernet1/0
 ip address 172.16.35.3 255.255.255.0
 duplex half
end

R3(config-if)#
R3(config-if)#vrf forwarding VPN-A
% Interface FastEthernet1/0 IPv4 disabled and address(es) removed due to enabling VRF VPN-A
R3(config-if)#interface FastEthernet1/0
R3(config-if)# ip address 172.16.35.3 255.255.255.0
R3(config-if)#

 

設定変更を確認

R3#show vrf
  Name                             Default RD          Protocols   Interfaces
  VPN-A                            65000:100           ipv4        Fa1/0
R3#

R4#show vrf
  Name                             Default RD          Protocols   Interfaces
  VPN-A                            65000:100           ipv4        Fa1/0
R4#

 

Multi-Protocol BGP (MP-BGP)  VPNv4

  • VRF を設定してあるルータ間でBGP を設定する
  • AS 65000内での設定、CEとの接続とは別
  • 台数によってはRoute Reflector があるケースもあるが、基本的にはBGP (iBGP)を設定するイメージで充分
    – next-hop-self は不要
  • no bgp default ipv4-unicast と拡張コミュニティの設定を忘れずに
    – [参考] VPN no bgp default ipv4-unicast

 

 

!!! R3
router bgp 65000
 bgp router-id 10.0.0.3
 no bgp default ipv4-unicast
 neighbor 10.0.0.4 remote-as 65000
 neighbor 10.0.0.4 update-source Loopback0
 !
 address-family ipv4
 exit-address-family
 !
 address-family vpnv4
  neighbor 10.0.0.4 activate
  neighbor 10.0.0.4 send-community extended
 exit-address-family

!!! R4
router bgp 65000
 bgp router-id 10.0.0.4
 no bgp default ipv4-unicast
 neighbor 10.0.0.3 remote-as 65000
 neighbor 10.0.0.3 update-source Loopback0
 !
 address-family ipv4
 exit-address-family
 !
 address-family vpnv4
  neighbor 10.0.0.3 activate
  neighbor 10.0.0.3 send-community extended
 exit-address-family

※MultiなのでIPv4 としてPeerを確立するにはaddress-family 配下でactivateするだけでよい。neighbor ~ remote-as は不要。

 

確認

show ip bgp ~に慣れていると少し面倒

R3#show bgp vpnv4 unicast all summary
BGP router identifier 10.0.0.3, local AS number 65000
BGP table version is 6, main routing table version 6

Neighbor        V           AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
10.0.0.4        4        65000      53      52        6    0    0 00:43:37        0

R4#show bgp vpnv4 unicast all summary
BGP router identifier 10.0.0.4, local AS number 65000
BGP table version is 6, main routing table version 6

Neighbor        V           AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
10.0.0.3        4        65000      52      53        6    0    0 00:43:41        0

 

CEルータとの接続

  • PEルータのMP-BGPにIPv4 VRFを設定する
    – VRFを使う以外は通常のeBGP と同じ
  • 以下の例ではユーザASが同じなので、MPLS-VPN 側でAS 番号を上書きするか、ユーザ AS側で同じAS を受け入れる設定が必要
    – neighbor as-override
    – neighbor allowas-in

 

 

  • neighbor コマンドはvrf XXX 配下でおこなう
  • IPv4 VRF をVPNv4に再配送するような設定は不要
!!! R3
router bgp 65000
 !
 address-family ipv4 vrf VPN-A
  neighbor 172.16.35.5 remote-as 65056
  neighbor 172.16.35.5 activate
  neighbor 172.16.35.5 as-override
 exit-address-family

!!! R4
router bgp 65000
 !
 address-family ipv4 vrf VPN-A
  neighbor 172.16.46.6 remote-as 65056
  neighbor 172.16.46.6 activate
  neighbor 172.16.46.6 as-override
 exit-address-family

 

確認

Peer確立の確認

R3#show bgp vpnv4 unicast vrf VPN-A summary | b Nei
Neighbor        V           AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
172.16.35.5     4        65056      28      28        9    0    0 00:03:43        1
R3#

R4#show bgp vpnv4 unicast vrf VPN-A summary | b Nei
Neighbor        V           AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
172.16.46.6     4        65056      30      30        9    0    0 00:04:03        1
R4#

 

経路の確認

R3#show bgp vpnv4 unicast vrf VPN-A | b Net
     Network          Next Hop            Metric LocPrf Weight Path
Route Distinguisher: 65000:100 (default for vrf VPN-A)
 *>  192.168.5.0      172.16.35.5              0             0 65056 i
 *>i 192.168.6.0      10.0.0.4                 0    100      0 65056 i
R3#

R4#show bgp vpnv4 unicast vrf VPN-A | b Net
     Network          Next Hop            Metric LocPrf Weight Path
Route Distinguisher: 65000:100 (default for vrf VPN-A)
 *>i 192.168.5.0      10.0.0.3                 0    100      0 65056 i
 *>  192.168.6.0      172.16.46.6              0             0 65056 i
R4#

R5#show ip bgp | b Net
     Network          Next Hop            Metric LocPrf Weight Path
 *>  192.168.5.0      0.0.0.0                  0         32768 i
 *>  192.168.6.0      172.16.35.3                            0 65000 65000 i
R5#

R6#show ip bgp | b Net
     Network          Next Hop            Metric LocPrf Weight Path
 *>  192.168.5.0      172.16.46.4                            0 65000 65000 i
 *>  192.168.6.0      0.0.0.0                  0         32768 i
R6#

 

疎通の確認

R5#ping 192.168.6.6 so lo 0
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.6.6, timeout is 2 seconds:
Packet sent with a source address of 192.168.5.5
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 84/97/116 ms
R5#

R6#ping 192.168.5.5 so lo 0
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.5.5, timeout is 2 seconds:
Packet sent with a source address of 192.168.6.6
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 48/92/120 ms
R6#

 

CE側はレガシーでもAFモードでもどちらでも良い

!!! R5
router bgp 65056
 bgp router-id 192.168.5.5
 network 192.168.5.0
 timers bgp 10 30
 neighbor 172.16.35.3 remote-as 65000

!!! R6
router bgp 65056
 bgp router-id 192.168.6.6
 network 192.168.6.0
 timers bgp 10 30
 neighbor 172.16.46.4 remote-as 65000

 

コメント