読者です 読者をやめる 読者になる 読者になる

らくがきちょう

なんとなく

はじめての LISP (Location/Identifier Separation Protocol)

Cisco Network LISP

現在、広く使われている IP アドレスは「ネットワークアドレスを頼りにルーティングし」「ホストアドレスを頼りにエンドポイントに到達する」という、ふたつの機能があります。ネットワークのプロトコルである LISP (Locator/Identifier Separation Protocol) を使うと、これらふたつの機能を分離して扱うことで、よりネットワークを拡張出来るというメリットがあります。今回は最小の構成を作り、Cisco IOSLISP を設定してみます。

尚、プログラミング言語にも LISP (LISt Processor) という同じ名前のものがありますが無関係です。

用語説明

LISP の用語を構成図に当てはめると以下のようになります。

f:id:sig9:20160513124023p:plain

以下では各々の用語について解説していきます。

ITR / ETR (Ingress Tunnel Router / Egress Tunnel Router)

LISP は IP を IP でカプセル化して通信を行います。送信側と宛先側でカプセル化/解除を行うトンネルルータのことを以下のように呼びます。

略称 正式名称 説明
ITR Ingress Tunnel Router 送信側サイトでカプセル化を行うトンネルルータ
ETR Egress Tunnel Router 宛先側サイトでカプセル化を解除するトンネルルータ

実際の通信では ITR と ETR 間でトンネルを張り、その中をカプセル化したパケットを流します。トンネルルータは ITR と ETR 両方の役割を担う (送信もするが、受信もする) ので、xTR という表現も RFC 上で使われています。

EID / RLOC (Endpoint ID / Routing Locator)

冒頭でも記載した通り、従来の IP アドレスは「位置情報」「識別情報」をひとつのアドレスで表現していましたが、LISP ではこれらを以下のように分けて管理します。

略称 正式名称 説明
EID Endpoint ID 端末を識別する情報
RLOC Routing Locator LISP のトンネルルータに割り当てるアドレス。送信側トンネルルータの RLOC と宛先側トンネルルータの RLOC 間で UDP のトンネルを生成し、実際の通信はその中を通す

実際の通信は ITR 〜 ETR 間のトンネル内を通りますので、中継区間のルータは RLOC のアドレスだけ解決出来れば良く、EID、つまり LAN 側の経路情報を保持する必要ありません。ですので、LISP には「中継区間での経路保持数を減らせる」というメリットがあります。

MS / MR (Mapping Server / Mapping Resolver)

初期状態では ITR は ETR の RLOC を保持していません。実際の通信要求があり、ETR の RLOC を解決する必要が出た場合、"LISP マッピングサービス" をという仕組みを使って宛先 EID と RLOC の紐付けを解決します。この「EID と RLOC の紐付け」のことを "マッピング" と呼びます。LISP マッピングサービスの仕組みは主に以下で構成されています。

略称 正式名称 説明
MS Mapping Server ETR からの登録要求を受け付ける
MR Mapping Resolver ITR からの問い合わせを受け付ける

LISP マッピングサービスを使ったマッピング情報の解決は次で詳しく説明します。

LISP マッピングサービス

LISP マッピングサービスの動作シーケンス図を以下に示します。

f:id:sig9:20160513140808p:plain

  1. 予め、Mapping Server には EID / RLOC のマッピング情報を登録 (≒ 設定) しておきます。
  2. ETR は自分が管理している EID / RLOC のマッピング情報を MS へ Map-Register メッセージで送信します。MS は受信した Map-Register メッセージ内のマッピング情報を自身に登録されているマッピング情報と照会し、一致していれば ETR の登録を完了します。もし不一致であれば MS に ETR が登録されない為、以下に続く Map-Resolver メッセージに応答出来ず、結果的に通信が出来ません。
  3. LAN 内から別拠点宛の通信を ITR が受信します。ここで言う ""別拠点宛通信の宛先" 情報が「EID」になります。
  4. ITR は EID を管理する RLOC を解決する為、最初に ITR 自身が保持するマッピング・キャッシュ情報を照会します。キャッシュ中に EID / RLOC のマッピング情報が無ければ Map-Request メッセージを MR へ送信します。
  5. MR は MS へ Map-Request メッセージを転送します。
  6. MS は受信した Map-Request メッセージの EID を自身に登録されたマッピング情報と照会します。マッピング情報があれば、紐付く RLOC (これが ETR になります) へ Map-Request メッセージを転送します。
  7. ETR は ITR へ Map-Reply メッセージを送信します。
  8. Map-Reply メッセージした ITR は EID / RLOC のマッピング情報をキャッシュします。次回以降の通信ではこのキャッシュを用いることで MR への照会を省略出来ます。
  9. 端末 〜 端末間の通信が成立します。

