NOTE
- MPLS の大前提はIGP によるルーティングが解決されていること
– R1 ~ R4 のLoopback 0で疎通が取れる
– R3 とR4 のFa1/0は含まなくてよい - Pルータ(R1,R2) :VRFを持たずにLabel転送がメイン
- PEルータ(R3,R4):VRFを使いユーザルータと接続
- CEルータ(R5,R6):ユーザルータ
DIAGRAM
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 識別ラベルがある
– [NOTE] 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)#
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 と拡張コミュニティの設定を忘れずに
– [NOTE] 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
コメント