HSRP 仮想 MAC と use-bia|使ってはいけない場面の判断

  • URLをコピーしました!
目次

はじめに

HSRP のトラブルシューティングを調べていると、standby use-bia というコマンドに行き当たることがあります。スイッチのログに MAC アドレスのフラップが記録されていたり、HSRP の状態が頻繁に切り替わったりする状況で、対処法として紹介されているケースです。

コマンド自体は 1 行で、動作も「焼き付け MAC アドレスを使う」という単純なものです。ただし、このコマンドには HSRP の設計思想そのものを変える副作用があります。設定した結果、Proxy ARP が機能しなくなったり、想定していないサブインターフェースにまで設定が波及したりする可能性があります。

この記事でわかること
  • HSRP が仮想 MAC アドレスを使う理由と、フェイルオーバー時の動作
  • standby use-bia の動作と、実装された歴史的な背景
  • 使用が推奨される限られた場面
  • Proxy ARP の非互換など、設定前に把握しておきたい制約
  • standby mac-address など、代替となる選択肢との使い分け

結論から述べます。Token Ring 環境を除けば、standby use-bia は特殊な事情がある場合に限って使うコマンドです。Cisco の公式ドキュメントでも、Token Ring インターフェース以外では特殊な状況に限って使用するよう案内されています。仮想 MAC アドレスを使わない構成にすると、フェイルオーバー時の通信復旧がホスト側の Gratuitous ARP の処理実装に依存するようになり、Proxy ARP も機能しなくなります。

HSRP の仮想 MAC アドレスの仕組み

standby use-bia の制約を理解するには、まず HSRP がなぜ仮想 MAC アドレスを使うのかを押さえる必要があります。

既定の仮想 MAC アドレス

HSRP は既定で、グループ番号から一意に決まる MAC アドレスを使用します。

バージョンフォーマットグループ 1 の場合
HSRPv10000.0C07.ACxy0000.0C07.AC01
HSRPv20000.0C9F.Fxxx0000.0C9F.F001

ここで重要なのは、この MAC アドレスが機器に固有のものではないという点です。グループに属する機器はすべて同じ値を計算でき、Active になった機器がこのアドレスを使用します。仮想 MAC アドレスの体系は関連記事『HSRP の設定手順|priority と preempt の設計ポイント』でも整理しています。

なお、Token Ring 環境では扱いが異なります。Ethernet と FDDI では事前割り当ての MAC アドレスが使われますが、Token Ring では機能アドレスが使用されます。この差が、後述する use-bia が実装された背景の一部になっています。

フェイルオーバー時に MAC アドレスが変わらない意味

仮想 MAC アドレスを使う構成では、Active が切り替わってもホストから見た MAC アドレスは変わりません。

状態仮想 IP の MACホストの ARP テーブル
正常時(R1 が Active)0000.0C9F.F001更新不要
R1 障害後(R2 が Active)0000.0C9F.F001更新不要

ホストの ARP テーブルを更新する必要が一切ありません。切り替わりの際に更新が必要なのは、スイッチの MAC アドレステーブルだけです。仮想 MAC アドレスの学習ポートを、旧 Active 側から新 Active 側へ移し替える処理になります。

この違いは実務上の意味が大きく、Cisco の公式 FAQ でも明示されています。

参考: Review Hot Standby Router Protocol (HSRP) FAQ
“End devices do not actually need this gratuitous ARP”
(エンドデバイスは、この Gratuitous ARP を実際には必要としません)
https://www.cisco.com/c/en/us/support/docs/ip/hot-standby-router-protocol-hsrp/9281-3.html

ルーターが既定の HSRP MAC アドレスを使用している限り、エンドデバイス側は Gratuitous ARP を受け取らなくても通信を継続できます。ホスト実装の品質に依存しないという点が、既定の構成が持つ堅牢性です。

Gratuitous ARP が担う役割

では、Active に遷移した機器が Gratuitous ARP を送出するのはなぜでしょうか。主な目的は、L2 スイッチ側の MAC アドレステーブルの更新を促すことです。

Gratuitous ARP パケットを受け取ったスイッチは、仮想 MAC アドレスの位置を新しいルーター側へ変更します。これにより、以降のフレームが正しい機器へ転送されるようになります。

