MPLS VPNのOSPFのDNビットとDomain Tag
PE-CE間でOSPFを使うと、PEがCEへ降ろした経路が、別の経路でPEへ戻ってくることがあります。拠点が2つのPEにつながっている(マルチホーム)構成では、片方のPEが降ろしたLSAが拠点の中を流れて、もう片方のPEに届きます。
そのままだと、BGPで受け取った経路がOSPFを経由してBGPへ戻る一周ができてしまいます。これを止めるのがDNビット(RFC 4576)とVPN Route Tag(RFC 4577の4.2.5.2)です。
DNビットはOptionsの最上位ビット
RFC 4576は、OSPFのOptionsフィールドの未使用だった最上位ビットをこの目的に充てました。
The high-order bit of the LSA Options field (a previously unused bit) is used to solve the problem described in the previous section. We refer to this bit as the DN bit. When a type 3, 5, or 7 LSA is sent from a PE to a CE, the DN bit MUST be set. The DN bit MUST be clear in all other LSA types.
+-------------------------------------+
| DN | * | DC | EA | N/P | MC | E | * |
+-------------------------------------+受け取る側の決まりはこうです。
When the PE receives, from a CE router, a type 3, 5, or 7 LSA with the DN bit set, the information from that LSA MUST NOT be used during the OSPF route calculation. As a result, the LSA is not translated into a BGP route.
止めているのは経路計算だけで、LSAそのものは普通に扱われます。 ここを押さえておかないと、showの出力を読んだときに混乱します。
Note that the DN bit has no other effect on LSA handling. In particular, an LSA with the DN bit set will be put in the topological database, aged, flooded, etc., just as if DN were not set.
つまり、データベースには入っているのに経路としては使われないという状態が正常です。show ospf databaseには出るのにshow routeには出ない、という見え方になります。
Type 5にはルートタグも併用する
DNビットを立てない実装があるため、RFC 4577はType 5のLSAにルートタグも付けることを求めています(4.2.5.1)。これをVPN Route Tagと呼びます。
The VPN Route Tag MUST be used to ensure that a Type 5 LSA originated by a PE router is not redistributed through the OSPF area to another PE router.
値はAS番号から自動で決まります。 AS番号が2バイトなら、上位4ビットを1101、下位16ビットをAS番号にした32ビットの値が既定値です(4.2.5.2)。
0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|1|1|0|1| ArbitraryTag | AutonomousSystem |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+AS 65001なら0xD0000000 + 65001 = 3489725929です。PEはType 5のLSAにこの値のタグを付け、同じ値のタグが付いたType 5をCEから受け取ったら経路計算に使いません。
| 仕組み | 対象のLSA | 止め方 |
|---|---|---|
| DNビット | Type 3 / 5 / 7 | Optionsの最上位ビットを見る |
| VPN Route Tag | Type 5 | ルートタグの値を見る |
Type 5には2つの仕組みが独立して効いています。後方互換のための重ねがけで、片方を無効にしてももう片方が残ります。
防げないループもある
RFC 4577の4.2.5.3は、この2つで防げる範囲をはっきり書いています。
Therefore, extreme care must be taken if there is any mutual redistribution of routes between the OSPF domain and any third routing domain (i.e., not the VPN backbone).
防げるのは「BGP → OSPF → BGP」の一周だけです。 途中にRIPなどを挟むと、DNビットもタグも失われるので、戻ってきた経路をPEは区別できません。
検証構成
サイト1は CE-A1a と CE-A1b の2台で PE1・PE2 へつながるマルチホームの拠点です。PE-CE のリンクも拠点内のリンクも、すべて area 1 に置いてあります。こうすると、PE1 が CE-A1a へ降ろした LSA が拠点の中を流れて CE-A1b まで届き、そこから PE2 へ渡ります。観測するのはサイト2の 10.1.2.1/32 です。
| STEP | 操作 | 確かめること |
|---|---|---|
| 0 | 初期状態 | PE2 の LSDB には PE1 発の Type 3 があるのに、経路は BGP 由来(DN ビットが効いている) |
| 1 | PE2 に disable-dn-bit-check | PE2 が OSPF 経路を採る(ospf 100)。DN ビットだけが止めていたことが分かる |
| 2 | PE2 の disable-dn-bit-check を外す | BGP 由来に戻る |
| 3 | PE3 に違う domain-id(サイト2の経路が Type 5 になる) | Type 5 になり、VPN Route Tag(3489725929)が付く |
| 4 | PE2 に disable-dn-bit-check(Type 5 の状態で) | それでも BGP 由来のまま。 DN を無視してもタグが止めている |
| 5 | STEP 3・4 を戻す(最終状態) | 元に戻る |
LSAは戻ってきている
CE-A1a が PE1 から受け取った Type 3 の LSA です。Options に DN が立っています。
RP/0/RP0/CPU0:CE-A1a#show ospf database summary
Mon Oct 12 04:56:33.868 UTC
OSPF Router with ID (11.11.11.11) (Process ID 1)
Summary Net Link States (Area 1)
Routing Bit Set on this LSA
LS age: 288
Options: (No TOS-capability, DC, DN)
LS Type: Summary Links (Network)
Link State ID: 10.1.2.1 (Summary Network Number)
Advertising Router: 100.1.1.1
LS Seq Number: 80000001
Checksum: 0xca7a
Length: 28
Network Mask: /32
TOS: 0 Metric: 2 同じプレフィックスの LSA が、PE2 のデータベースには2つあります。広告元が 100.2.2.2(PE2 自身)のものと、100.1.1.1(PE1)のものです。後者が、拠点内を回って戻ってきた LSA です。
RP/0/RP0/CPU0:PE2#show ospf 100 vrf CUST-A database summary
Mon Oct 12 04:55:03.928 UTC
OSPF Router with ID (100.2.2.2) (Process ID 100, VRF CUST-A)
Summary Net Link States (Area 1)
LS age: 200
Options: (No TOS-capability, DC, DN)
LS Type: Summary Links (Network)
Link State ID: 10.1.2.1 (Summary Network Number)
Advertising Router: 100.1.1.1
LS Seq Number: 80000001
Checksum: 0xca7a
Length: 28
Network Mask: /32
TOS: 0 Metric: 2
LS age: 198
Options: (No TOS-capability, DC, DN)
LS Type: Summary Links (Network)
Link State ID: 10.1.2.1 (Summary Network Number)
Advertising Router: 100.2.2.2
LS Seq Number: 80000001
Checksum: 0xb58c
Length: 28
Network Mask: /32
TOS: 0 Metric: 2 それでも PE2 が使っているのは BGP の経路です。データベースには入っているのに経路計算には使われないという、RFC 4576 が書いているとおりの状態になっています。
RP/0/RP0/CPU0:PE2#show route vrf CUST-A 10.1.2.1/32
Mon Oct 12 04:55:05.698 UTC
Routing entry for 10.1.2.1/32
Known via "bgp 65001", distance 200, metric 2, type internal
Installed Oct 12 04:51:46.482 for 00:03:19
Routing Descriptor Blocks
4.4.4.4, from 4.4.4.4
Nexthop in Vrf: "default", Table: "default", IPv4 Unicast, Table Id: 0xe0000000
Route metric is 2, Wt is 1
No advertising protos. DNビットのチェックを外すと使ってしまう
PE2 で DN ビットのチェックを無効にします。
router ospf 100
vrf CUST-A
disable-dn-bit-check
!
!
end経路が OSPF 由来に変わりました。距離 110 の OSPF が距離 200 の iBGP に勝つので、PE2 はサイト1へ向けて転送するようになります。これが一周の入口です。
RP/0/RP0/CPU0:PE2#show route vrf CUST-A 10.1.2.1/32
Mon Oct 12 05:01:05.598 UTC
Routing entry for 10.1.2.1/32
Known via "ospf 100", distance 110, metric 5
Local Label 24008, type inter area
Installed Oct 12 04:57:47.280 for 00:03:18
Routing Descriptor Blocks
172.16.2.2, from 100.1.1.1, via GigabitEthernet0/0/0/0
Route metric is 5
No advertising protos. 設定を戻すと、BGP の経路に戻ります。
RP/0/RP0/CPU0:PE2#show route vrf CUST-A 10.1.2.1/32
Mon Oct 12 05:07:03.664 UTC
Routing entry for 10.1.2.1/32
Known via "bgp 65001", distance 200, metric 2, type internal
Installed Oct 12 05:03:46.487 for 00:03:17
Routing Descriptor Blocks
4.4.4.4, from 4.4.4.4
Nexthop in Vrf: "default", Table: "default", IPv4 Unicast, Table Id: 0xe0000000
Route metric is 2, Wt is 1
No advertising protos. Type 5にはタグも付く
PE3 に違う domain-id を入れて、サイト2の経路を Type 5 にします。
router ospf 100
vrf CUST-A
domain-id type 0005 value 000000000003
!
!
endCE-A1b が受け取った Type 5 の LSA です。Options の DN に加えて、External Route Tag に 3489725929 が入っています。AS 65001 から自動計算された値(0xD0000000 + 65001)です。
RP/0/RP0/CPU0:CE-A1b#show ospf database external
Mon Oct 12 05:15:02.211 UTC
OSPF Router with ID (12.12.12.12) (Process ID 1)
Type-5 AS External Link States
LS age: 316
Options: (No TOS-capability, DC, DN)
LS Type: AS External Link
Link State ID: 10.1.2.1 (External Network Number)
Advertising Router: 100.1.1.1
LS Seq Number: 80000001
Checksum: 0xec17
Length: 36
Network Mask: /32
Metric Type: 2 (Larger than any link state path)
TOS: 0
Metric: 2
Forward Address: 0.0.0.0
External Route Tag: 3489725929
Routing Bit Set on this LSAパケットでも、1つの LSA に DN ビットとタグの両方が入っていることが読めます。添付の STEP 3 の PE1-CE-A1a 間のキャプチャーの No.2 です。
Number of LSAs: 2
LSA-type 5 (AS-External-LSA (ASBR)), len 36
.000 0000 0000 0001 = LS Age (seconds): 1
0... .... .... .... = Do Not Age Flag: 0
Options: 0xa0, DN, (DC) Demand Circuits
1... .... = DN: Set
.0.. .... = (O) Opaque: Not set
..1. .... = (DC) Demand Circuits: Supported
...0 .... = (L) LLS Data block: Not Present
.... 0... = (N) NSSA: Not supported
.... .0.. = (MC) Multicast: Not capable
.... ..0. = (E) External Routing: Not capable
.... ...0 = (MT) Multi-Topology Routing: No
LS Type: AS-External-LSA (ASBR) (5)
Link State ID: 10.1.2.1
Advertising Router: 100.1.1.1
Sequence Number: 0x80000001
Checksum: 0xec17
Length: 36
Netmask: 255.255.255.255
1... .... = External Type: Type 2 (metric is larger than any other link state path)
.000 0000 = TOS: 0
Metric: 2
Forwarding Address: 0.0.0.0
External Route Tag: 34897259292つの仕組みは独立して効く
Type 5 になった状態で、もう一度 DN ビットのチェックを外します。
router ospf 100
vrf CUST-A
disable-dn-bit-check
!
!
end設定は確かに入っています。
RP/0/RP0/CPU0:PE2#show running-config router ospf 100
Mon Oct 12 05:19:08.525 UTC
router ospf 100
vrf CUST-A
log adjacency changes
router-id 100.2.2.2
disable-dn-bit-check
redistribute bgp 65001
area 1
interface GigabitEthernet0/0/0/0
network point-to-point
!
!
!
!それでも経路は BGP 由来のままです。DN ビットを無視させても、タグのほうが止めています。
RP/0/RP0/CPU0:PE2#show route vrf CUST-A 10.1.2.1/32
Mon Oct 12 05:19:07.881 UTC
Routing entry for 10.1.2.1/32
Known via "bgp 65001", distance 200, metric 2, type internal
Installed Oct 12 05:09:48.598 for 00:09:19
Routing Descriptor Blocks
4.4.4.4, from 4.4.4.4
Nexthop in Vrf: "default", Table: "default", IPv4 Unicast, Table Id: 0xe0000000
Route metric is 2, Wt is 1
No advertising protos. STEP 1 では同じ設定で OSPF 経路に切り替わりました。違いは LSA の種別だけです。Type 3 を止めているのは DN ビットだけ、Type 5 には DN ビットとタグの2つが効いているということになります。
検証Configおよびshow結果
各STEPで7台すべてから、次の種類をルータごとに分けて取得しています。検証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:初期状態
| ルータ | show出力 | syslog | running-config | ping | trace | 投入した設定 |
|---|---|---|---|---|---|---|
| CE-A1a | show | log | run | ping | - | - |
| PE1 | show | log | run | ping | trace | - |
| P1 | show | log | run | ping | - | - |
| PE2 | show | log | run | ping | trace | - |
| CE-A1b | show | log | run | ping | - | - |
| PE3 | show | log | run | ping | trace | - |
| CE-A2 | show | log | run | ping | - | - |
STEP 1:PE2 に disable-dn-bit-check
| ルータ | show出力 | syslog | running-config | ping | trace | 投入した設定 |
|---|---|---|---|---|---|---|
| CE-A1a | show | log | run | ping | - | - |
| PE1 | show | log | run | ping | trace | - |
| P1 | show | log | run | ping | - | - |
| PE2 | show | log | run | ping | trace | commit |
| CE-A1b | show | log | run | ping | - | - |
| PE3 | show | log | run | ping | trace | - |
| CE-A2 | show | log | run | ping | - | - |
STEP 2:PE2 の disable-dn-bit-check を外す
| ルータ | show出力 | syslog | running-config | ping | trace | 投入した設定 |
|---|---|---|---|---|---|---|
| CE-A1a | show | log | run | ping | - | - |
| PE1 | show | log | run | ping | trace | - |
| P1 | show | log | run | ping | - | - |
| PE2 | show | log | run | ping | trace | commit |
| CE-A1b | show | log | run | ping | - | - |
| PE3 | show | log | run | ping | trace | - |
| CE-A2 | show | log | run | ping | - | - |
STEP 3:PE3 に違う domain-id(サイト2の経路が Type 5 になる)
| ルータ | show出力 | syslog | running-config | ping | trace | 投入した設定 |
|---|---|---|---|---|---|---|
| CE-A1a | show | log | run | ping | - | - |
| PE1 | show | log | run | ping | trace | - |
| P1 | show | log | run | ping | - | - |
| PE2 | show | log | run | ping | trace | - |
| CE-A1b | show | log | run | ping | - | - |
| PE3 | show | log | run | ping | trace | commit |
| CE-A2 | show | log | run | ping | - | - |
STEP 4:PE2 に disable-dn-bit-check(Type 5 の状態で)
| ルータ | show出力 | syslog | running-config | ping | trace | 投入した設定 |
|---|---|---|---|---|---|---|
| CE-A1a | show | log | run | ping | - | - |
| PE1 | show | log | run | ping | trace | - |
| P1 | show | log | run | ping | - | - |
| PE2 | show | log | run | ping | trace | commit |
| CE-A1b | show | log | run | ping | - | - |
| PE3 | show | log | run | ping | trace | - |
| CE-A2 | show | log | run | ping | - | - |
STEP 5:STEP 3・4 を戻す(最終状態)
| ルータ | show出力 | syslog | running-config | ping | trace | 投入した設定 |
|---|---|---|---|---|---|---|
| CE-A1a | show | log | run | ping | - | - |
| PE1 | show | log | run | ping | trace | - |
| P1 | show | log | run | ping | - | - |
| PE2 | show | log | run | ping | trace | commit |
| CE-A1b | show | log | run | ping | - | - |
| PE3 | show | log | run | ping | trace | commit |
| CE-A2 | show | log | run | ping | - | - |
パケットキャプチャーはSTEPごとに取得しています。
| STEP | PE1-CE-A1a間 | PE2-CE-A1b間 |
|---|---|---|
| 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のハブアンドスポーク