↓ メインコンテンツへスキップ
  1. ネットワーク 記事一覧/
  2. MPLS-VPN記事一覧/

MPLS VPNのPE-CEルーティング(OSPF)

目次

MPLS VPNのPE-CEルーティング(OSPF)

PE-CE間でOSPFを使うと、PEはサイトのOSPFルータの1台としてふるまいます。サイトのOSPF経路はPEでVPNv4経路に変換されてMP-BGPで運ばれ、相手のPEでふたたびOSPFに戻されてCEへ広告されます。

この動きはRFC 4577が定めています。PEはVRFごとに独立したOSPFインスタンスを持ち(4.1.1)、そこで学んだ経路をBGPへ再配布します(4.1.2)。

PEはOSPFバックボーンの一部とみなす

いちばん大事なのは、PEを「エリア0のルータ」として扱うという決め方です。

PEs can thus be considered OSPF “area 0 routers”, i.e., they can be considered part of the “OSPF backbone”. Thus, they are allowed to distribute inter-area routes to the CE via Type 3 LSAs.

PE-CE間のリンクが非ゼロのエリアなら、PEはそのエリアのABRになります(4.1.4)。プロバイダのVPNバックボーンがエリア0の延長として働くので、サイトをまたぐ経路はエリア間の経路になります。

ここから、設定を見ただけでは意外に見える結果が出ます。2つのサイトを同じエリア番号にしても、相手サイトの経路はintra-areaにはならず、Type 3のinter-areaとして届きます。両サイトの間にはエリア0(VPNバックボーン)が挟まっているからです。サイト間をintra-areaに見せたい場合は、Sham Linkという別の仕組みを使います。

3つの拡張コミュニティで運ぶ

OSPFの経路をBGPに載せて運び、相手側でOSPFに戻すには、元がOSPFのどんな経路だったかを一緒に運ぶ必要があります。RFC 4577の4.2.6は、そのための拡張コミュニティを3つ定めています。

拡張コミュニティ型内容
OSPF Domain Identifier0005 / 0105 / 0205その経路がどのOSPFドメインのものか。既定はNULL(4.2.4)
OSPF Route Type0306エリア番号(4バイト)+ルートタイプ(1バイト)+オプション(1バイト)。必ず付く
OSPF Router ID0107経路をVRFに入れたPEの、そのOSPFインスタンスでのルータID。任意

ルートタイプの値は、元のLSAの種類に対応します。

値意味
1 / 2intra-area(Type 1 / Type 2のLSA由来)
3inter-area
5外部経路(エリア番号は0)
7NSSAの経路

メトリックはMEDで運びます(既定はOSPFの距離+1)。

型番号には古い形もあります。 RFC 4577の4.2.6は、OSPF Route Typeに8000、OSPF Router IDに8001という古い型番号を受け入れることとしています(後方互換のため)。実装によってはこちらを送ります。

相手サイトでどのLSAになるか

受け取ったPEは、経路のDomain IDが自分のOSPFインスタンスのDomain IDと一致するかをまず見ます(4.2.4)。

If R’s Domain Identifier is not one of I2’s Domain Identifiers, then, if R is redistributed into I2, R will be advertised as an AS-external route, no matter what its OSPF route type is.

一致した場合は、元のルートタイプで決まります(4.1.3)。

経路のDomain ID元のルートタイプCEへ広告するLSA
受け側と一致intra-area / inter-area(1 / 2 / 3)Type 3(inter-area)
受け側と一致外部 / NSSA(5 / 7)Type 5 / Type 7
受け側と不一致何であってもType 5(AS-external)

Domain IDの既定はNULLで、両側がNULLなら「同じドメイン」として扱われます。 つまり何も設定しなければType 3になります。明示的に別の値を設定したときだけ、別ドメインとして外部経路になります。

検証構成

サイト1は CE-A1 とその奥の R-A1 の2台で、拠点内のリンク 10.1.1.0/24 が intra-area の経路になります。サイト2は CE-A2 の1台です。PE-CE のリンクも拠点内も、すべて area 1 に置いてあります。PE は VRF ごとに router ospf 100 vrf CUST-A を持ち、そこで学んだ経路を BGP へ再配布します。