MR から MS への問い合わせは LISP ALT (Alternative Logical Topology) や LISP DDT (Delegated Database Tree) といった仕組みを使うそうです。しかし、ひとつの組織内だけで LISP を使うのであれば MS と MR を同じルータに兼務させることで ALT や DDT を用いないシンプルな構成にするのが一般的だそうです。

Priority と Weight

LISP では同じ EID に対して複数の RLOC を登録することが出来ます。この場合、RLOC のうちもっとも Priority 値が高い RLOC が利用されます。もし複数の RLOC の Priority 値が同じであれば、各々の Weight 値の比率に応じて負荷分散を行います。

検証構成図

以下の構成で LISP を設定してみます。MS と MR は一台のルータで兼務します。検証環境は VIRL で構築し、ルータは全て IOSv 15.6(2)T を利用しています。(サイト内では無い) コアネットワーク部分は OSPF でルーティングさせています。

f:id:sig9:20160513140814p:plain

コンフィグ

各ルータのコンフィグは以下の通りです。

xTR1

xTR1 の全体コンフィグは以下の通りです。

hostname xTR1
!
interface GigabitEthernet0/1
 ip address 10.0.1.1 255.255.255.0
 ip ospf network point-to-point
 ip ospf 65000 area 0.0.0.0
 no shutdown
!
interface GigabitEthernet0/2
 ip address 192.168.1.254 255.255.255.0
 no shutdown
!
router lisp
 locator-set SITE-1
  10.0.1.1 priority 1 weight 1
  exit
 !
 eid-table default instance-id 0
  database-mapping 192.168.1.0/24 locator-set SITE-1
  exit
 !
 loc-reach-algorithm rloc-probing
 ipv4 itr map-resolver 10.0.3.3
 ipv4 itr
 ipv4 etr map-server 10.0.3.3 key SITE-1-KEY
 ipv4 etr
 exit
!
router ospf 65000
!
end

以下、コンフィグのポイントを説明していきます。LISP のプロセスは router lisp で開始します。locator-set [SITENAME] でサイトの定義をし、そのサイトに紐付ける RLOC のアドレスを定義します。このアドレスは通常、自身のルータが持つ WAN 向けインターフェイスのうち、いずれかのアドレスになると思います。今回は負荷分散しないので Priority や Weight は意味を持ちませんので、適当に 1 を指定しています。

router lisp
 locator-set SITE-1
  10.0.1.1 priority 1 weight 1

MS へ登録する EID は database-mapping でサイト名と紐付け、設定します。

eid-table default instance-id 0
 database-mapping 192.168.1.0/24 locator-set SITE-1

ITR として利用する MR のアドレスは ipv4 itr map-resolver [MR-ADDRESS] で設定します。ETR として利用する MS のアドレスは ipv4 etr map-server [MS-ADDRESS] key [KEY-STRING] で設定します。

ipv4 itr map-resolver 10.0.3.3
ipv4 itr
ipv4 etr map-server 10.0.3.3 key SITE-1-KEY
ipv4 etr

xTR2

xTR2 の全体コンフィグは以下の通りです。xTR1 と基本的には同じです。

hostname xTR2
!
interface GigabitEthernet0/1
 ip address 10.0.2.2 255.255.255.0
 ip ospf network point-to-point
 ip ospf 65000 area 0.0.0.0
 no shutdown
!
interface GigabitEthernet0/2
 ip address 192.168.2.254 255.255.255.0
 no shutdown
!
router lisp
 locator-set SITE-2
  10.0.2.2 priority 1 weight 1
  exit
 !
 eid-table default instance-id 0
  database-mapping 192.168.2.0/24 locator-set SITE-2
  exit
 !
 loc-reach-algorithm rloc-probing
 ipv4 itr map-resolver 10.0.3.3
 ipv4 itr
 ipv4 etr map-server 10.0.3.3 key SITE-2-KEY
 ipv4 etr
 exit
