💨

Cisco IOS-XEのARP動作実験メモ

12 min read

ARPの挙動が、CiscoとかのNW機器やWindows、Linuxで異なって良く分からなくなって来たので、Cisco IOS-XEで色々実験してみた時のメモです。
RFCやCiscoのARP関連のドキュメントは読み込んでいないため、考察(推測)も入ってます。悪しからず。

ARPとは

詳細は他のネット記事にお任せして、ポイントだけ記載します。

  • Address Resolution Protocol。EthernetのIPアドレスからMACアドレスを解決するためのプロトコル。
  • ARPリクエストで対象のIPアドレスを持っているノードを問合わせて、ARPリプライで該当ノードからMACアドレス情報が返ってくる。
  • ARPリクエストを受け取ったノードもARPテーブルが更新される。
  • インターフェースのアップ時や、IPアドレス・MACアドレスの変更時は、GARP(Gratuitous ARP)によって、アドレス重複確認やARPテーブル更新が行われる。
  • Cisco IOSの場合、デフォルトのARPキャッシュタイムアウト値は4時間。この間にエントリ更新が無ければ、テーブルから削除される。

NW構成

CiscoのCML Personal 2.1を使って、Cisco IOS-XEベースの仮想プラットフォームCSR1000v×3台を構築しました。バージョンはいずれも16.11.1bです。

1. 新規接続時

まずcsr1~3を互いに接続し、ARPテーブル(show ip arp)を確認しました。NW機器内での処理を確認するために、ARPのDebug機能(debug arp)も有効化しています。

1-1. IPアドレス設定、インターフェース開放

(1) 設定config

csr1
interface GigabitEthernet1
 ip address 10.1.1.1 255.255.255.0
 no shutdown
csr2
interface GigabitEthernet1
 ip address 10.1.1.2 255.255.255.0
 no shutdown
csr3
interface GigabitEthernet1
 ip address 10.1.1.3 255.255.255.0
 no shutdown

(2) パケットキャプチャ

No.1~3 … インターフェース開放後、csr1~3からそれぞれGARPをブロードキャストで送信

No.1のGARP詳細

(3) ARPテーブルと考察

このタイミングでは、自身のIPアドレスのみ登録されています。自身の場合、タイムアウトがなくAgeは「-」になっています。GARPによって各ノードにARPエントリが追加されると思っていましたが、そうではなく「既にエントリがある場合に、Age、MACアドレスが更新される」動きのようです。

csr1
Protocol  Address          Age (min)  Hardware Addr   Type   Interface
Internet  10.1.1.1                -   5254.001b.15c1  ARPA   GigabitEthernet1
csr2
Protocol  Address          Age (min)  Hardware Addr   Type   Interface
Internet  10.1.1.2                -   5254.001a.9cad  ARPA   GigabitEthernet1
csr3
Protocol  Address          Age (min)  Hardware Addr   Type   Interface
Internet  10.1.1.3                -   5254.0008.1e07  ARPA   GigabitEthernet1

1-2. csr1からcsr2へのPing実行

(1) 実行コマンド

3発実行しました。お決まりで1発目が欠けています。

csr1#ping 10.1.1.2 repeat 3
Type escape sequence to abort.
Sending 3, 100-byte ICMP Echos to 10.1.1.2, timeout is 2 seconds:
.!!
Success rate is 66 percent (2/3), round-trip min/avg/max = 1/9/18 ms

(2) パケットキャプチャ

No.1 … 1発目のPing実行をトリガーに、csr1からARPリクエストをブロードキャストで送信
No.2 … csr2からARPリプライを送信元だけにユニキャストで送信
No.3~6 … 2、3発目のPingを実行

No.1のARPリクエスト詳細

No.2のARPリプライ詳細

(3) ARPテーブルと考察

