こんにちは、takiです。
直近の案件で別チームがUTMのリプレイス時にARPキャッシュ問題に引っ掛かっていたので、FortiGateではどうだろうと思い検証してみました。
目次
検証機
型番:FortiGate 60F
OS :FortiOS v6.4.6 build1879 (GA)
GARP(Gratuitous ARP)とは?
ネットワーク層のプロトコルであり、以下の2点で使用されます。
①自分が使用するIPアドレスが他の機器と重複していないかを確認する
②同一セグメントに存在するネットワーク機器のARPテーブル(キャッシュ)を更新させる
ARPテーブルとは、IPアドレスとMACアドレスの対応表のことです。
機器のリプレイス時には、新機器に旧機器の設定を入れるため、IPアドレスは変わりませんがMACアドレスが変更になる場合があります。この時に新機器からGARPを送信することで同一セグメントのネットワーク機器に自身のMACアドレスが変わったことを周知させることができるのです。
GARPの送信タイミング
結論から言うと、今回の検証でGARPの送信が確認出来たのは次の通りです。
・機器の起動時
・インターフェースへのIPアドレス設定時
・バーチャルIPの設定時
・IPプールの設定時(※1)
・HA切り替わり時
※1「ARPリプライ」が有効の場合
上記のそれぞれのタイミングで設定したIPアドレスに対応するインターフェースからGARPが送信されます。
今回の検証方法としては、同一セグメント内のLinuxにてパケットキャプチャを実行し、上記に挙げたそれぞれのタイミングでGARPが流れてくるかを確認しました。
例として、バーチャルIPの作成時を紹介します。
同一セグメントに存在するLinuxサーバ上でtcpdumpを実行した状態で、60FにIPアドレス「172.23.61.165」のバーチャルIPを設定します。
実行結果は次の通りです。
# tcpdump -ne -i ens192 dst host 172.23.61.165 and arp -vvv tcpdump: listening on ens192, link-type EN10MB (Ethernet), capture size 262144 bytes16:19:27.492775 e0:23:ff:69:74:b6 > Broadcast, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 172.23.61.165 tell 172.23.61.165, length 46
60Fに設定したIPアドレス"172.23.61.165"から「172.23.61.165を使用している機器は誰ですか?」というARPリクエストをブロードキャストしているのが分かります。
tcpdumpで使用した各オプションの意味は以下の通りです。
-n:名前解決を実行しない
-e:リンクレベルのヘッダを表示
-i:監視するインターフェースを指定
当り前ですが、ここで設定したバーチャルIPのMACアドレスは、同一セグメントであるwan1のMACアドレスと同じです。
また、オブジェクトのIPアドレスの変更時にも同様にGARPが流れてくるのが確認できました。
GARPを定期的に送信する方法
上記の他に、バーチャルIPのみGARPの送信インターバルを設定することができます。
設定可能値は5秒~8640000秒です。
CLIでFortiGateにログインします。
FGT-60F (root) # config firewall vip FGT-60F (vip) # edit GARP_test_VIP FGT-60F (GARP_test_VIP) # set gratuitous-arp-interval 5 FGT-60F (GARP_test_VIP) # end FGT-60F (root) #
設定後、5秒間隔でGARPが送信されているのが分かります。
# tcpdump -ne -i ens192 dst host 172.23.61.165 and arp -vvv tcpdump: listening on ens192, link-type EN10MB (Ethernet), capture size 262144 bytes 17:50:32.519323 e0:23:ff:69:74:b6 > Broadcast, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 172.23.61.165 tell 172.23.61.165, length 46 17:50:37.549458 e0:23:ff:69:74:b6 > Broadcast, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 172.23.61.165 tell 172.23.61.165, length 46 17:50:42.569591 e0:23:ff:69:74:b6 > Broadcast, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 172.23.61.165 tell 172.23.61.165, length 46 17:50:47.589519 e0:23:ff:69:74:b6 > Broadcast, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 172.23.61.165 tell 172.23.61.165, length 46 17:50:52.609721 e0:23:ff:69:74:b6 > Broadcast, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 172.23.61.165 tell 172.23.61.165, length 46 17:50:57.629680 e0:23:ff:69:74:b6 > Broadcast, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 172.23.61.165 tell 172.23.61.165, length 46
止めたい場合は、unsetで無効化できます。
おわりに
今回5つのタイミングでGARPが送信されるのを確認できましたが、以下のタイミングではGARPの送信がされませんでした。
・アドレスオブジェクトの新規作成・編集時
・ポリシーへのオブジェクト適用時
・オブジェクトの削除時
Fortinet社のナレッジでもGARPの仕様があまり記載されていないため、この記事がどなたかのお役に立てれば幸いです。
参考
https://docs.fortinet.com/document/fortigate/6.4.8/cli-reference/294620/config-firewall-vip
記載されている会社名、システム名、製品名は一般に各社の登録商標または商標です。
当社製品以外のサードパーティ製品の設定内容につきましては、弊社サポート対象外となります。