!
router ospf 65000
!
end

MS/MR

上述の通り、今回の構成では MS と MR を一台のルータに兼務させます。MS/MR の全コンフィグは以下の通りです。

hostname MSMR
!
interface GigabitEthernet0/1
 ip address 10.0.3.3 255.255.255.0
 ip ospf network point-to-point
 ip ospf 65000 area 0.0.0.0
 no shutdown
!
router lisp
 site SITE-1
  authentication-key SITE-1-KEY
  eid-prefix 192.168.1.0/24
  exit
 !
 site SITE-2
  authentication-key SITE-2-KEY
  eid-prefix 192.168.2.0/24
  exit
 !
 ipv4 map-server
 ipv4 map-resolver
 exit
!
router ospf 65000
!
end

MS として Map-Register メッセージを受信した際に照会する EID の情報は eid-prefix [PREFIX/MASK] で設定します。また、ETR と同じ認証キーを authentication-key [KEY-STRING] で設定しておきます。

router lisp
 site SITE-1
  authentication-key SITE-1-KEY
  eid-prefix 192.168.1.0/24
  exit
 !
 site SITE-2
  authentication-key SITE-2-KEY
  eid-prefix 192.168.2.0/24
  exit
 !
 ipv4 map-server
 ipv4 map-resolver
 exit

INTERNET

中継ルータは、とりあえず INTERNET という名前にしました。全コンフィグは以下の通りです。アドレスと OSPF を喋らせているだけで、LISP は設定していません。

hostname INTERNET
!
interface GigabitEthernet0/1
 ip address 10.0.1.9 255.255.255.0
 ip ospf network point-to-point
 ip ospf 65000 area 0.0.0.0
 no shutdown
!
interface GigabitEthernet0/2
 ip address 10.0.2.9 255.255.255.0
 ip ospf network point-to-point
 ip ospf 65000 area 0.0.0.0
 no shutdown
!
interface GigabitEthernet0/3
 ip address 10.0.3.9 255.255.255.0
 ip ospf network point-to-point
 ip ospf 65000 area 0.0.0.0
 no shutdown
!
router ospf 65000
!
end

A

SITE-1 側の端末見立てのルータは A としました。全コンフィグは以下の通りです。

hostname A
!
interface GigabitEthernet0/1
 ip address 192.168.1.111 255.255.255.0
 no shutdown
!
ip route 0.0.0.0 0.0.0.0 192.168.1.254
!
end

B

SITE-2 側の端末見立てのルータは B としました。全コンフィグは以下の通りです。

hostname B
!
interface GigabitEthernet0/1
 ip address 192.168.2.222 255.255.255.0
 no shutdown
!
ip route 0.0.0.0 0.0.0.0 192.168.2.254
!
end

状態確認コマンド

LISP に関する基本的な確認コマンドは以下の通りです。「MS/MR」欄や「xTR」欄に "○" が付いているのは『そのルータでよく利用するコマンド』です。"×" が付いているのは『実行しても殆ど意味が無い、または無意味なコマンド』です。

コマンド MS/MR xTR 説明
show lisp session LISP セッションの確立状況を確認出来る
show lisp site × サイトごとのマッピング情報を確認出来る
show ip lisp database × ETR 自身が管理しているマッピング情報を表示する
show ip lisp map-cache × ITR がキャッシュしているマッピング情報を表示する

初期状態

MS/MR

Map-Register メッセージ受信以前の初期状態では show lisp session を確認しても何も表示されません。

MSMR# show lisp session

show lisp site では MS 上に設定した EID の情報が表示されます。但し、まだ ETR から Map-Register メッセージを受信していない為、Last Register が「never」表示になっています。

MSMR# show lisp site
LISP Site Registration Information
* = Some locators are down or unreachable
# = Some registrations are sourced by reliable transport

Site Name      Last      Up     Who Last             Inst     EID Prefix
               Register         Registered           ID
SITE-1         never     no     --                            192.168.1.0/24
SITE-2         never     no     --                            192.168.2.0/24

MS や MR では LISP マッピングサービスは提供していますが、自分自身には LAN が無いので、show ip lisp database を確認しても何も表示されません。

MSMR# show ip lisp database
% No local database entries configured.