csr1はARPリプライ受信により、csr2のIPアドレスが登録されています。またcsr2のDebugを見ると、csr1からのARPリクエスト受信によってcsr1のIPアドレスが登録されている事が分かります。csr3も同時刻にARPリクエストを受信していますが、変化なしでした。受信したARPリクエストを単純にすべて登録するのではなく、TargetのIPアドレスが自分自身である(相手と通信する予定がある)ことが登録の条件に見えます。

csr1
Protocol  Address          Age (min)  Hardware Addr   Type   Interface
Internet  10.1.1.1                -   5254.001b.15c1  ARPA   GigabitEthernet1
Internet  10.1.1.2                5   5254.001a.9cad  ARPA   GigabitEthernet1
csr2
Protocol  Address          Age (min)  Hardware Addr   Type   Interface
Internet  10.1.1.1                6   5254.001b.15c1  ARPA   GigabitEthernet1
Internet  10.1.1.2                -   5254.001a.9cad  ARPA   GigabitEthernet1
csr3
Protocol  Address          Age (min)  Hardware Addr   Type   Interface
Internet  10.1.1.3                -   5254.0008.1e07  ARPA   GigabitEthernet1
csr2_debug
*Mar  6 18:54:19.588: IP ARP: rcvd req src 10.1.1.1 5254.001b.15c1, dst 10.1.1.2 GigabitEthernet1 tableid 0
*Mar  6 18:54:19.588: IP ARP: creating entry for IP address: 10.1.1.1, hw: 5254.001b.15c1 tableid 0
*Mar  6 18:54:19.588: IP ARP: sent rep src 10.1.1.2 5254.001a.9cad,
                 dst 10.1.1.1 5254.001b.15c1 GigabitEthernet1
csr3_debug
*Mar  6 18:54:19.587: IP ARP: rcvd req src 10.1.1.1 5254.001b.15c1, dst 10.1.1.2 GigabitEthernet1 tableid 0

2. IPアドレス変更時

csr2のIPアドレスを10.1.1.102/24に変更してみます。

(1) 設定config

csr2
interface GigabitEthernet1
 ip address 10.1.1.102 255.255.255.0

(2) パケットキャプチャ

No.26 … csr2からcsr1のIPアドレスに対するARPリクエストを送信
No.27 … csr2からGARPを送信
No.28 … csr1からNo.1のARPリプライ

(3) ARPテーブルと考察

csr2は自身のIPアドレス情報が更新されています。csr1もARPリプライ受信によりcsr2のIPアドレスが登録されています。旧IPアドレスは残ったままです。csr3は変化なしでした。
最初「GARPだけ送信すれば相手のARPテーブルも更新されるのでは?」と思いましたが、別の構成で試したところ、相手に既存エントリがある場合でも、IPアドレスの変更は更新対象にならないようです。

csr1
Protocol  Address          Age (min)  Hardware Addr   Type   Interface
Internet  10.1.1.1                -   5254.001b.15c1  ARPA   GigabitEthernet1
Internet  10.1.1.2                9   5254.001a.9cad  ARPA   GigabitEthernet1
Internet  10.1.1.102              1   5254.001a.9cad  ARPA   GigabitEthernet1
csr2
Protocol  Address          Age (min)  Hardware Addr   Type   Interface
Internet  10.1.1.1                1   5254.001b.15c1  ARPA   GigabitEthernet1
Internet  10.1.1.102              -   5254.001a.9cad  ARPA   GigabitEthernet1
csr3
Protocol  Address          Age (min)  Hardware Addr   Type   Interface
Internet  10.1.1.3                -   5254.0008.1e07  ARPA   GigabitEthernet1

3. IPアドレス重複時

csr2のIPアドレスを10.1.1.3/24に変更し、csr3と重複させてみました。

(1) 設定config

csr2
interface GigabitEthernet1
 ip address 10.1.1.3 255.255.255.0

(2) パケットキャプチャ