STEP操作確かめること
0初期状態(domain-id なし=NULL)サイト1の intra-area 経路が、サイト2では O IA(Type 3)になる。VPNv4 経路に OSPF Route Type / Router ID が付く
1PE1・PE2 の両方に同じ domain-idType 3 のまま。 VPNv4 経路に Domain ID の拡張コミュニティが増える
2PE2 だけ違う domain-idO E2(Type 5)に変わる。LSDB にも Type-5 LSA が出る
3PE2 を元の値に戻すType 3 に戻る
4R-A1 で static(10.9.9.0/24)を OSPF に再配布ドメインが同じでも Type 5 のまま渡る。Route Type のエリア番号は 0、タイプは 5
5その static を外す(最終状態)元に戻る

同じエリアに置いても inter-area になる

サイト1の CE-A1 から OSPF で学んだ経路は2つに分かれます。拠点内のものは O(intra-area)、サイト2から来たものは O IA(inter-area)です。

STEP 0 CE-A1 の OSPF 経路(サイト1)
RP/0/RP0/CPU0:CE-A1#show route ospf
Mon Oct 12 02:52:37.855 UTC

O IA 10.1.2.1/32 [110/3] via 172.16.1.1, 00:04:08, GigabitEthernet0/0/0/0
O    10.1.11.1/32 [110/2] via 10.1.1.2, 00:05:36, GigabitEthernet0/0/0/1
O IA 172.16.2.0/24 [110/2] via 172.16.1.1, 00:04:08, GigabitEthernet0/0/0/0

サイト2の CE-A2 から見ると、サイト1の経路はすべて O IA です。両サイトとも area 1 に置いたのに、エリアをまたいだ経路として届いています。

STEP 0 CE-A2 の OSPF 経路(サイト2)
RP/0/RP0/CPU0:CE-A2#show route ospf
Mon Oct 12 02:53:28.187 UTC

O IA 10.1.1.0/24 [110/3] via 172.16.2.1, 00:04:58, GigabitEthernet0/0/0/0
O IA 10.1.11.1/32 [110/4] via 172.16.2.1, 00:04:58, GigabitEthernet0/0/0/0
O IA 172.16.1.0/24 [110/2] via 172.16.2.1, 00:04:58, GigabitEthernet0/0/0/0

10.1.1.0/24 を1本だけ見ると、type inter area と出ます。

STEP 0 CE-A2 から見た 10.1.1.0/24(サイト2)
RP/0/RP0/CPU0:CE-A2#show route 10.1.1.0/24
Mon Oct 12 02:53:28.331 UTC

Routing entry for 10.1.1.0/24
  Known via "ospf 1", distance 110, metric 3, type inter area
  Installed Oct 12 02:48:29.423 for 00:04:59
  Routing Descriptor Blocks
    172.16.2.1, from 100.2.2.2, via GigabitEthernet0/0/0/0
      Route metric is 3
  No advertising protos. 

LSDB にも Type 3(Summary Net Link States)として入っています。広告元は PE2 のルータID(100.2.2.2)です。PE がこのエリアの ABR としてふるまっています。

STEP 0 CE-A2 の Type 3 LSA
RP/0/RP0/CPU0:CE-A2#show ospf database summary
Mon Oct 12 02:53:26.578 UTC


            OSPF Router with ID (13.13.13.13) (Process ID 1)

		Summary Net Link States (Area 1)

  Routing Bit Set on this LSA
  LS age: 298
  Options: (No TOS-capability, DC, DN)
  LS Type: Summary Links (Network)
  Link State ID: 10.1.1.0 (Summary Network Number)
  Advertising Router: 100.2.2.2
  LS Seq Number: 80000001
  Checksum: 0xca79
  Length: 28
  Network Mask: /24
	TOS: 0 	Metric: 2 

Options に DN が立っています。これは PE から CE へ降りてきた LSA の印で、ループ防止に使われます。詳しくはMPLS VPNのOSPFのDNビットとDomain Tagで解説しています。

経路と一緒に何が運ばれているか

PE2 が BGP で受け取った経路には、OSPF Route Type と OSPF Router ID が付いています。1:1:0x0 は「エリア1、ルートタイプ1(intra-area)、オプション無し」です。domain-id をまだ設定していないので、Domain ID は付いていません。