MS や MR が Map-Reply を受信することは無く、マッピング情報をキャッシュすることはありません。マッピング情報をキャッシュするのは Map-Reply を受信した ITR だけです。ですので、show ip lisp map-cache を確認しても何も表示されません。

MSMR# show ip lisp map-cache

xTR1

xTR 側で show lisp session を確認すると、xTR 自身に表示されている MR のアドレスが表示されます。しかし、まだ MR と通信出来ていない為、State が Unknown になっています。

xTR1# show lisp session

Sessions for VRF default, total: 1, established: 0
Peer                           State      Up/Down        In/Out    Users
10.0.3.3                       Unknown    00:04:26        0/0      1

show ip lisp database を確認すると自身が管理しているマッピング情報が表示されます。

xTR1# show ip lisp database
LISP ETR IPv4 Mapping Database for EID-table default (IID 0), LSBs: 0x0
Entries total 1, no-route 0, inactive 0

192.168.1.0/24, locator-set SITE-1
  Locator   Pri/Wgt  Source     State
  10.0.1.1    1/1    cfg-addr   no-route

まだ ETR からの Map-Reply を受信しておらず、キャッシュが生成されていない為、show ip lisp map-cache を確認しても何も表示されません。

xTR1# show ip lisp map-cache
LISP IPv4 Mapping Cache for EID-table default (IID 0), 1 entries

0.0.0.0/0, uptime: 00:08:17, expires: never, via static send map-request
  Negative cache entry, action: send-map-request

xTR2

xTR2 も基本的には xTR1 と同様です。

xTR2# show lisp session

Sessions for VRF default, total: 1, established: 0
Peer                           State      Up/Down        In/Out    Users
10.0.3.3                       Unknown    00:05:31        0/0      1
xTR2# show ip lisp database
LISP ETR IPv4 Mapping Database for EID-table default (IID 0), LSBs: 0x0
Entries total 1, no-route 0, inactive 0

192.168.2.0/24, locator-set SITE-2
  Locator   Pri/Wgt  Source     State
  10.0.2.2    1/1    cfg-addr   no-route
xTR2# show ip lisp map-cache
LISP IPv4 Mapping Cache for EID-table default (IID 0), 1 entries

0.0.0.0/0, uptime: 00:09:15, expires: never, via static send map-request
  Negative cache entry, action: send-map-request

Map-Register 送信後の状態

xTR1、xTR2、MS/MR 間を接続し、ETR から MS へ Map-Register が送信された後の状態を確認してみます。

MS/MR

show lisp session を確認すると xTR とセッションが確立していることが分かります。

MSMR# show lisp session

Sessions for VRF default, total: 2, established: 2
Peer                           State      Up/Down        In/Out    Users
10.0.1.1                       Up         00:00:18        1/3      1
10.0.2.2                       Up         00:00:14        1/3      1

show lisp site を確認すると Up が yes になっており、かつ、最後に Map-Register メッセージを受信してからの経過時間が表示されています。

MSMR# show lisp site
LISP Site Registration Information
* = Some locators are down or unreachable
# = Some registrations are sourced by reliable transport

Site Name      Last      Up     Who Last             Inst     EID Prefix
               Register         Registered           ID
SITE-1         00:00:18  yes#   10.0.1.1                      192.168.1.0/24
SITE-2         00:00:14  yes#   10.0.2.2                      192.168.2.0/24

xTR1

show lisp session を確認すると、xTR でもセッションが確立していることが分かります。

xTR1# show lisp session

Sessions for VRF default, total: 1, established: 1
Peer                           State      Up/Down        In/Out    Users
10.0.3.3                       Up         00:02:07        3/1      1

show ip lisp database の表示も特に変わりません。

xTR1# show ip lisp database
LISP ETR IPv4 Mapping Database for EID-table default (IID 0), LSBs: 0x1
Entries total 1, no-route 0, inactive 0

192.168.1.0/24, locator-set SITE-1
  Locator   Pri/Wgt  Source     State
  10.0.1.1    1/1    cfg-addr   site-self, reachable

同じく、show ip lisp map-cache の表示も特に変わりません。

xTR1# show ip lisp map-cache
LISP IPv4 Mapping Cache for EID-table default (IID 0), 1 entries

0.0.0.0/0, uptime: 00:12:44, expires: never, via static send map-request
  Negative cache entry, action: send-map-request

