Cisco IOS-XEのARP動作実験メモ
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
interface GigabitEthernet1
ip address 10.1.1.1 255.255.255.0
no shutdown
interface GigabitEthernet1
ip address 10.1.1.2 255.255.255.0
no shutdown
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アドレスが更新される」動きのようです。
Protocol Address Age (min) Hardware Addr Type Interface
Internet 10.1.1.1 - 5254.001b.15c1 ARPA GigabitEthernet1
Protocol Address Age (min) Hardware Addr Type Interface
Internet 10.1.1.2 - 5254.001a.9cad ARPA GigabitEthernet1
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アドレスが自分自身である(相手と通信する予定がある)ことが登録の条件に見えます。
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
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
Protocol Address Age (min) Hardware Addr Type Interface
Internet 10.1.1.3 - 5254.0008.1e07 ARPA GigabitEthernet1
*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
*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
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アドレスの変更は更新対象にならないようです。
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
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
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
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#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
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
Protocol Address Age (min) Hardware Addr Type Interface
Internet 10.1.1.3 - 5254.0008.1e07 ARPA GigabitEthernet1
4. ARPテーブルクリア時
不要な情報がたまって来たので、一旦ここで全てのエントリをクリアしてみます。
(1) 実行コマンド
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エントリが追加されていました。
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
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
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
interface GigabitEthernet1
shutdown
interface GigabitEthernet1
shutdown
(2) ARPテーブルと考察
csr1のテーブルは変化なしです。csr2とcsr3は閉塞したインターフェースに紐づくエントリが消失しました。
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
表示なし
表示なし
5-2. IPアドレス設定、インターフェース開放
(1) 設定config
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向けのエントリは残ったままです。
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
表示なし
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
interface GigabitEthernet1
shutdown
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
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テーブルが追加されていました。
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
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
表示なし
終わりに
これまでの実験で、ARPテーブルが登録・更新される条件が何となく理解できた気がします。ただ、並行して構築したCisco IOSの仮想プラットフォームiosvでは若干動作が異なる点があったので、OS・バージョンの組み合わせによる実装の違いには注意が必要そうです。
今後Windows10やLinux(CentOS)でも実験してみたいと思います。
Discussion