送出のタイミングにも既定値があります。公式リファレンスによると、グループが Active になった時点で 1 パケットが送出され、その 2 秒後と 4 秒後にもそれぞれ送出されます。合計 3 回の送出により、L2 側の更新が確実に行われる設計です。

VRRP でも同様に、Master へ遷移した時点で Gratuitous ARP をブロードキャストする規定があります。仮想 MAC を機器間で引き継ぐ設計思想は両プロトコルに共通しており、この点は関連記事『VRRP とは|Master 選出と priority 設計の落とし穴』でも扱っています。

ここまでの整理が、次のセクションの前提になります。仮想 MAC アドレスを使わない構成にすると、この「ホストの ARP テーブルを更新しなくてよい」という前提が崩れます。

standby use-bia とは

standby use-bia は、HSRP が使用する MAC アドレスを、仮想 MAC アドレスからインターフェース固有の焼き付けアドレス(BIA: Burned-In Address)へ変更するコマンドです。

コマンドの動作

インターフェースコンフィグモードで設定します。

interface GigabitEthernet0/1
 standby use-bia

グループ番号を指定しない点が特徴です。このコマンドはインターフェース単位で適用され、そのインターフェース上のすべての HSRP グループに影響します。

参考: Cisco IOS First Hop Redundancy Protocols Command Reference / standby use-bia
“use the burned-in address of the interface as its virtual MAC address”
(インターフェースの焼き付けアドレスを仮想 MAC アドレスとして使用します)
https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/ipapp_fhrp/command/fhp-cr-book/fhp-s2.html

設定後の動作は次のようになります。

項目既定use-bia 設定時
使用する MAC アドレス0000.0C9F.F001(グループ 1)各機器の焼き付け MAC
機器間での同一性全機器で同じ値機器ごとに異なる値
切り替え時のホスト ARP更新不要更新が必要

3 行目が実務上の分岐点です。Active が切り替わると仮想 IP アドレスに対応する MAC アドレスが変わるため、ホスト側の ARP テーブルが更新されない限り通信が復旧しません。

実装された背景

このコマンドは、現在の一般的な Ethernet 環境を想定して作られたものではありません。実装の経緯は 2 つあります。

1 つ目は Token Ring 環境の事情です。 Token Ring では HSRP が機能アドレスを使用しますが、送信元ハードウェアアドレスが機能アドレスに設定された ARP 応答を受け付けない機器が存在しました。この場合、焼き付けアドレスを使う構成にすることで回避できます。

さらに、Source Route Bridging を使用する環境では別の問題がありました。ホスト側は仮想 MAC アドレスとともに RIF(Routing Information Field)をキャッシュしており、この情報は経路と最終的なリングを示します。

参考: Cisco Community / HSRP Virtual MAC and BIA MAC address
“this does not affect the RIF cache of the hosts”
(この動作は、ブリッジされたリング上のホストが持つ RIF キャッシュには影響しません)
https://community.cisco.com/t5/routing/hsrp-virtual-mac-and-bia-mac-address/td-p/853622

Active への遷移時に Gratuitous ARP でホストの ARP テーブルは更新されますが、RIF キャッシュは更新されません。結果として、旧 Active のリングへパケットがブリッジされ続ける状況が発生します。use-bia を設定すると MAC アドレス自体が変わるため、この問題を回避できるという理屈です。

2 つ目はハードウェアの制約です。 Cisco ハードウェアの一部の Ethernet コントローラーは、単一のユニキャスト MAC アドレスフィルターしか扱えませんでした。このため、DECnet や XNS を HSRP と同じルーター上で併用することができませんでした。焼き付けアドレスを使う構成にすることで、この併用が可能になります。

いずれも、現在の一般的なネットワーク環境ではほぼ該当しない事情です。「なぜこのコマンドが存在するのか」を押さえておくと、現代の環境で安易に採用すべきでない理由が理解しやすくなります

use-bia を使うべき場面

Token Ring 環境が現役の職場は限られます。では現在の環境で standby use-bia が案内されるのはどのような場面でしょうか。公式ドキュメントで確認できるのは、HSRP が不安定になる状況への対処としての用途です。