xTR2

xTR2 も基本的には xTR1 と同様です。

xTR2# show lisp session

Sessions for VRF default, total: 1, established: 1
Peer                           State      Up/Down        In/Out    Users
10.0.3.3                       Up         00:03:01        3/1      1
xTR2# show ip lisp database
LISP ETR IPv4 Mapping Database for EID-table default (IID 0), LSBs: 0x1
Entries total 1, no-route 0, inactive 0

192.168.2.0/24, locator-set SITE-2
  Locator   Pri/Wgt  Source     State
  10.0.2.2    1/1    cfg-addr   site-self, reachable
xTR2# show ip lisp map-cache
LISP IPv4 Mapping Cache for EID-table default (IID 0), 1 entries

0.0.0.0/0, uptime: 00:13:29, expires: never, via static send map-request
  Negative cache entry, action: send-map-request

Map-Request 送信後の状態

A から B へ Ping することで Map-Request メッセージが送信された状態を確認してみます。

A

B (192.168.2.222) 宛に Ping してみます。2 発、Ping 欠けがあった後、通信出来るようになりました。

A# ping 192.168.2.222
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.2.222, timeout is 2 seconds:
..!!!
Success rate is 60 percent (3/5), round-trip min/avg/max = 9/9/10 ms

MS/MR

MS/MR の表示は特に変わりません。

MSMR# show lisp session

Sessions for VRF default, total: 2, established: 2
Peer                           State      Up/Down        In/Out    Users
10.0.1.1                       Up         00:04:17        1/3      1
10.0.2.2                       Up         00:04:13        1/3      1
MSMR# show lisp site
LISP Site Registration Information
* = Some locators are down or unreachable
# = Some registrations are sourced by reliable transport

Site Name      Last      Up     Who Last             Inst     EID Prefix
               Register         Registered           ID
SITE-1         00:04:17  yes#   10.0.1.1                      192.168.1.0/24
SITE-2         00:04:13  yes#   10.0.2.2                      192.168.2.0/24

xTR1

show lisp sessionshow ip lisp database の表示は変わりません。

xTR1# show lisp session

Sessions for VRF default, total: 1, established: 1
Peer                           State      Up/Down        In/Out    Users
10.0.3.3                       Up         00:04:49        3/1      1
xTR1# show ip lisp database
LISP ETR IPv4 Mapping Database for EID-table default (IID 0), LSBs: 0x1
Entries total 1, no-route 0, inactive 0

192.168.1.0/24, locator-set SITE-1
  Locator   Pri/Wgt  Source     State
  10.0.1.1    1/1    cfg-addr   site-self, reachable

ETR から Map-Reply メッセージを受信したのでマッピング情報をキャッシュした為、show ip lisp map-cache でキャッシュを確認することが出来ます。

xTR1# show ip lisp map-cache
LISP IPv4 Mapping Cache for EID-table default (IID 0), 2 entries

0.0.0.0/0, uptime: 00:15:25, expires: never, via static send map-request
  Negative cache entry, action: send-map-request
192.168.2.0/24, uptime: 00:00:54, expires: 23:59:06, via map-reply, complete
  Locator   Uptime    State      Pri/Wgt
  10.0.2.2  00:00:54  up           1/1

xTR2

xTR2 も基本的には xTR1 と同様です。

xTR2# show lisp session

Sessions for VRF default, total: 1, established: 1
Peer                           State      Up/Down        In/Out    Users
10.0.3.3                       Up         00:04:55        3/1      1
xTR2# show ip lisp database
LISP ETR IPv4 Mapping Database for EID-table default (IID 0), LSBs: 0x1
Entries total 1, no-route 0, inactive 0

192.168.2.0/24, locator-set SITE-2
  Locator   Pri/Wgt  Source     State
  10.0.2.2    1/1    cfg-addr   site-self, reachable
xTR2# show ip lisp map-cache
LISP IPv4 Mapping Cache for EID-table default (IID 0), 2 entries

0.0.0.0/0, uptime: 00:15:23, expires: never, via static send map-request
  Negative cache entry, action: send-map-request
192.168.1.0/24, uptime: 00:01:03, expires: 23:59:57, via map-reply, complete
  Locator   Uptime    State      Pri/Wgt
  10.0.1.1  00:01:03  up           1/1