No.29 … IPアドレス変更時、csr2からcsr1のIPアドレスに対するARPリクエストを送信
No.30 … csr2からGARPを送信
No.31 … アドレス重複しているcsr3からもGARPを送信
No.32 … csr1からNo.29のARPリプライ
No.33以降 … No.30と31を繰り返し

(3) ARPテーブルと考察

上記No.30と31で、IPアドレスが重複したノードから相互にGARPが送信されることで、csr1の10.1.1.3向けのMACアドレスがフラッピングしているようです。

csr1
csr1#sh ip arp
Protocol  Address          Age (min)  Hardware Addr   Type   Interface
Internet  10.1.1.1                -   5254.001b.15c1  ARPA   GigabitEthernet1
Internet  10.1.1.2               22   5254.001a.9cad  ARPA   GigabitEthernet1
Internet  10.1.1.3                0   5254.001a.9cad  ARPA   GigabitEthernet1
Internet  10.1.1.102             14   5254.001a.9cad  ARPA   GigabitEthernet1
csr1#sh ip arp
Protocol  Address          Age (min)  Hardware Addr   Type   Interface
Internet  10.1.1.1                -   5254.001b.15c1  ARPA   GigabitEthernet1
Internet  10.1.1.2               22   5254.001a.9cad  ARPA   GigabitEthernet1
Internet  10.1.1.3                0   5254.0008.1e07  ARPA   GigabitEthernet1
Internet  10.1.1.102             14   5254.001a.9cad  ARPA   GigabitEthernet1
csr2
Protocol  Address          Age (min)  Hardware Addr   Type   Interface
Internet  10.1.1.1                1   5254.001b.15c1  ARPA   GigabitEthernet1
Internet  10.1.1.3                -   5254.001a.9cad  ARPA   GigabitEthernet1
csr3
Protocol  Address          Age (min)  Hardware Addr   Type   Interface
Internet  10.1.1.3                -   5254.0008.1e07  ARPA   GigabitEthernet1

4. ARPテーブルクリア時

不要な情報がたまって来たので、一旦ここで全てのエントリをクリアしてみます。

(1) 実行コマンド

csr1
clear arp

(2) パケットキャプチャ

No.60 … csr1からGARPを送信
No.61~63 … csr1のARPテーブルに登録されていたIPアドレスに対するARPリクエストを送信
No.64,65 … csr2とcsr3からARPリプライ
No.66,67 … 存在しない10.1.1.102に対するARPリクエストを再送(約10秒間隔で合計3回)

(3) ARPテーブルと考察

ARPのやりとりで、全体的にAgeが0にリフレッシュされています。csr1は10.1.1.102に対するARPリプライが返って来ず、エントリが1つ消えました。csr3はcsr1からのARPリクエスト受信、ARPリプライ送信の過程でARPエントリが追加されていました。

csr1
Protocol  Address          Age (min)  Hardware Addr   Type   Interface
Internet  10.1.1.1                -   5254.001b.15c1  ARPA   GigabitEthernet1
Internet  10.1.1.2                0   5254.001a.9cad  ARPA   GigabitEthernet1
Internet  10.1.1.3                0   5254.0008.1e07  ARPA   GigabitEthernet1
csr2
Protocol  Address          Age (min)  Hardware Addr   Type   Interface
Internet  10.1.1.1                0   5254.001b.15c1  ARPA   GigabitEthernet1
Internet  10.1.1.2                -   5254.001a.9cad  ARPA   GigabitEthernet1
csr3
Protocol  Address          Age (min)  Hardware Addr   Type   Interface
Internet  10.1.1.1                0   5254.001b.15c1  ARPA   GigabitEthernet1
Internet  10.1.1.3                -   5254.0008.1e07  ARPA   GigabitEthernet1

5. MACアドレス変更(機器更改)時

csr2とcsr3のインターフェースを閉塞し、csr3のIPアドレスをcsr2と同じ10.1.1.2に変更の上、開放してみました。