HSRP の不安定化への対処

Cisco の「Avoiding HSRP Instability in a Switching Environment」というドキュメントで、対処法の 1 つとして紹介されています。効果は 2 点あります。

1 つ目は、インターフェースのリセットの回避です。 既定の構成では、HSRP が Active になる際にユニキャスト MAC アドレスを MAC アドレスフィルターリストへ追加または変更する処理が発生します。プラットフォームによっては、この処理に伴って Ethernet インターフェースがリセットされます。use-bia を設定すると、この追加や変更が不要になるため、インターフェースがリセットされません。

2 つ目は、スイッチによる同一 MAC アドレスの重複学習の回避です。 既定では複数の機器が同じ仮想 MAC アドレスを使うため、切り替わりの過渡期にスイッチが 2 つのポートで同一アドレスを学習する状況が生じ得ます。焼き付けアドレスを使う構成では、機器ごとに値が異なるためこの事象が起きません。

参考: Avoiding HSRP Instability in a Switching Environment with Various Router Platforms
“It also keeps the switch from learning the same address on two different ports”
(スイッチが同一アドレスを 2 つの異なるポートで学習することも防げます)
https://www.cisco.com/c/en/us/support/docs/ip/hot-standby-router-protocol-hsrp/13782-8.html

ただし適用範囲は限定される

同じドキュメントには、適用範囲を絞る記述もあります。Token Ring インターフェースに HSRP を設定している場合を除き、standby use-bia は特殊な状況でのみ使用するよう案内されています

HSRP のフラッピングには複数の原因が考えられます。物理層の問題、スパニングツリーの収束遅延、CPU 使用率の高騰、特定 VLAN からの過剰なトラフィックなどです。use-bia はこれらすべてに効く汎用的な対処ではありません

現象が確認された段階で、まず原因の切り分けを行うことをおすすめします。use-bia を検討するのは、MAC アドレスフィルターの更新に起因するインターフェースのリセットや、スイッチ側での重複学習が原因として特定できた場合に限られます。

use-bia の制約と注意点

standby use-bia を設定する前に把握しておきたい項目を整理します。いずれも Cisco の公式ドキュメントに記載されているものです。

制約 1: フェイルオーバー時に MAC アドレスが変わる

もっとも基本的な制約です。Active が切り替わると、仮想 IP アドレスに対応する MAC アドレスが別の値へ移動します

状態既定の構成use-bia 設定時
R1 が Active0000.0C9F.F001R1 の焼き付け MAC
R2 が Active0000.0C9F.F001R2 の焼き付け MAC
ホストの ARP 更新不要必要

新 Active は Gratuitous ARP 応答を送出しますが、公式ドキュメントでは、すべてのホスト実装がこの Gratuitous ARP を正しく処理するわけではないと明記されています。

通信の復旧が、ホスト側の実装品質に依存する構成になります。Gratuitous ARP を正しく処理しないホストが 1 台でも存在すると、その端末だけが ARP キャッシュのタイムアウトまで通信できません。

冒頭で触れたとおり、既定の構成ではエンドデバイスは Gratuitous ARP を必要としません。use-bia を設定すると、この「ホスト実装に依存しない」という HSRP の利点が失われます。

なお、ARP キャッシュのタイムアウト値は OS や機器によって異なり、数分から数時間の幅があります。問題が発生した場合、影響時間が長期化する可能性がある点も設計時の考慮事項になります。

制約 2: Proxy ARP が機能しなくなる

見落とされやすく、影響範囲が読みにくい制約です。

参考: Understand the Hot Standby Router Protocol Features and Functionality
“Proxy ARP breaks when use-bia is configured”
(use-bia を設定すると Proxy ARP が機能しなくなります)
https://www.cisco.com/c/en/us/support/docs/ip/hot-standby-router-protocol-hsrp/9234-hsrpguidetoc.html

同じドキュメントでは、Standby ルーターが障害機の Proxy ARP データベースを引き継ぐことができないとも説明されています。

