HSRP Cisco ACL マルチキャスト 冗長化

CiscoルータやL3スイッチでHSRP(Hot Standby Router Protocol)を設定する際、アクセスリスト(ACL)の設定ミスで気づかないうちにHSRPが機能しなくなるケースがあります。原因はシンプルで、HSRPが使用するマルチキャストアドレスをACLでdenyしてしまっていることです。

本記事では、HSRPとACLの関係、よくあるミスとその確認・対処方法を解説します。

👷 現場での体験談

アクセスリストを使って不要なトラフィックを制限する作業をしていたとき、インターフェースにACLを適用した直後にHSRPのステータスが怪しくなっていることに気づきました。

原因を調べると、HSRPが使用するマルチキャストアドレス(224.0.0.2)をACLにpermitする記述を入れ忘れていました。暗黙のdeny any anyに引っかかってHSRPのHelloパケットがブロックされ、ネイバーが組めなくなりかけていた状況です。

気づいて即座にACLにpermitを追加したことで実害は免れましたが、もし本番環境で適用していたらActiveルータが切り替わらない障害につながっていたと思うとヒヤッとしました。ACLを設定する際はHSRP・OSPF・EIGRPなどのプロトコルが使うマルチキャストを必ず意識することの重要さを改めて実感した案件です。

HSRPが使うマルチキャストアドレスとは

HSRPはActiveルータとStandbyルータの間でHelloパケットを交換して死活監視を行います。このHelloパケットはマルチキャストアドレス宛に送信されます。

プロトコルマルチキャストアドレスUDPポート用途
HSRPv1224.0.0.21985Hello / Coup / Resign
HSRPv2224.0.0.1021985Hello / Coup / Resign
OSPF224.0.0.5 / 224.0.0.6—(IP proto 89)Hello / LSA
EIGRP224.0.0.10—(IP proto 88)Hello / Update
⚠ バージョンに注意

HSRPv1は224.0.0.2、HSRPv2は224.0.0.102と異なります。使用しているバージョンに合わせてACLに記述してください。バージョンは show standby で確認できます。

問題が起きるACLパターンと正しい書き方
❌ NGパターン:マルチキャストのpermitが抜けている
ip access-list extended INBOUND
 10 permit ip 192.168.1.0 0.0.0.255 any   ← 内部からの通信は許可
 20 permit ip 10.0.0.0 0.0.255.255 any    ← 拠点間通信を許可
 ! ← ここにHSRPのマルチキャストpermitが抜けている
 ! 末尾の暗黙deny any anyで224.0.0.2宛がブロックされてしまう
✅ OKパターン:マルチキャストを明示的にpermit
ip access-list extended INBOUND
 10 permit ip 192.168.1.0 0.0.0.255 any
 20 permit ip 10.0.0.0 0.0.255.255 any
 ! ▼ HSRPv1のマルチキャストを許可
 30 permit udp any host 224.0.0.2 eq 1985
 ! ▼ HSRPv2を使っている場合はこちらも追加
 40 permit udp any host 224.0.0.102 eq 1985
 ! ▼ OSPFも動いていれば忘れずに
 50 permit ospf any any
 ! ▼ EIGRPも動いていれば
 60 permit eigrp any any

ACLをインターフェースのinbound方向に適用している場合、対向ルータからのHSRP Helloパケットがブロックされます。outbound方向でも自分が送信するHelloが出て行かなくなるケースがあるため、両方向で確認が必要です。

HSRPとACLの状態確認コマンド
① HSRPの状態確認
Router# show standby brief
                     P indicates configured to preempt.
                     |
Interface   Grp  Pri P State    Active          Standby         Virtual IP
Gi0/1       1    110 P Active   local           192.168.1.2     192.168.1.254
                                ↑Active正常   ↑Standbyが見えていればOK

StandbyがUnknownや空欄になっている場合、HelloパケットがブロックされてStandbyルータを認識できていません。

② ACLのヒットカウント確認
Router# show ip access-lists INBOUND
Extended IP access list INBOUND
    10 permit ip 192.168.1.0 0.0.0.255 any (12455 matches)
    20 permit ip 10.0.0.0 0.0.255.255 any (8821 matches)
    30 permit udp any host 224.0.0.2 eq 1985 (0 matches) ← ここが0のままならHSRPが届いていない
    ! 末尾に暗黙のdeny any anyがある(matchesが増えていたら何かがブロックされている)

HSRPのpermitエントリのmatchesが増えていれば正常に許可できています。0のままであれば、ACLがインターフェースの正しい方向に適用されているか・バージョンが合っているかを再確認してください。

③ インターフェースへのACL適用方向を確認
Router# show ip interface GigabitEthernet0/1
GigabitEthernet0/1 is up, line protocol is up
  Inbound  access list is INBOUND   ← in方向に適用されているACL名
  Outbound access list is not set   ← out方向はACLなし
ACL適用前の必須チェックリスト

インターフェースにACLを適用する前に、そのインターフェースで動作しているプロトコルを必ず確認してください。

1
HSRPが動いているか確認

show standby でHSRPグループとバージョンを確認。v1なら224.0.0.2、v2なら224.0.0.102をpermitに追加。

2
ルーティングプロトコルが動いているか確認

OSPFなら permit ospf any any、EIGRPなら permit eigrp any any を追加。

3
ACL適用後すぐにshow standby / show ip ospf neighbor を確認

適用直後にネイバーが落ちていないか・HSRPのStandbyが消えていないかを確認します。問題があれば即座にACLをインターフェースから外してください。

4
ACLヒットカウントを一定時間後に再確認

show ip access-lists で意図しないDENYが増えていないか確認します。

図1: ACL設定時にpermitし忘れやすいプロトコルとマルチキャスト

HSRPv1 (224.0.0.2)
忘れやすい
HSRPv2 (224.0.0.102)
忘れやすい
OSPF (224.0.0.5/6)
やや忘れやすい
EIGRP (224.0.0.10)
やや忘れやすい
BGP (TCPポート179)
比較的気づきやすい
まとめ

ACL設定時はルーティングプロトコルや冗長化プロトコルが使うマルチキャストを必ず意識してください。

  • HSRPv1は 224.0.0.2 UDP 1985、v2は 224.0.0.102 UDP 1985 を必ずpermitする
  • OSPFは permit ospf any any、EIGRPは permit eigrp any any を忘れない
  • ACL適用直後に show standbyshow ip access-lists で即確認する
  • HSRPが組めなくなると冗長化が機能せず、Active障害時にフェイルオーバーできなくなる重大障害につながる