MPLS-VPN

【図解】MPLS-VPNの設定~スーパーバックボーン, sham-link, 拡張コミュニティについて~

Cisco での MPLS-VPN の設定例を紹介します。以下の図の NW を構成していきます。

MPLS では顧客ネットワークの IP アドレス帯が重複することがありますが、VRF という機能でルーティングテーブルを論理的に分割しているため、問題になりません。上記の構成でも、CE1-1 と CE2-1 の接続において、「10.1.11.0/24」という IP アドレス帯が重複しています。

なお、PE1 では CE1-1 との接続に VPN_A という VRF を構成し、CE1-2 との接続に VPN_B という VRF を構成し、それぞれで OSPF プロセスを起動します。

プロセス ID を分ければ基本問題ないですが、VRF の物理インタフェースがそれぞれ 1 つだけのため、デフォルトでは共にルータ ID として「10.1.11.1」を使おうとする (※ループバック IF が無いため物理 IF の最大 IP を使う) ため、2 つ目の OSPF プロセス起動時に重複してしまいます。そのため、ルータ ID を手動で設定する必要があります

MPLS 網の設定

MPLS を動作させる PE1、PE2、P の各ルータに Loopback IF の設定をした後、MPLS で通る物理 IF に IP を付与し、OSPF の設定、および MPLS の設定をします。なお、ルーティングプロトコルは OSPF でなくても構いません。RIP や EIGRP でも問題ありません。

Cisco では MPLS を使う場合は CEF が必要になります。通常デフォルトで有効になっています。

[PE1 の設定]

PE1(config)# interface loopback 1
PE1(config-if)# ip address 1.1.1.1 255.255.255.255
PE1(config)# interface gigabitEthernet 0/0
PE1(config-if)# ip address 192.168.13.1 255.255.255.0
PE1(config-if)# mpls ip
PE1(config-if)# no shutdown
PE1(config)# router ospf 100
PE1(config-router)# network 1.1.1.1 0.0.0.0 area 100
PE1(config-router)# network 192.168.13.0 0.0.0.255 area 100

[PE2 の設定]

PE2(config)# interface loopback 1
PE2(config-if)# ip address 2.2.2.2 255.255.255.255
PE2(config)# interface gigabitEthernet 0/0
PE2(config-if)# ip address 192.168.23.2 255.255.255.0
PE2(config-if)# mpls ip
PE2(config-if)# no shutdown
PE2(config)# router ospf 100
PE2(config-router)# network 2.2.2.2 0.0.0.0 area 100
PE2(config-router)# network 192.168.23.0 0.0.0.255 area 100

[P1 の設定]

P1(config)# interface loopback 1
P1(config-if)# ip address 3.3.3.3 255.255.255.255
P1(config)# interface gigabitEthernet 0/0
P1(config-if)# ip address 192.168.13.3 255.255.255.0
P1(config-if)# mpls ip
P1(config-if)# no shutdown
P1(config)# interface gigabitEthernet 1/0
P1(config-if)# ip address 192.168.23.3 255.255.255.0
P1(config-if)# mpls ip
P1(config-if)# no shutdown
P1(config)# router ospf 100
P1(config-router)# network 3.3.3.3 0.0.0.0 area 100
P1(config-router)# network 192.168.13.0 0.0.0.255 area 100
P1(config-router)# network 192.168.23.0 0.0.0.255 area 100

各ルータで MPLS によるネイバーが張れていることを確認します。

PE1/PE2/P1 # show mpls ldp neighbor

また、LIB テーブルが作成されていることを確認します。

PE1/PE2/P1 # show mpls ldp bindings
show コマンド結果:PE1 / PE2 / P1

VRF(顧客ルーティングテーブル)の設定

PE1/PE2 ルータで VRF を、顧客の数だけ作成します。ここでは例として2つ作成します。また、VRF 上で OSPF を動作させ、CE1/CE2 ルータとルート情報交換をさせます。なお、これも OSPF でなくても構いません。RIP や EIGRP でも問題ありません。網内と合わせる必要も、別にする必要もありません。