Proxy ARP は、ホストがサブネット外のアドレスに対して ARP 要求を送った際、ルーターが自身の MAC アドレスで代理応答する機能です。この応答で広告される MAC アドレスをホストがキャッシュしますが、use-bia 構成ではその値が障害機の焼き付けアドレスになります。切り替え後、そのアドレス宛のフレームは届きません。

この制約が問題になるかどうかは、環境によって判断が分かれます

環境影響
Proxy ARP を無効化している影響なし
サブネットマスクの設定誤りを Proxy ARP が補っている切り替え時に通信不能になる可能性
意図的に Proxy ARP を使う設計設計の見直しが必要

注意したいのが 2 行目です。Proxy ARP は Cisco IOS で既定有効の機能であり、ホスト側のサブネットマスク設定が誤っている環境で、意図せず通信を成立させているケースがあります。この場合、Proxy ARP に依存していること自体が認識されていません。

use-bia の設定前に、対象セグメントで Proxy ARP が使われていないかを確認することをおすすめします。show ip interfaceで Proxy ARP の有効・無効を確認できますが、実際に利用されているかどうかは ARP テーブルの内容やトラフィックの実態から判断する必要があります。

注意点: サブインターフェースでの適用範囲

制約というより、キーワードの指定漏れによる想定外の波及に関する項目です。

standby use-biaをサブインターフェースに設定すると、設定はメインインターフェース上に表示され、配下のすべてのサブインターフェースに適用されます

! 意図した設定(VLAN 10 のみ use-bia を適用したい)
interface GigabitEthernet0/1.10
 standby use-bia

! 実際の反映(メインインターフェースに移動し全 VLAN に適用される)
interface GigabitEthernet0/1
 standby use-bia

「特定の VLAN でだけ HSRP のフラッピングが起きているので、その VLAN だけ対処したい」という意図で設定すると、すべての VLAN の HSRP 構成を変更してしまうことになります。

ただし、Cisco IOS 12.0(6.2) 以降ではscope interfaceキーワードによる回避が可能です。設定方法は次のセクションで扱います。

なお、Cisco IOS 12.0(3.4)T より前のリリースでは、use-bia を設定すると HSRP グループが 1 つに制限されるという制約もありました。現行のバージョンでは該当しませんが、古い文献を参照する際に混同しないよう注記しておきます。

代替手段と設定後の確認

use-bia の制約が許容できない場合、または適用範囲を絞りたい場合の選択肢を整理します。

scope interface による適用範囲の限定

サブインターフェース単位で適用したい場合は、scope interfaceを付けて設定します。

interface GigabitEthernet0/1.10
 standby use-bia scope interface

キーワードを付けない場合はメインインターフェースへ移動し、配下のすべてのサブインターフェースに適用されます。「特定の VLAN でだけ HSRP が不安定」という状況への対処では、このキーワードの有無が結果を分けます

設定後はshow running-configでメインインターフェース側に記述が移動していないかを確認することをおすすめします。

standby mac-address との使い分け

MAC アドレスを制御するコマンドには、もう 1 つstandby mac-addressがあります。

項目standby use-biastandby mac-address
適用単位インターフェース(scope interface でサブインターフェース)グループ単位
指定する値焼き付け MAC(自動)任意の MAC アドレスを明示
機器間での同一性機器ごとに異なる全機器で同一に設定可能
ホストの ARP 更新必要不要
Proxy ARP機能しない影響なし

両者は目的が異なります。use-bia が「仮想 MAC を使わない」構成であるのに対し、standby mac-addressは「仮想 MAC の値を任意に指定する」構成です。

後者は、MAC アドレスに依存する特定のアプリケーションや、既存環境との整合のために特定の値を使いたい場合に選択します。機器間で同じ値を設定できるため、use-bia のような制約は生じません

「既定の仮想 MAC アドレスでは都合が悪い」という理由であれば、まずstandby mac-addressで解決できないかを検討することをおすすめします。use-bia が必要になるのは、MAC アドレスフィルターの更新そのものを避けたい場合に限られます。

Gratuitous ARP の送出調整

use-bia を採用する場合、ホスト側の ARP テーブル更新が通信復旧の条件になります。Gratuitous ARP の送出回数と間隔は調整できます。

