HSRP切替時のARP/MACアドレステーブル動作実験
ネットワークエンジニアとして日々HSRPやVRRPを当たり前のように使っていますが、切替わり時のARP/MACアドレステーブル周りの動作理解が曖昧なので、Cisco CSR1000vへHSRP設定を行って実験してみました。
1. NW構成
CiscoのCML Personal 2.1を使って、同一セグメント内に4台の機器を配置し、csr2~csr3間でHSRPを組みました。csr1はARPテーブル、iosvl2はMACアドレステーブル確認用です。
ホスト名 | 仮想プラットフォーム | バージョン |
---|---|---|
csr1,2,3 | CSR1000v(IOS-XEベース) | 16.11.1b |
iosvl2 | iosvl2(IOSベース) | 15.2(CML_NIGHTLY_20190423) |
2. HSRP設定
csr2とcsr3に、最低限必要なHSRP設定を行いました。
interface GigabitEthernet1
ip address 10.1.1.2 255.255.255.0
standby 1 ip 10.1.1.10
standby 1 priority 110
standby 1 preempt
interface GigabitEthernet1
ip address 10.1.1.3 255.255.255.0
standby 1 ip 10.1.1.10
showコマンドを見ると、csr2がActive、csr3がStandbyになっている事が分かります。
csr2#show standby brief
P indicates configured to preempt.
|
Interface Grp Pri P State Active Standby Virtual IP
Gi1 1 110 P Active local 10.1.1.3 10.1.1.10
csr3#show standby brief
P indicates configured to preempt.
|
Interface Grp Pri P State Active Standby Virtual IP
Gi1 1 100 Standby 10.1.1.2 local 10.1.1.10
3.通常時の動作
3-1.ARPテーブル確認
csr1からcsr2,3の物理/仮想IPアドレス宛てにPingを行い、csr1でARPテーブル(show 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 5 5254.001a.9cad ARPA GigabitEthernet1
Internet 10.1.1.3 5 5254.0008.1e07 ARPA GigabitEthernet1
Internet 10.1.1.10 5 0000.0c07.ac01 ARPA GigabitEthernet1
仮想IPアドレス10.1.1.10に対するMACアドレスは、HSRP仮想MACアドレスの採番ルールに従って0000.0c07.ac01になっています。一方csr2,3の物理IPアドレス10.1.1.2, .3に対するMACアドレスは、物理的に割り振られたものが使われています。
ネットワークエンジニア御用達?の以下記事では、Activeルータの物理IPアドレス(今回はcsr2の10.1.1.2)は仮想MACアドレスが紐付けられると書かれていたのですが、今回の環境では違いました。(なぜ?)
3-2. ARPパケット確認
3-1.でPingした時のパケットをキャプチャしてみました。
ARP関連でフィルタしたところ、csr1からのARPリクエスト(No.12,28,43)と、csr2からのARPリプライ(No.13,29)、csr3からのARPリプライ(No.44)が送信されていました。
No.13の仮想IPアドレスに関するARPリプライは、csr2の仮想MACアドレスから送信されていました。
No.29のcsr2の物理IPアドレスに関するARPリプライは、csr2の物理MACアドレスから送信されていました。
これは3-1.のARPテーブル結果とも一致します。
3-3. MACアドレステーブル確認
iosvl2でMACアドレステーブル(show mac address-table)を取得しました。
Mac Address Table
-------------------------------------------
Vlan Mac Address Type Ports
---- ----------- -------- -----
1 0000.0c07.ac01 DYNAMIC Gi0/1
1 5254.0008.1e07 DYNAMIC Gi0/2
1 5254.001a.9cad DYNAMIC Gi0/1
Total Mac Addresses for this criterion: 3
仮想MACアドレス向けのパケットはGi0/1から送信されるようになっています。Gi0/1の先にはActiveルータcsr2が接続されていますので、想定通りの動きですね。
3-4. HSRP Helloパケット確認
csr2で取得したHSRP関連のパケットです。Active、Standbyルータそれぞれから定期的にHelloパケットが送信されています。
No.2のStandbyルータからのHelloパケットを見ると、送信元MACアドレス、送信元IPアドレスともに物理アドレスが使われています。
一方No.3のActiveルータでは、送信元IPアドレスは物理アドレスですが、送信元MACアドレスは仮想アドレスが使われています。
RFC2281を見ると、これはブリッジ(スイッチ)が仮想MACアドレスの接続先を学習し、MACアドレステーブルへ反映するためのMUST要件のようです。
If and only if the router is in the Active state, the router MUST use the group’s virtual MAC address as the source MAC address for its Hello messages. This is necessary in order to allow learning bridges to be able to determine which LAN segment the virtual MAC address currently belongs to.
ここまでで、Activeルータの物理IPアドレスから送信されるパケットには、ARPリプライのように物理MACアドレスが使われる場合と、Helloパケットのように仮想MACアドレスが使われる場合がある事が分かりました。
4. HSRP切替わり時の動作
csr2のインターフェースを閉塞し、HSRP切替わり時の動作を確認してみました。
4-1.ARPテーブル確認
csr1のARPテーブルを確認したところ、Ageこそ違うものの、他は3-1.と同じでした。
4-2. ARPパケット確認
切替わり時のARPパケットをキャプチャしてみました。
No.22,23,28の通り、仮想IPアドレスに対するGratuitous ARP(GARP)が、仮想MACアドレスを送信元として送信されていました。
No.22のパケット詳細
4-3. MACアドレステーブル確認
3-3.と比較すると、仮想MACアドレス向けの出力ポートがGi0/1からGi0/2に切り替わっています。ActiveルータはGi0/2の先にいるcsr3ですので、期待通りの動きですね。
Mac Address Table
-------------------------------------------
Vlan Mac Address Type Ports
---- ----------- -------- -----
1 0000.0c07.ac01 DYNAMIC Gi0/2
1 5254.0008.1e07 DYNAMIC Gi0/2
1 5254.001a.9cad DYNAMIC Gi0/1
Total Mac Addresses for this criterion: 3
4-4. HSRP Helloパケット確認
csr3がActiveルータに切替わり、Helloパケットが送信されています。
No.2のHelloパケットを見ると、3-4.ではcsr3の送信元MACアドレスは物理アドレスでしたが、切替わりによって仮想アドレスに変わっています。
5. ここで疑問
「HSRP切替わり時、ARPテーブルは変化しない。MACアドレステーブルはおそらくHelloパケットがあれば切替わる。だとしたらGARPいらなくない?」という疑問が湧きました。
必要そうなシナリオを考えてみました。
5-1. 仮想MACアドレスをルータによって変える場合
csr2の仮想MACアドレスはデフォルトのまま、csr3の仮想MACアドレスを別のものに変更する場合は、切替わり時、GARPによってARPテーブルの仮想MACアドレスも更新されました。(このような設計が必要なケースは無さそうですが。。)
interface GigabitEthernet1
standby 1 mac-address 0000.0c11.1111
Protocol Address Age (min) Hardware Addr Type Interface
Internet 10.1.1.1 - 5254.001b.15c1 ARPA GigabitEthernet1
Internet 10.1.1.3 130 5254.0008.1e07 ARPA GigabitEthernet1
Internet 10.1.1.4 117 5254.0006.8001 ARPA GigabitEthernet1
Internet 10.1.1.10 3 0000.0c11.1111 ARPA GigabitEthernet1
最後に
今回残したのは、デフォルトのHSRP version1の実験結果ですが、HSRP version2やVRRPでも、仮想MACアドレス採番ルールこそ違うものの、似たような動作で同じ疑問にぶつかりました。
IOSの12点台でも試しましたが同じで、自分の実験の仕方が悪いのか、本当にGARPいらないのか分からなくなってきました。。
Discussion