[PE1 の設定]

PE1(config)# ip vrf VPN_A
PE1(config-vrf)# rd 10:10
PE1(config-vrf)# route-target both 100:100
PE1(config)# ip vrf VPN_B
PE1(config-vrf)# rd 20:20
PE1(config-vrf)# route-target both 200:200
PE1(config)# interface gigabitEthernet 1/0
PE1(config-if)# ip vrf forwarding VPN_A
PE1(config-if)# ip address 10.1.11.1 255.255.255.0
PE1(config-if)# no shutdown
PE1(config)# interface gigabitEthernet 2/0
PE1(config-if)# ip vrf forwarding VPN_B
PE1(config-if)# ip address 10.1.11.1 255.255.255.0
PE1(config-if)# no shutdown
PE1(config)# router ospf 10 vrf VPN_A
PE1(config-router)# router-id 1.1.1.10
PE1(config-router)# network 10.1.11.0 0.0.0.255 area 0
PE1(config)# router ospf 20 vrf VPN_B
PE1(config-router)# router-id 1.1.1.20
PE1(config-router)# network 10.1.11.0 0.0.0.255 area 0

[PE2 の設定]

PE2(config)# ip vrf VPN_A
PE2(config-vrf)# rd 10:10
PE2(config-vrf)# route-target both 100:100
PE2(config)# ip vrf VPN_B
PE2(config-vrf)# rd 20:20
PE2(config-vrf)# route-target both 200:200
PE2(config)# interface gigabitEthernet 1/0
PE2(config-if)# ip vrf forwarding VPN_A
PE2(config-if)# ip address 10.2.23.1 255.255.255.0
PE2(config-if)# no shutdown
PE2(config)# interface gigabitEthernet 2/0
PE2(config-if)# ip vrf forwarding VPN_B
PE2(config-if)# ip address 10.2.24.1 255.255.255.0
PE2(config-if)# no shutdown
PE2(config)# router ospf 10 vrf VPN_A
PE2(config-router)# router-id 2.2.2.10
PE2(config-router)# network 10.2.23.0 0.0.0.255 area 0
PE2(config)# router ospf 30 vrf VPN_B
PE2(config-router)# router-id 2.2.2.30
PE2(config-router)# network 10.2.24.0 0.0.0.255 area 0

[CE1-1 の設定]

CE1-1(config)# interface loopback 1
CE1-1(config-if)# ip address 11.11.11.11 255.255.255.255
CE1-1(config)# interface gigabitEthernet 0/0
CE1-1(config-if)# ip address 10.1.11.11 255.255.255.0
CE1-1(config-if)# no shutdown
CE1-1(config)# router ospf 1
CE1-1(config-router)# network 11.11.11.11 0.0.0.0 area 0
CE1-1(config-router)# network 10.1.11.0 0.0.0.255 area 0

[CE2-1 の設定]

CE2-1(config)# interface loopback 1
CE2-1(config-if)# ip address 21.21.21.21 255.255.255.255
CE2-1(config)# interface gigabitEthernet 0/0
CE2-1(config-if)# ip address 10.1.11.21 255.255.255.0
CE2-1(config)# router ospf 1
CE2-1(config-router)# network 21.21.21.21 0.0.0.0 area 0
CE2-1(config-router)# network 10.1.11.0 0.0.0.255 area 0

[CE1-2 の設定]

CE1-2(config)# interface loopback 1
CE1-2(config-if)# ip address 12.12.12.12 255.255.255.255
CE1-2(config)# interface gigabitEthernet 0/0
CE1-2(config-if)# ip address 10.2.23.12 255.255.255.0
CE1-2(config-if)# no shutdown
CE1-2(config)# router ospf 1
CE1-2(config-router)# network 12.12.12.12 0.0.0.0 area 0
CE1-2(config-router)# network 10.2.23.0 0.0.0.255 area 0

[CE2-2 の設定]

