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 Identifier | 0005 / 0105 / 0205 | その経路がどのOSPFドメインのものか。既定はNULL(4.2.4) |
| OSPF Route Type | 0306 | エリア番号(4バイト)+ルートタイプ(1バイト)+オプション(1バイト)。必ず付く |
| OSPF Router ID | 0107 | 経路をVRFに入れたPEの、そのOSPFインスタンスでのルータID。任意 |
ルートタイプの値は、元のLSAの種類に対応します。
| 値 | 意味 |
|---|---|
| 1 / 2 | intra-area(Type 1 / Type 2のLSA由来) |
| 3 | inter-area |
| 5 | 外部経路(エリア番号は0) |
| 7 | NSSAの経路 |
メトリックは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 が付く |
| 1 | PE1・PE2 の両方に同じ domain-id | Type 3 のまま。 VPNv4 経路に Domain ID の拡張コミュニティが増える |
| 2 | PE2 だけ違う domain-id | O E2(Type 5)に変わる。LSDB にも Type-5 LSA が出る |
| 3 | PE2 を元の値に戻す | Type 3 に戻る |
| 4 | R-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)です。
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 に置いたのに、エリアをまたいだ経路として届いています。
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/010.1.1.0/24 を1本だけ見ると、type inter area と出ます。
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 としてふるまっています。
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 は付いていません。
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 を入れます。
router ospf 100
vrf CUST-A
domain-id type 0005 value 000000000001
!
!
endDomain ID の拡張コミュニティが増えました。LSA の種別は Type 3 のままです(両側が同じ値なので同じドメインと判定されます)。
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 です。
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.1OSPF Route Type と OSPF Router ID は、古い型番号(8000 / 8001)で送られています。 tshark が Generic Transitive Extended Community (0x80) と読んでいるのがそれで、RFC 4577 が後方互換のために受け入れるとしている形です。Domain ID のほうは現行の 0005 です。
Domain IDが違うと Type 5 になる
PE2 にだけ違う値を入れます。
router ospf 100
vrf CUST-A
domain-id type 0005 value 000000000002
!
!
endPE2 が受け取っている経路の Domain ID は 0x000000000001 のままですが、PE2 自身の OSPF インスタンスは 0x000000000002 になりました。一致しないので、PE2 は AS-external として広告します。
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 になっています。
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 は最初から入れてあります)。
router static
address-family ipv4 unicast
10.9.9.0/24 Null0
!
!
endPE2 が受け取った経路の Route Type は 0:5:0x1 です。エリア番号 0、ルートタイプ 5、オプション 0x1(タイプ2メトリック)を表します。 Domain ID はサイト1と同じ値のままです。
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:1CE-A2 には外部経路として届きます。
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.txt | show 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.txt | show bgp trace(PEのみ) |
..._commit.cfg | そのSTEPで実際にcommitされた設定(変更したルータのみ) |
STEP 0:初期状態(domain-id なし=NULL)
| ルータ | show出力 | syslog | running-config | ping | trace | 投入した設定 |
|---|---|---|---|---|---|---|
| R-A1 | show | log | run | ping | - | - |
| CE-A1 | show | log | run | ping | - | - |
| PE1 | show | log | run | ping | trace | - |
| P1 | show | log | run | ping | - | - |
| PE2 | show | log | run | ping | trace | - |
| CE-A2 | show | log | run | ping | - | - |
STEP 1:PE1・PE2 の両方に同じ domain-id
| ルータ | show出力 | syslog | running-config | ping | trace | 投入した設定 |
|---|---|---|---|---|---|---|
| R-A1 | show | log | run | ping | - | - |
| CE-A1 | show | log | run | ping | - | - |
| PE1 | show | log | run | ping | trace | commit |
| P1 | show | log | run | ping | - | - |
| PE2 | show | log | run | ping | trace | commit |
| CE-A2 | show | log | run | ping | - | - |
STEP 2:PE2 だけ違う domain-id
| ルータ | show出力 | syslog | running-config | ping | trace | 投入した設定 |
|---|---|---|---|---|---|---|
| R-A1 | show | log | run | ping | - | - |
| CE-A1 | show | log | run | ping | - | - |
| PE1 | show | log | run | ping | trace | - |
| P1 | show | log | run | ping | - | - |
| PE2 | show | log | run | ping | trace | commit |
| CE-A2 | show | log | run | ping | - | - |
STEP 3:PE2 を元の値に戻す
| ルータ | show出力 | syslog | running-config | ping | trace | 投入した設定 |
|---|---|---|---|---|---|---|
| R-A1 | show | log | run | ping | - | - |
| CE-A1 | show | log | run | ping | - | - |
| PE1 | show | log | run | ping | trace | - |
| P1 | show | log | run | ping | - | - |
| PE2 | show | log | run | ping | trace | commit |
| CE-A2 | show | log | run | ping | - | - |
STEP 4:R-A1 で static(10.9.9.0/24)を OSPF に再配布
| ルータ | show出力 | syslog | running-config | ping | trace | 投入した設定 |
|---|---|---|---|---|---|---|
| R-A1 | show | log | run | ping | - | commit |
| CE-A1 | show | log | run | ping | - | - |
| PE1 | show | log | run | ping | trace | - |
| P1 | show | log | run | ping | - | - |
| PE2 | show | log | run | ping | trace | - |
| CE-A2 | show | log | run | ping | - | - |
STEP 5:その static を外す(最終状態)
| ルータ | show出力 | syslog | running-config | ping | trace | 投入した設定 |
|---|---|---|---|---|---|---|
| R-A1 | show | log | run | ping | - | commit |
| CE-A1 | show | log | run | ping | - | - |
| PE1 | show | log | run | ping | trace | - |
| P1 | show | log | run | ping | - | - |
| PE2 | show | log | run | ping | trace | - |
| CE-A2 | show | log | run | ping | - | - |
パケットキャプチャーはSTEPごとに取得しています。
| STEP | PE1-P1間 | PE2-CE-A2間 |
|---|---|---|
| 0 | pcap | pcap |
| 1 | pcap | pcap |
| 2 | pcap | pcap |
| 3 | pcap | pcap |
| 4 | pcap | pcap |
| 5 | pcap | pcap |
まとめ
- MPLS VPN(L3VPN)とは
- MPLS VPNのVRF(Virtual Routing and Forwarding)
- MPLS VPNのRD(Route Distinguisher)
- MPLS VPNのRT(Route Target)
- MPLS VPNのMP-BGP(VPNv4経路の伝搬)
- MPLS VPNのVPNラベルの割り当て(per-prefix / per-CE / per-VRF)
- MPLS VPNの2段ラベルの転送(トランスポートラベルとVPNラベル)
- MPLS VPNのPE-CEルーティング(スタティック)
- MPLS VPNのPE-CEルーティング(eBGP)
- MPLS VPNで複数拠点が同じAS番号を使う場合(as-override)
- MPLS VPNのSoO(Site of Origin)
- MPLS VPNのPE-CEルーティング(OSPF)
- MPLS VPNのOSPFのDNビットとDomain Tag
- MPLS VPNのSham Link(バックドアリンク対策)
- MPLS VPNのRTによる経路制御(extranet / import・export map)
- MPLS VPNのハブアンドスポーク