interface GigabitEthernet0/1
 standby arp gratuitous count 5 interval 3

参考: First Hop Redundancy Protocols Configuration Guide / HSRP Gratuitous ARP
“HSRP sends out three gratuitous ARP packets from an HSRP group”
(グループの状態が Active に変わると、HSRP は 3 つの Gratuitous ARP パケットを送出します)
https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/ipapp_fhrp/configuration/15-sy/fhp-15-sy-book/HSRP-Gratutious-ARP.html

送出回数を増やしても、Gratuitous ARP を処理しないホスト実装には効果がありません。パケットロスによる取りこぼしへの対策にはなりますが、制約 1 そのものを解消するものではない点に注意が必要です。

なお、静的 ARP エントリやエイリアスの ARP エントリは HSRP によって上書きされないと規定されています。ホスト側で静的 ARP を設定している環境では、use-bia 構成での切り替えが成立しません。

設定内容はshow standby arp gratuitousで確認できます。

設定後の確認方法

use-bia が有効になっているかは、show standbyの出力で判別できます。

Router# show standby
Ethernet0/1 - Group 1
  State is Active
  Virtual IP address is 192.168.100.254
  Active virtual MAC address is 0004.4d82.7981
    Local virtual MAC address is 0004.4d82.7981 (bia)

Local virtual MAC addressの行末に(bia)と表示されます。既定の構成であれば(v2 default)のように表示されるため、意図した設定になっているかをこの 1 行で判断できます。

もう 1 つ、関連する確認コマンドがあります。

Router# show standby capability

このコマンドは、インターフェースが受信できる仮想 MAC アドレスの数の上限を表示します。HSRP は 1 インターフェースあたり最大 256 グループを設定できますが、インターフェースの MAC アドレスフィルターがその数のエントリに対応していない場合があります

多数のグループを構成する環境では、このコマンドで上限を確認しておくと、use-bia を検討する前段階での判断材料になります。

判断の順序

以上を踏まえた検討の順序です。

段階確認内容結論
1Token Ring 環境か該当すれば use-bia を検討
2HSRP 不安定の原因が特定できているか未特定なら原因調査を優先
3MAC アドレスの値だけが問題かstandby mac-addressで対応
4Proxy ARP を使っていないか使用中なら use-bia は不可
5適用範囲を絞る必要があるかscope interfaceを併用

多くのケースは第 2 段階または第 3 段階で結論が出ます。use-bia まで到達するのは、MAC アドレスフィルターの更新に起因する事象が原因として特定できた場合に限られます。

まとめ

standby use-biaは、HSRP の仮想 MAC アドレスの代わりにインターフェースの焼き付けアドレスを使わせるコマンドです。Token Ring や旧世代のハードウェア制約に対応するために実装された経緯があり、現在の一般的な Ethernet 環境では適用場面が限られます。設定によって Proxy ARP が機能しなくなる点や、切り替え後の通信復旧がホスト実装に依存する点を踏まえたうえで、代替手段と比較して判断することをおすすめします。

  • use-bia は仮想 MAC の代わりに焼き付け MAC を使わせるコマンド
  • 既定の構成ではエンドデバイスは Gratuitous ARP を必要としない
  • use-bia 設定時は切り替え後の復旧がホスト実装に依存する
  • Proxy ARP が機能しなくなり、Standby が引き継ぐこともできない
  • サブインターフェースへの適用は scope interface の併用が前提
  • MAC アドレスの値だけが問題なら standby mac-address で対応可能
  • show standby(bia) 表示で設定状態を確認できる

以上、最後までお読みいただきありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

関西を拠点に活動する、現役インフラエンジニア。経験20年超。

大手通信キャリアにて、中〜大規模インフラ(ネットワーク・サーバ・クラウド・セキュリティ)の設計・構築およびプロジェクトマネジメントに従事。現場で直面した技術課題への対処や、最新の脆弱性情報への実務対応を、一次情報として発信しています。

保有資格
CCIE Lifetime Emeritus(取得から20年以上)/ VCAP-DCA / Azure Solutions Architect Expert

▶ 運営者プロフィール(詳細)

目次