CE2-2(config)# interface loopback 1
CE2-2(config-if)# ip address 22.22.22.22 255.255.255.255
CE2-2(config)# interface gigabitEthernet 0/0
CE2-2(config-if)# ip address 10.2.24.22 255.255.255.0
CE1-2(config-if)# no shutdown
CE2-2(config)# router ospf 1
CE2-2(config-router)# network 22.22.22.22 0.0.0.0 area 0
CE2-2(config-router)# network 10.2.24.0 0.0.0.255 area 0

PE1 と PE2 の VRF でそれぞれルーティングテーブルに CE ルータの情報が載っていることを確認します。

PE1/PE2 # show ip ospf 10 neighbors
PE1/PE2 # show ip ospf 10 database
PE1/PE2 # show ip ospf 20 neighbors
PE1/PE2 # show ip ospf 20 database
show コマンド結果:PE1 / PE2

MP-BGP による VPNv4 Prefix 情報の交換

MP-BGP の ipv4 と VRF の OSPF を相互に redistribute し、MP-BGP で VPNv4 Prefix の交換をする設定をします。

[PE1]

PE1(config)# router bgp 65001
PE1(config-router)# neighbor 2.2.2.2 remote-as 65001
PE1(config-router)# neighbor 2.2.2.2 update-source loopback 1
PE1(config-router)# address-family vpnv4
PE1(config-router-af)# neighbor 2.2.2.2 activate
PE1(config-router)# address-family ipv4 vrf VPN_A
PE1(config-router-af)# redistribute ospf 10 vrf VPN_A
PE1(config-router)# address-family ipv4 vrf VPN_B
PE1(config-router-af)# redistribute ospf 20 vrf VPN_B
PE1(config)# router ospf 10
PE1(config-router)# redistribute bgp 65001 metric 20 subnets
PE1(config)# router ospf 20
PE1(config-router)# redistribute bgp 65001 metric 20 subnets

[PE2]

PE2(config)# router bgp 65001
PE2(config-router)# neighbor 1.1.1.1 remote-as 65001
PE2(config-router)# neighbor 1.1.1.1 update-source loopback 1
PE2(config-router)# address-family vpnv4
PE2(config-router-af)# neighbor 1.1.1.1 activate
PE2(config-router)# address-family ipv4 vrf VPN_A
PE2(config-router-af)# redistribute ospf 10 vrf VPN_A
PE2(config-router)# address-family ipv4 vrf VPN_B
PE2(config-router-af)# redistribute ospf 30 vrf VPN_B
PE2(config)# router ospf 10
PE2(config-router)# redistribute bgp 65001 metric 20 subnets
PE2(config)# router ospf 30
PE2(config-router)# redistribute bgp 65001 metric 20 subnets

互いに BGP によるネイバーが張れていることを確認します。

PE1/PE2 # show bgp vpnv4 unicast all

また、LFIB テーブルが作成されていることを確認します。

PE1/PE2 # show mpls forwarding-table

また、VPN (顧客)識別ラベル(Inner Label)の情報を確認します。

show コマンド結果:PE1 / PE2
PE1/PE2 # show bgp vpnv4 unicast vrf VPN_A labels
PE1/PE2 # show bgp vpnv4 unicast vrf VPN_B labels

最後に、CE ルータで OSPF 情報が流れていることを確認します。

CE1-1/CE2-1/CE1-2/CE2-2 # show ip route
show コマンド結果:CE1-1 / CE2-1 / CE1-2 / CE2-2

CE2-1 と CE2-2 が設定通り外部ルート (O E2) になっているのに対し、CE1-1 と CE1-2 がルートが Inter-Area(O IA) になっていることを確認して下さい。これは CE1-1 と CE1-2 の間がスーパーバックボーンという接続になっているためです。

スーパーバックボーンとは

スーパーバックボーンとは、先程見て頂いた通り、MPLS-VPN を介して OSPF を再配布するときに、LSA Type 5 ではなく LSA Type 3 で再配布する機能です。