5-1. インターフェース閉塞

(1) 設定config

csr2
interface GigabitEthernet1
 shutdown
csr3
interface GigabitEthernet1
 shutdown

(2) ARPテーブルと考察

csr1のテーブルは変化なしです。csr2とcsr3は閉塞したインターフェースに紐づくエントリが消失しました。

csr1
Protocol  Address          Age (min)  Hardware Addr   Type   Interface
Internet  10.1.1.1                -   5254.001b.15c1  ARPA   GigabitEthernet1
Internet  10.1.1.2               22   5254.001a.9cad  ARPA   GigabitEthernet1
Internet  10.1.1.3               22   5254.0008.1e07  ARPA   GigabitEthernet1
csr2
表示なし
csr3
表示なし

5-2. IPアドレス設定、インターフェース開放

(1) 設定config

csr3
interface GigabitEthernet1
 ip address 10.1.1.2 255.255.255.0
 no shutdown

(2) パケットキャプチャ

No.68 … csr3からGARPを送信

(3) ARPテーブルと考察

GARP受信により、csr1の10.1.1.2のAgeとMACアドレスが更新されました。古い10.1.1.3向けのエントリは残ったままです。

csr1
Protocol  Address          Age (min)  Hardware Addr   Type   Interface
Internet  10.1.1.1                -   5254.001b.15c1  ARPA   GigabitEthernet1
Internet  10.1.1.2                0   5254.0008.1e07  ARPA   GigabitEthernet1
Internet  10.1.1.3               26   5254.0008.1e07  ARPA   GigabitEthernet1
csr2
表示なし
csr3
Protocol  Address          Age (min)  Hardware Addr   Type   Interface
Internet  10.1.1.2                -   5254.0008.1e07  ARPA   GigabitEthernet1

6. Staticルート設定時

ARPテーブルを削除するために再度インターフェースを閉塞・開放した後、csr1とcsr2にそれぞれLoopbackアドレスを設定し、Staticルーティングで通信できるようにしてみました。

(1) 設定config

csr3
interface GigabitEthernet1
 shutdown
csr1
interface GigabitEthernet1
 shutdown
 no shutdown
interface Loopback0
 ip address 10.0.0.1 255.255.255.255
ip route 10.0.0.2 255.255.255.255 10.1.1.2
csr2
interface GigabitEthernet1
 no shutdown
interface Loopback0
 ip address 10.0.0.2 255.255.255.255
ip route 10.0.0.1 255.255.255.255 10.1.1.1

(2) パケットキャプチャ

No.90 … csr1からcsr2のIPアドレスに対するARPリクエストを送信
No.91 … csr2からNo.90のARPリプライ

(3) ARPテーブルと考察

「1. 新規接続時」との違いはStaticルートの有無ですが、csr1のStaticルート設定をトリガーにネクストホップアドレスに対するARPリクエストが送信され、csr2がARPリプライを返信する過程でお互いにARPテーブルが追加されていました。

csr1
Protocol  Address          Age (min)  Hardware Addr   Type   Interface
Internet  10.1.1.1                -   5254.001b.15c1  ARPA   GigabitEthernet1
Internet  10.1.1.2                1   5254.001a.9cad  ARPA   GigabitEthernet1
csr2
Protocol  Address          Age (min)  Hardware Addr   Type   Interface
Internet  10.1.1.1                1   5254.001b.15c1  ARPA   GigabitEthernet1
Internet  10.1.1.2                -   5254.001a.9cad  ARPA   GigabitEthernet1
csr3
表示なし

終わりに

これまでの実験で、ARPテーブルが登録・更新される条件が何となく理解できた気がします。ただ、並行して構築したCisco IOSの仮想プラットフォームiosvでは若干動作が異なる点があったので、OS・バージョンの組み合わせによる実装の違いには注意が必要そうです。
今後Windows10やLinux(CentOS)でも実験してみたいと思います。