STEP 0 PE2 が持っている 10.1.1.0/24(VPNv4)
RP/0/RP0/CPU0:PE2#show bgp vpnv4 unicast rd 65001:1 10.1.1.0/24 detail
Mon Oct 12 02:51:45.472 UTC
BGP routing table entry for 10.1.1.0/24, Route Distinguisher: 65001:1
Versions:
  Process           bRIB/RIB   SendTblVer
  Speaker                 13           13
    Flags: 0x00041001+0x00000000+0x00000000 
Last Modified: Oct 12 02:48:29.023 for 00:03:16
Paths: (1 available, best #1)
  Not advertised to any peer
  Path #1: Received by speaker 0
  Flags: 0x2000000085068005+0x00, import: 0x39f
  Not advertised to any peer
  Local, (received & used)
    1.1.1.1 (metric 3) from 1.1.1.1 (1.1.1.1), if-handle 0x00000000
      Received Label 24003 
      Origin incomplete, metric 2, localpref 100, valid, internal, best, group-best, import-candidate, imported
      Received Path ID 0, Local Path ID 1, version 13
      Extended community: OSPF route-type:1:1:0x0 OSPF router-id:100.1.1.1 RT:65001:100 
      Source AFI: VPNv4 Unicast, Source VRF: CUST-A, Source Route Distinguisher: 65001:1

両方の PE に同じ domain-id を入れます。

STEP 1 PE2 に投入した設定
router ospf 100
 vrf CUST-A
  domain-id type 0005 value 000000000001
 !
!
end

Domain ID の拡張コミュニティが増えました。LSA の種別は Type 3 のままです(両側が同じ値なので同じドメインと判定されます)。

STEP 1 PE2 が持っている 10.1.1.0/24(VPNv4)
RP/0/RP0/CPU0:PE2#show bgp vpnv4 unicast rd 65001:1 10.1.1.0/24 detail
Mon Oct 12 02:57:17.310 UTC
BGP routing table entry for 10.1.1.0/24, Route Distinguisher: 65001:1
Versions:
  Process           bRIB/RIB   SendTblVer
  Speaker                 17           17
    Flags: 0x00043001+0x00000000+0x00000000 
Last Modified: Oct 12 02:53:57.023 for 00:03:20
Paths: (1 available, best #1)
  Not advertised to any peer
  Path #1: Received by speaker 0
  Flags: 0x2000000085048005+0x00, import: 0x3bf
  Not advertised to any peer
  Local, (received & used)
    1.1.1.1 (metric 3) from 1.1.1.1 (1.1.1.1), if-handle 0x00000000
      Received Label 24003 
      Origin incomplete, metric 2, localpref 100, valid, internal, best, group-best, import-candidate, imported
      Received Path ID 0, Local Path ID 1, version 17
      Extended community: OSPF domain-id:0x5:0x000000000001 OSPF route-type:1:1:0x0 OSPF router-id:100.1.1.1 RT:65001:100 
      Source AFI: VPNv4 Unicast, Source VRF: CUST-A, Source Route Distinguisher: 65001:1

パケットでも確認できます。添付の STEP 1 の PE1-P1 間のキャプチャーの No.4 です。

STEP 1 No.4 VPNv4 UPDATE(PE1 → P1)の Extended Communities(tshark -V の抜粋)
        Path Attribute - EXTENDED_COMMUNITIES
            Flags: 0xc0, Optional, Transitive, Complete
                1... .... = Optional: Set
                .1.. .... = Transitive: Set
                ..0. .... = Partial: Not set
                ...0 .... = Extended-Length: Not set
                .... 0000 = Unused: 0x0
            Type Code: EXTENDED_COMMUNITIES (16)
            Length: 32
            Carried extended communities: (4 communities)
                OSPF Domain Identifier: 0:1 [Transitive 2-Octet AS-Specific]
                    Type: Transitive 2-Octet AS-Specific (0x00)
                        0... .... = IANA Authority: Allocated on First Come First Serve Basis
                        .0.. .... = Transitive across ASes: Transitive
                    Subtype (AS2): OSPF Domain Identifier (0x05)
                    2-Octet AS: 0
                    4-Octet AN: 1
                OSPF Route Type: Area: 0.0.0.1, Type: Router [Generic Transitive Extended Community]
                    Type: Generic Transitive Extended Community (0x80)
                        1... .... = IANA Authority: Allocated on Standard Action, Early Allocation or Experimental Basis
                        .0.. .... = Transitive across ASes: Transitive
                    Subtype (Experimental): OSPF Route Type (0x00)
                    Area ID: 0.0.0.1
                    Route type: Router (1)
                    Options: 0x00 (Metric: Type-1)
                        .... ...0 = Metric type: Type-1
                OSPF Router ID: 100.1.1.1 [Generic Transitive Extended Community]
                    Type: Generic Transitive Extended Community (0x80)
                        1... .... = IANA Authority: Allocated on Standard Action, Early Allocation or Experimental Basis
                        .0.. .... = Transitive across ASes: Transitive
                    Subtype (Experimental): OSPF Router ID (0x01)
                    Router ID: 100.1.1.1
上のtshark出力のパケット(No.4 VPNv4 UPDATE)のpcapをダウンロード

OSPF Route Type と OSPF Router ID は、古い型番号(8000 / 8001)で送られています。 tshark が Generic Transitive Extended Community (0x80) と読んでいるのがそれで、RFC 4577 が後方互換のために受け入れるとしている形です。Domain ID のほうは現行の 0005 です。

Domain IDが違うと Type 5 になる

PE2 にだけ違う値を入れます。

STEP 2 PE2 に投入した設定
router ospf 100
 vrf CUST-A
  domain-id type 0005 value 000000000002
 !
!
end

PE2 が受け取っている経路の Domain ID は 0x000000000001 のままですが、PE2 自身の OSPF インスタンスは 0x000000000002 になりました。一致しないので、PE2 は AS-external として広告します。

STEP 2 CE-A2 から見た 10.1.1.0/24
RP/0/RP0/CPU0:CE-A2#show route 10.1.1.0/24
Mon Oct 12 03:04:32.847 UTC

Routing entry for 10.1.1.0/24
  Known via "ospf 1", distance 110, metric 2
  Tag 3489725929, type extern 2
  Installed Oct 12 02:59:29.696 for 00:05:03
  Routing Descriptor Blocks
    172.16.2.1, from 100.2.2.2, via GigabitEthernet0/0/0/0
      Route metric is 2
  No advertising protos. 

LSDB でも Type-5 になっています。

STEP 2 CE-A2 の Type 5 LSA
RP/0/RP0/CPU0:CE-A2#show ospf database external
Mon Oct 12 03:04:31.882 UTC


            OSPF Router with ID (13.13.13.13) (Process ID 1)

		Type-5 AS External Link States

  Routing Bit Set on this LSA
  LS age: 303
  Options: (No TOS-capability, DC, DN)
  LS Type: AS External Link
  Link State ID: 10.1.1.0 (External Network Number)
  Advertising Router: 100.2.2.2
  LS Seq Number: 80000001
  Checksum: 0xec16
  Length: 36
  Network Mask: /24
	Metric Type: 2 (Larger than any link state path)
	TOS: 0 
	Metric: 2 
	Forward Address: 0.0.0.0
	External Route Tag: 3489725929

元が外部経路なら、ドメインが同じでも Type 5

ここまでは「ドメインが違うと外部になる」話でした。ドメインが同じでも、元が外部経路なら外部のまま渡ります。

R-A1 で静的経路を1本足します(redistribute static は最初から入れてあります)。

STEP 4 R-A1 に投入した設定
router static
 address-family ipv4 unicast
  10.9.9.0/24 Null0
 !
!
end

PE2 が受け取った経路の Route Type は 0:5:0x1 です。エリア番号 0、ルートタイプ 5、オプション 0x1(タイプ2メトリック)を表します。 Domain ID はサイト1と同じ値のままです。

STEP 4 PE2 が持っている 10.9.9.0/24(VPNv4)
RP/0/RP0/CPU0:PE2#show bgp vpnv4 unicast rd 65001:1 10.9.9.0/24 detail
Mon Oct 12 03:13:30.968 UTC
BGP routing table entry for 10.9.9.0/24, Route Distinguisher: 65001:1
Versions:
  Process           bRIB/RIB   SendTblVer
  Speaker                 26           26
    Flags: 0x00041001+0x00000000+0x00000000 
Last Modified: Oct 12 03:10:25.023 for 00:03:06
Paths: (1 available, best #1)
  Not advertised to any peer
  Path #1: Received by speaker 0
  Flags: 0x2000000085068005+0x00, import: 0x39f
  Not advertised to any peer
  Local, (received & used)
    1.1.1.1 (metric 3) from 1.1.1.1 (1.1.1.1), if-handle 0x00000000
      Received Label 24006 
      Origin incomplete, metric 20, localpref 100, valid, internal, best, group-best, import-candidate, imported
      Received Path ID 0, Local Path ID 1, version 26
      Extended community: OSPF domain-id:0x5:0x000000000001 OSPF route-type:0:5:0x1 OSPF router-id:100.1.1.1 RT:65001:100 
      Source AFI: VPNv4 Unicast, Source VRF: CUST-A, Source Route Distinguisher: 65001:1

CE-A2 には外部経路として届きます。

STEP 4 CE-A2 から見た 10.9.9.0/24
RP/0/RP0/CPU0:CE-A2#show route 10.9.9.0/24
Mon Oct 12 03:15:13.468 UTC

Routing entry for 10.9.9.0/24
  Known via "ospf 1", distance 110, metric 20
  Tag 3489725929, type extern 2
  Installed Oct 12 03:10:25.001 for 00:04:48
  Routing Descriptor Blocks
    172.16.2.1, from 100.2.2.2, via GigabitEthernet0/0/0/0
      Route metric is 20
  No advertising protos. 

検証Configおよびshow結果

各STEPで6台すべてから、次の種類をルータごとに分けて取得しています。検証Configはこの..._run.txtです(最終状態は最後のSTEPのもの)。

ファイル内容
..._show.txtshow version / show interface description / OSPF・LDP・BGP・VRFの各showなど
..._log.txtそのSTEPの範囲だけに絞ったshow logging
..._run.txtそのSTEP時点のshow running-config(=そのSTEPの検証Config)
..._ping.txtそのSTEPのpingとtraceroute
..._trace.txtshow bgp trace(PEのみ)
..._commit.cfgそのSTEPで実際にcommitされた設定(変更したルータのみ)

STEP 0:初期状態(domain-id なし=NULL)

ルータshow出力syslogrunning-configpingtrace投入した設定
R-A1showlogrunping--
CE-A1showlogrunping--
PE1showlogrunpingtrace-
P1showlogrunping--
PE2showlogrunpingtrace-
CE-A2showlogrunping--

STEP 1:PE1・PE2 の両方に同じ domain-id

ルータshow出力syslogrunning-configpingtrace投入した設定
R-A1showlogrunping--
CE-A1showlogrunping--
PE1showlogrunpingtracecommit
P1showlogrunping--
PE2showlogrunpingtracecommit
CE-A2showlogrunping--

STEP 2:PE2 だけ違う domain-id

ルータshow出力syslogrunning-configpingtrace投入した設定
R-A1showlogrunping--
CE-A1showlogrunping--
PE1showlogrunpingtrace-
P1showlogrunping--
PE2showlogrunpingtracecommit
CE-A2showlogrunping--

STEP 3:PE2 を元の値に戻す

ルータshow出力syslogrunning-configpingtrace投入した設定
R-A1showlogrunping--
CE-A1showlogrunping--
PE1showlogrunpingtrace-
P1showlogrunping--
PE2showlogrunpingtracecommit
CE-A2showlogrunping--

STEP 4:R-A1 で static(10.9.9.0/24)を OSPF に再配布

ルータshow出力syslogrunning-configpingtrace投入した設定
R-A1showlogrunping-commit
CE-A1showlogrunping--
PE1showlogrunpingtrace-
P1showlogrunping--
PE2showlogrunpingtrace-
CE-A2showlogrunping--

STEP 5:その static を外す(最終状態)

ルータshow出力syslogrunning-configpingtrace投入した設定
R-A1showlogrunping-commit
CE-A1showlogrunping--
PE1showlogrunpingtrace-
P1showlogrunping--
PE2showlogrunpingtrace-
CE-A2showlogrunping--

パケットキャプチャーはSTEPごとに取得しています。

STEPPE1-P1間PE2-CE-A2間
0pcappcap
1pcappcap
2pcappcap
3pcappcap
4pcappcap
5pcappcap

まとめ