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

MPLS VPNのOSPFのDNビットとDomain Tag

目次

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.

Optionsフィールド(RFC 4576の4)
+-------------------------------------+
| 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)。

VPN Route Tagの既定値(RFC 4577の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 / 7Optionsの最上位ビットを見る
VPN Route TagType 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 ビットが効いている)
1PE2 に disable-dn-bit-checkPE2 が OSPF 経路を採る(ospf 100)。DN ビットだけが止めていたことが分かる
2PE2 の disable-dn-bit-check を外すBGP 由来に戻る
3PE3 に違う domain-id(サイト2の経路が Type 5 になる)Type 5 になり、VPN Route Tag(3489725929)が付く
4PE2 に disable-dn-bit-check(Type 5 の状態で)それでも BGP 由来のまま。 DN を無視してもタグが止めている
5STEP 3・4 を戻す(最終状態)元に戻る

LSAは戻ってきている

CE-A1a が PE1 から受け取った Type 3 の LSA です。Options に DN が立っています。

STEP 0 CE-A1a が受け取った Type 3 LSA
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 です。

STEP 0 PE2 の LSDB(VRF 側の OSPF)
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 が書いているとおりの状態になっています。

STEP 0 PE2 の 10.1.2.1/32
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 ビットのチェックを無効にします。

STEP 1 PE2 に投入した設定
router ospf 100
 vrf CUST-A
  disable-dn-bit-check
 !
!
end

経路が OSPF 由来に変わりました。距離 110 の OSPF が距離 200 の iBGP に勝つので、PE2 はサイト1へ向けて転送するようになります。これが一周の入口です。

STEP 1 PE2 の 10.1.2.1/32
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 の経路に戻ります。

STEP 2 PE2 の 10.1.2.1/32
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 にします。

STEP 3 PE3 に投入した設定
router ospf 100
 vrf CUST-A
  domain-id type 0005 value 000000000003
 !
!
end

CE-A1b が受け取った Type 5 の LSA です。Options の DN に加えて、External Route Tag に 3489725929 が入っています。AS 65001 から自動計算された値(0xD0000000 + 65001)です。

STEP 3 CE-A1b が受け取った Type 5 LSA
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 です。

STEP 3 No.2 LS Update(PE1 → CE-A1a)の AS-External-LSA(tshark -V の抜粋)
        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: 3489725929
上のtshark出力のパケット(No.2 LS Update)のpcapをダウンロード

2つの仕組みは独立して効く

Type 5 になった状態で、もう一度 DN ビットのチェックを外します。

STEP 4 PE2 に投入した設定
router ospf 100
 vrf CUST-A
  disable-dn-bit-check
 !
!
end

設定は確かに入っています。

STEP 4 PE2 の router ospf 100
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 ビットを無視させても、タグのほうが止めています。

STEP 4 PE2 の 10.1.2.1/32
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.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:初期状態

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

STEP 1:PE2 に disable-dn-bit-check

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

STEP 2:PE2 の disable-dn-bit-check を外す

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

STEP 3:PE3 に違う domain-id(サイト2の経路が Type 5 になる)

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

STEP 4:PE2 に disable-dn-bit-check(Type 5 の状態で)

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

STEP 5:STEP 3・4 を戻す(最終状態)

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

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

STEPPE1-CE-A1a間PE2-CE-A1b間
0pcappcap
1pcappcap
2pcappcap
3pcappcap
4pcappcap
5pcappcap

まとめ