IS-ISの複数エリアアドレス(マルチホーミング)とエリアの統合・分割
IS-ISのルータには、ISO方式のアドレスであるNET(Network Entity Title)を設定します (詳細はIS-ISのNSAPアドレスとNET)。このNETは1台に複数設定できます。 エリアを無停止で作り替えるための仕組みで、エリアの統合と分割はこれを使って行います。
規格は「1つのエリアに複数の同義のエリアアドレス」を認めている
ISO/IEC 10589:2002(第2版)の7.1.5は、1つのエリアが複数のエリアアドレスを持つことを認めています。 理由として挙げられているのは次の2つです。
- ルーティングドメイン内でアドレスを割り当てる機関が複数あることがあり、そのたびにエリアを分けるのは効率的でない
- エリアを2つに分けたり、複数のエリアを1つにまとめたりする再編が必要になることがある。 1エリアに1つのアドレスしか許されないと、この再編を運用中に行えない
複数のアドレスは管理パラメータ manualAreaAddresses で保持され、そのISのすべての
manualAreaAddresses とSystem IDの組み合わせが、そのISの有効なNETになります。
| 制約 | 内容 |
|---|---|
| System ID | すべてのNETで同一でなければならない。違えられるのはArea IDだけ |
| 数の上限 | 管理パラメータ maximumAreaAddresses。すべてのISが少なくとも3をサポートしなければならない(7.1.5) |
| 値の一致 | maximumAreaAddresses はPDUで交換され、エリア内で値が一致しているかが検査される。そろっていないと隣接が確立できなかったり、エリアが分断されたりする |
レベル1の隣接は「共通のアドレスが1つ以上」で成立する
7.1.5は、レベル1のIS同士が隣接するには両者の manualAreaAddresses に少なくとも1つ共通の
エリアアドレスがあればよいとしています。7.1.4 d) も、エンドシステムがレベル1のISの隣接になれる条件として
「自分のエリアアドレスが、相手のNETのエリアアドレスか、相手の manualAreaAddresses の他の項目と一致すること」を挙げています。
ここから2つのことが導けます。
- 複数のエリアに同時に所属するのではない。 複数のアドレスを設定すると、それらのエリアは1つに統合される
- 統合は片側だけでも始まる。 境界のルータに相手のエリアアドレスを足せば、その時点で共通のアドレスができ、 レベル1の隣接が成立する
統合と分割の手順
エリアの再編は、両方のアドレスをいったん境界のルータに持たせてから、不要なほうを外す順で行います。
| 操作 | 手順 |
|---|---|
| 統合 | エリアAの境界にBのアドレスを足す → エリアBの境界にもAのアドレスを足す |
| 分割 | 分けたい側から相手のアドレスだけを外す → もう片方からも外す |
順序を誤ると、エリアが意図しない形に割れます。 共通のアドレスが先に無くなると、そのルータは 同じエリアだったはずの隣接を失います。後半でその壊れ方を実機で確認します。
検証構成
XRd 26.1.1を6台使い、エリアの境界を2台にしています(R2・R3)。境界が2台あると、 エリアアドレスの追加・削除を片側だけ行った状態を観測できます。
| ルータ | is-type | NET | Lo0 |
|---|---|---|---|
| R1 | level-1 | 49.0001.0010.0100.1001.00 | 1.1.1.1/32 |
| R5 | level-1 | 49.0001.0050.0500.5005.00 | 5.5.5.5/32 |
| R2 | level-1-2 | 49.0001.0020.0200.2002.00 | 2.2.2.2/32 |
| R3 | level-1-2 | 49.0002.0030.0300.3003.00 | 3.3.3.3/32 |
| R4 | level-1 | 49.0002.0040.0400.4004.00 | 4.4.4.4/32 |
| R6 | level-1 | 49.0002.0060.0600.6006.00 | 6.6.6.6/32 |
検証の全体像
| STEP | 操作 | 確かめること |
|---|---|---|
| 0 | 初期状態 | R2-R3 はレベル2のみ。レベル1のLSDBは各エリア3台分 |
| 1 | R2に 49.0002 を追加(片側だけ) | 共通のアドレスができ、R2-R3 にレベル1の隣接が成立するか |
| 2 | R3に 49.0001 を追加(両側) | エリアが1つに統合され、LSDBが6台分になるか |
| 3 | R2から 49.0001 を削除(誤った分割) | R1・R5 と共通のアドレスが無くなり、隣接が落ちるか |
| 4 | R2に 49.0001 を戻す | 復旧 |
| 5 | R3から 49.0001 を削除 | 正しい分割の片側 |
| 6 | R2から 49.0002 を削除 | 分割完了。初期状態へ |
| 7 | R2のNETを3つにし、4つ目を投入 | maximumAreaAddresses の上限で拒否されるか |
| 8 | 追加した2つを削除(最終状態) | 初期状態と同じ |
片側だけ足してもレベル1の隣接は成立する
初期状態では、R2 と R3 はArea IDが違うのでレベル2の隣接だけです。
RP/0/RP0/CPU0:R2#show isis neighbors
Sun Oct 4 06:30:07.424 UTC
IS-IS 1 neighbors:
System Id Interface SNPA State Holdtime Type IETF-NSF
R1 Gi0/0/0/0 *PtoP* Up 25 L1 Capable
R5 Gi0/0/0/2 *PtoP* Up 22 L1 Capable
R3 Gi0/0/0/1 *PtoP* Up 29 L2 Capable
Total neighbor count: 3R2 にだけ 49.0002 のNETを足します。System IDは変えません。
RP/0/RP0/CPU0:R2#show configuration commit changes last 1
Sun Oct 4 06:32:27.761 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
router isis 1
net 49.0002.0020.0200.2002.00
!
endこれで R2 は2つのエリアアドレスを持ちます。
RP/0/RP0/CPU0:R2#show isis
Sun Oct 4 06:34:59.510 UTC
IS-IS Router: 1
System Id: 0020.0200.2002
Hostname: R2
IS Levels: level-1-2
Manual area address(es):
49.0001
49.0002
Routing for area address(es):
49.0001
49.0002
Multi-Instance Id: 0R3 側は何も変えていないのに、R2-R3 の隣接が L1L2 になります。
RP/0/RP0/CPU0:R2#show isis neighbors
Sun Oct 4 06:35:00.422 UTC
IS-IS 1 neighbors:
System Id Interface SNPA State Holdtime Type IETF-NSF
R1 Gi0/0/0/0 *PtoP* Up 24 L1 Capable
R5 Gi0/0/0/2 *PtoP* Up 24 L1 Capable
R3 Gi0/0/0/1 *PtoP* Up 28 L1L2 Capable
Total neighbor count: 3共通のエリアアドレス(49.0002)が1つできたためで、7.1.5のとおりです。R1・R5 とは 49.0001 が
共通なのでレベル1のままです。この時点で R2 は、2つのエリアを1つにつなぐ役割になっています。
両側に足すとエリアが1つになる
R3 にも 49.0001 を足すと、両側が2つのアドレスを持ちます。
RP/0/RP0/CPU0:R2#show isis
Sun Oct 4 06:39:56.718 UTC
IS-IS Router: 1
System Id: 0020.0200.2002
Hostname: R2
IS Levels: level-1-2
Manual area address(es):
49.0001
49.0002
Routing for area address(es):
49.0001
49.0002
Multi-Instance Id: 0RP/0/RP0/CPU0:R3#show isis
Sun Oct 4 06:40:23.665 UTC
IS-IS Router: 1
System Id: 0030.0300.3003
Hostname: R3
IS Levels: level-1-2
Manual area address(es):
49.0002
49.0001
Routing for area address(es):
49.0002
49.0001
Multi-Instance Id: 0レベル1のLSDBは6台分になります。2つだったエリアが1つになった、ということです。
RP/0/RP0/CPU0:R2#show isis database
Sun Oct 4 06:39:58.688 UTC
IS-IS 1 (Level-1) Link State Database
LSPID LSP Seq Num LSP Checksum LSP Holdtime/Rcvd ATT/P/OL
R1.00-00 0x00000006 0xdcb5 545 /1200 0/0/0
R2.00-00 * 0x0000000b 0xe2e0 756 /* 0/0/0
R3.00-00 0x0000000d 0x917d 1044 /1200 0/0/0
R4.00-00 0x00000006 0x2cab 756 /836 0/0/0
R5.00-00 0x00000006 0xce0a 543 /1200 0/0/0
R6.00-00 0x00000005 0x1868 756 /1001 0/0/0
Total Level-1 LSP count: 6 Local Level-1 LSP count: 1
IS-IS 1 (Level-2) Link State Database
LSPID LSP Seq Num LSP Checksum LSP Holdtime/Rcvd ATT/P/OL
R2.00-00 * 0x0000000c 0xd845 757 /* 0/0/0
R3.00-00 0x0000000c 0x34e4 757 /1200 0/0/0
Total Level-2 LSP count: 2 Local Level-2 LSP count: 1分割は順序を誤るとエリアが割れる
分割のつもりで、R2 から 49.0001(R1・R5 と共通だったほう)を先に削除します。
RP/0/RP0/CPU0:R2#show configuration commit changes last 1
Sun Oct 4 06:42:17.245 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
router isis 1
no net 49.0001.0020.0200.2002.00
!
endR2 の隣接は R3 だけになります。
RP/0/RP0/CPU0:R2#show isis neighbors
Sun Oct 4 06:47:09.199 UTC
IS-IS 1 neighbors:
System Id Interface SNPA State Holdtime Type IETF-NSF
R3 Gi0/0/0/1 *PtoP* Up 22 L1L2 Capable
Total neighbor count: 1R1 側のsyslogには理由が出ます。
RP/0/RP0/CPU0:Oct 4 06:42:22.912 UTC: isis[1003]: %ROUTING-ISIS-5-ADJCHANGE : ISIS (1): Adjacency to R2 (GigabitEthernet0/0/0/0) (L1) Down, Area addr/level differ この状態では6通りの疎通がすべて止まります。R1・R5 はエリアから切り離され、R2 を経由する すべての通信が失われるためです。
| STEP | R1→R4 | R1→R6 | R1→R5 | R4→R1 | R6→R1 | R5→R4 |
|---|---|---|---|---|---|---|
| 0(初期状態) | 100% | 100% | 100% | 100% | 100% | 100% |
| 1(片側だけ統合) | 100% | 100% | 100% | 100% | 100% | 100% |
| 2(統合) | 100% | 100% | 100% | 100% | 100% | 100% |
| 3(誤った分割) | 0% | 0% | 0% | 0% | 0% | 0% |
| 4(戻す) | 100% | 100% | 100% | 100% | 100% | 100% |
| 5・6(正しい分割) | 100% | 100% | 100% | 100% | 100% | 100% |
正しい手順は、分けたい側から「相手のエリアアドレス」だけを外すことです。STEP 5 では R3 から
49.0001 を、STEP 6 では R2 から 49.0002 を外しました。どちらの時点でも疎通は100%のままです。
分割しても、他エリアだったLSPはすぐには消えない
分割した直後の R2 のレベル1 LSDBには、統合中に入った R3・R4・R6 のLSPが残っています。 消えるのを待つのではなく、リフレッシュが来なくなって寿命(MaxAge)で古びて消えます。
RP/0/RP0/CPU0:R2#show isis database
Sun Oct 4 07:01:58.416 UTC
IS-IS 1 (Level-1) Link State Database
LSPID LSP Seq Num LSP Checksum LSP Holdtime/Rcvd ATT/P/OL
R1.00-00 0x00000009 0xd6b8 456 /1199 0/0/0
R2.00-00 * 0x00000013 0x443d 1047 /* 1/0/0
R3.00-00 0x0000000f 0x73ea 746 /1200 0/0/0
R4.00-00 0x00000008 0x28ad 825 /1200 0/0/0
R5.00-00 0x00000008 0xca0c 453 /1199 0/0/0
R6.00-00 0x00000007 0x146a 836 /1200 0/0/0
Total Level-1 LSP count: 6 Local Level-1 LSP count: 1
IS-IS 1 (Level-2) Link State Database
LSPID LSP Seq Num LSP Checksum LSP Holdtime/Rcvd ATT/P/OL
R2.00-00 * 0x00000013 0xe24a 1047 /* 0/0/0
R3.00-00 0x00000013 0xe110 1047 /1199 0/0/0
Total Level-2 LSP count: 2 Local Level-2 LSP count: 1RP/0/RP0/CPU0:R2#show isis database
Sun Oct 4 07:12:23.984 UTC
IS-IS 1 (Level-1) Link State Database
LSPID LSP Seq Num LSP Checksum LSP Holdtime/Rcvd ATT/P/OL
R1.00-00 0x0000000a 0xd4b9 693 /1200 0/0/0
R2.00-00 * 0x00000015 0x403f 1046 /* 1/0/0
R3.00-00 0x0000000f 0x73ea 120 /1200 0/0/0
R4.00-00 0x00000008 0x28ad 199 /1200 0/0/0
R5.00-00 0x00000009 0xc80d 598 /1200 0/0/0
R6.00-00 0x00000007 0x146a 211 /1200 0/0/0
Total Level-1 LSP count: 6 Local Level-1 LSP count: 1
IS-IS 1 (Level-2) Link State Database
LSPID LSP Seq Num LSP Checksum LSP Holdtime/Rcvd ATT/P/OL
R2.00-00 * 0x00000015 0xde4c 1046 /* 0/0/0
R3.00-00 0x00000014 0xdf11 1149 /1200 0/0/0
Total Level-2 LSP count: 2 Local Level-2 LSP count: 1R3・R4・R6 のLSPはシーケンス番号が止まったままで、LSP Holdtime だけが減っています
(R3は746→120)。一方、同じエリアの R1・R5 はシーケンス番号が進み、Holdtimeも更新されています。
エリアアドレスは3つまで
R2 にNETを2つ足して3つにしたうえで、4つ目を投入すると拒否されます。
RP/0/RP0/CPU0:R2(config-isis)#show configuration failed
Sun Oct 4 07:04:47.014 UTC
!! SEMANTIC ERRORS: This configuration was rejected by
!! the system due to semantic errors. The individual
!! errors with each failed configuration command can be
!! found below.
router isis 1
net 49.0005.0020.0200.2002.00
!!% Maximum area address count exceeded: maximum number of area addresses is 3
!
endmaximum number of area addresses is 3 と明示されます。これは7.1.5の「すべてのISが少なくとも3を
サポートしなければならない」の実装で、XRd 26.1.1に上限を変えるコマンドはありません。
System IDは変えられない
複数のNETで違えられるのはArea IDだけです。System IDの違うNETを足そうとすると拒否されます。
RP/0/RP0/CPU0:R1(config-isis)#show configuration failed
Sun Oct 4 06:20:49.138 UTC
!! SEMANTIC ERRORS: This configuration was rejected by
!! the system due to semantic errors. The individual
!! errors with each failed configuration command can be
!! found below.
router isis 1
net 49.0001.0099.0999.9999.00
!!% System ID must not change: 0010.0100.1001
!
end検証Configおよびshow結果
各STEPで6台すべてから取得しています。検証Configはこの..._run.txtです(最終状態はSTEP 8のもの)。
| ファイル | 内容 |
|---|---|
..._show.txt | show一式(役割ごとに30〜32コマンド)。show isis / show isis neighbors detail / show isis database detail / show isis database level 1 / level 2 / show isis adjacency-log / show route isis ほか |
..._ping.txt | ping(20発)とtraceroute |
..._clear.txt | そのSTEPでクリアしたインタフェースカウンタの記録 |
..._commit.cfg | そのSTEPで実際にcommitされた設定だけ |
..._failed.cfg | 拒否された設定(STEP 7の4つ目のNET) |
..._log.txt | そのSTEPの範囲だけに絞ったshow logging |
..._run.txt | そのSTEP時点のshow running-config(=そのSTEPの検証Config) |
..._trace.txt | show isis trace standard | include ADJ |
STEP 0:初期状態(2つのエリア)
| ルータ | show出力 | ping / traceroute | clear | 投入した設定 | 拒否された設定 | syslog | running-config | trace |
|---|---|---|---|---|---|---|---|---|
| R1 | show | ping | clear | — | — | log | run | trace |
| R2 | show | — | clear | — | — | log | run | trace |
| R3 | show | — | clear | — | — | log | run | trace |
| R4 | show | ping | clear | — | — | log | run | trace |
| R5 | show | ping | clear | — | — | log | run | trace |
| R6 | show | ping | clear | — | — | log | run | trace |
STEP 1:R2に 49.0002 のNETを追加(片側だけ)
| ルータ | show出力 | ping / traceroute | clear | 投入した設定 | 拒否された設定 | syslog | running-config | trace |
|---|---|---|---|---|---|---|---|---|
| R1 | show | ping | clear | — | — | log | run | trace |
| R2 | show | — | clear | commit | — | log | run | trace |
| R3 | show | — | clear | — | — | log | run | trace |
| R4 | show | ping | clear | — | — | log | run | trace |
| R5 | show | ping | clear | — | — | log | run | trace |
| R6 | show | ping | clear | — | — | log | run | trace |
STEP 2:R3に 49.0001 のNETを追加(両側=統合)
| ルータ | show出力 | ping / traceroute | clear | 投入した設定 | 拒否された設定 | syslog | running-config | trace |
|---|---|---|---|---|---|---|---|---|
| R1 | show | ping | clear | — | — | log | run | trace |
| R2 | show | — | clear | — | — | log | run | trace |
| R3 | show | — | clear | commit | — | log | run | trace |
| R4 | show | ping | clear | — | — | log | run | trace |
| R5 | show | ping | clear | — | — | log | run | trace |
| R6 | show | ping | clear | — | — | log | run | trace |
STEP 3:R2から 49.0001 を削除(誤った分割)
| ルータ | show出力 | ping / traceroute | clear | 投入した設定 | 拒否された設定 | syslog | running-config | trace |
|---|---|---|---|---|---|---|---|---|
| R1 | show | ping | clear | — | — | log | run | trace |
| R2 | show | — | clear | commit | — | log | run | trace |
| R3 | show | — | clear | — | — | log | run | trace |
| R4 | show | ping | clear | — | — | log | run | trace |
| R5 | show | ping | clear | — | — | log | run | trace |
| R6 | show | ping | clear | — | — | log | run | trace |
STEP 4:R2に 49.0001 を戻す
| ルータ | show出力 | ping / traceroute | clear | 投入した設定 | 拒否された設定 | syslog | running-config | trace |
|---|---|---|---|---|---|---|---|---|
| R1 | show | ping | clear | — | — | log | run | trace |
| R2 | show | — | clear | commit | — | log | run | trace |
| R3 | show | — | clear | — | — | log | run | trace |
| R4 | show | ping | clear | — | — | log | run | trace |
| R5 | show | ping | clear | — | — | log | run | trace |
| R6 | show | ping | clear | — | — | log | run | trace |
STEP 5:R3から 49.0001 を削除(正しい分割の片側)
| ルータ | show出力 | ping / traceroute | clear | 投入した設定 | 拒否された設定 | syslog | running-config | trace |
|---|---|---|---|---|---|---|---|---|
| R1 | show | ping | clear | — | — | log | run | trace |
| R2 | show | — | clear | — | — | log | run | trace |
| R3 | show | — | clear | commit | — | log | run | trace |
| R4 | show | ping | clear | — | — | log | run | trace |
| R5 | show | ping | clear | — | — | log | run | trace |
| R6 | show | ping | clear | — | — | log | run | trace |
STEP 6:R2から 49.0002 を削除(分割完了)
| ルータ | show出力 | ping / traceroute | clear | 投入した設定 | 拒否された設定 | syslog | running-config | trace |
|---|---|---|---|---|---|---|---|---|
| R1 | show | ping | clear | — | — | log | run | trace |
| R2 | show | — | clear | commit | — | log | run | trace |
| R3 | show | — | clear | — | — | log | run | trace |
| R4 | show | ping | clear | — | — | log | run | trace |
| R5 | show | ping | clear | — | — | log | run | trace |
| R6 | show | ping | clear | — | — | log | run | trace |
STEP 7:R2のNETを3つにし、4つ目を投入
| ルータ | show出力 | ping / traceroute | clear | 投入した設定 | 拒否された設定 | syslog | running-config | trace |
|---|---|---|---|---|---|---|---|---|
| R1 | show | ping | clear | — | — | log | run | trace |
| R2 | show | — | clear | commit | failed | log | run | trace |
| R3 | show | — | clear | — | — | log | run | trace |
| R4 | show | ping | clear | — | — | log | run | trace |
| R5 | show | ping | clear | — | — | log | run | trace |
| R6 | show | ping | clear | — | — | log | run | trace |
STEP 8:R2から追加した2つを削除(最終状態)
| ルータ | show出力 | ping / traceroute | clear | 投入した設定 | 拒否された設定 | syslog | running-config | trace |
|---|---|---|---|---|---|---|---|---|
| R1 | show | ping | clear | — | — | log | run | trace |
| R2 | show | — | clear | commit | — | log | run | trace |
| R3 | show | — | clear | — | — | log | run | trace |
| R4 | show | ping | clear | — | — | log | run | trace |
| R5 | show | ping | clear | — | — | log | run | trace |
| R6 | show | ping | clear | — | — | log | run | trace |
パケットキャプチャーはSTEPごとに2区間で取得しています。
| STEP | R1-R2間 | R2-R3間(境界) |
|---|---|---|
| 0 | pcap | pcap |
| 1 | pcap | pcap |
| 2 | pcap | pcap |
| 3 | pcap | pcap |
| 4 | pcap | pcap |
| 5 | pcap | pcap |
| 6 | pcap | pcap |
| 7 | pcap | pcap |
| 8 | pcap | pcap |
参考
| 標準 | タイトル | 概要 |
|---|---|---|
| ISO/IEC 10589:2002(第2版) | Intermediate System to Intermediate System intra-domain routeing information exchange protocol | 複数の同義のエリアアドレスとmanualAreaAddresses・maximumAreaAddressesを定める7.1.5(「すべてのISが少なくとも3をサポートしなければならない」「値はPDUで交換され一致が検査される」)、隣接の条件を定める7.1.4 d)、System IDの構造の7.1.3.2。 |
| RFC 1195 | Use of OSI IS-IS for Routing in TCP/IP and Dual Environments | IS-ISでIPの経路を運ぶための拡張(Integrated IS-IS)。 |
関連記事
- IS-ISとは
- IS-ISのNSAPアドレスとNET(System ID)
- IS-ISの複数エリアアドレス(マルチホーミング)とエリアの統合・分割
- IS-ISのレベル1とレベル2(階層構造)
- IS-ISパケットの種類とヘッダーフォーマット
- IS-ISの隣接関係の確立と状態遷移
- IS-ISのDISと疑似ノード(Pseudonode)
- IS-ISのネットワークタイプ(broadcast / point-to-point)
- IS-ISのメトリック(narrow / wide)
- IS-ISの認証(hello-password / lsp-password)
- IS-ISのLSPとリンクステートデータベース
- IS-ISの主要TLV
- IS-ISのフラッディングとLSDB同期
- IS-ISのSPF計算と経路選択
- IS-ISのECMP(等コストマルチパス)
- IS-ISのATTビットとレベル1のデフォルトルート
- IS-ISのルートリークとup/downビット
- IS-ISの経路集約
- IS-ISのオーバーロードビット
- IS-ISのIPv6対応とマルチトポロジ(TLV 236 / MT ID 2)
- IS-ISのHelloとHolding Time
- IS-ISの収束タイマー(SPF / LSP生成)
- IS-ISのフラッディングのタイマー(LSP送信間隔・再送・CSNP / PSNP)
- IS-ISのリンク障害と経路切り替え
- IS-ISへの再配布(connected / static)
- IS-ISへのBGP経路の再配布