よく『エリア 0 と同じ』という説明がなされますが、例でご覧頂いた通り、エリア 0 同士を MPLS スーパーバックボーンで接続しても LSA Type3 になりますので、『エリア 0 と同じ』とは言えません。ただし、このようなエリア 0 同士を MPLS-VPN 経由で接続する、というのは一般的ではないので特殊なケースだとは言えます。通常の構成は以下の通りです。

スーパーバックボーンとして動作させる条件は、MP-BGPでOSPFルートを再配布する際、Path Attribute Type 16の拡張コミュニティである「Domain-ID」が対向の OSPF プロセスの Domain-ID と同じであることです。

そして OSPF プロセス ID が同じであれば、この Domain-ID も同じになります。なお、以下コマンドで手動での設定も可能です(ドメインID=10に設定するコマンド)。

(config)# router ospf 1 vrf VPN_A
(config-router)# domain-id 10

なお、拡張コミュニティはこの Route-Target 以外の使われ方として Route TypeRoute ID があります。これは OSPF から MP-BGP へ再配布する際に、VPNv4 Prefix や Route-Target と共に伝搬されます。

Route Type コミュニティは [Area ID (4byte)] + [Route Type (1byte)] + [Option (1byte)] で構成されます。

Route Type は伝達するネットワーク情報が OSPF の LSA Type の何番に由来するかが書かれます。取り得る値としては[1,2,3,5,7,129]になります。それぞれ [LSA Type1, LSA Type2, LSA Type3, LSA Type5, LSA Type7, Sham-Link] です。最後の [Option] は Type5 もしくは Type7 において E1 か E2かを意味します。(E1=0, E2=1)

PE2 から PE1 への BGP の Update 時には以下のようなメッセージがやり取りされます。4つのルート中、1つだけ ( CE1-2 から CE1-1 への、10.2.23.0/24 のルート)を記載しています。

Domain ID が先程の例では CE1-1 と CE2-1 間ではプロセスID=10 を使っていたため、スーパーバックボーンになっていますが、CE1-2 と CE2-2 の間ではそれぞれプロセスID=20 と 30 を使っており、そのためスーパーバックボーンにはなっていません。

Sham-Linkとは

スーパーバックボーンでは LSA Type3 での再配布までしかできませんでしたが、Sham-Link (構造リンク) という機能を使うことで、MPLS-VPN 上で LSA Type1 および Type2 を通すことができます。

Sham-Link を構成するには、まず両端の PE ルータに Loopback アドレスを VRF 上に作成し、そのルートを BGP で配布します。その後、OSPF プロセスで Sham-Link の設定を入れます。

[PE1の設定]

PE1(config)# interface loopback 11
PE1(config-if)# ip vrf forwarding VPN_A
PE1(config-if)# ip address 11.1.1.1 255.255.255.255
PE1(config)# router bgp 65001
PE1(config-router)# address-family ipv4 vrf VPN_A
PE1(config-router-af)# network 11.1.1.1 mask 255.255.255.255
PE1(config)# router ospf 10
PE1(config-router)# area 0 sham-link 11.1.1.1 22.2.2.2

[PE2の設定]

PE2(config)# interface loopback 22
PE2(config-if)# ip vrf forwarding VPN_A
PE2(config-if)# ip address 22.2.2.2 255.255.255.255
PE2(config)# router bgp 65001
PE2(config-router)# address-family ipv4 vrf VPN_A
PE2(config-router-af)# network 22.2.2.2 mask 255.255.255.255
PE2(config)# router ospf 10
PE2(config-router)# area 0 sham-link 22.2.2.2 11.1.1.1

Sham Link のリンク状態を確認します。

PE1/PE2 # show ip ospf sham-links
showコマンドの結果: PE1 / PE2

この設定を投入すると、PE1 と PE2 が直結したものとみなし、11.1.1.1 と 22.2.2.2 でユニキャストでの OSPF のやり取り (Hello ⇒ DBD ⇒ LSRequest ⇒ LSUpdate ⇒ LSAck の全て)を行うことができます。

なお、Sham Link はドメイン ID が違っていても問題なく構成できます

コメント

タイトルとURLをコピーしました