HSRP設定講座【インターフェーストラッキング、プリエンプト、プリエンプト ディレイ】

hsrp-setting

とりあえず、HSRPはグループとかプライオリティを設定すれば使えるのね!早速お客さんのルータで設定してみよう!

チャーチルさん

ポン先生

ちょっと待った!HSRPを設計では他の項目もあるから使い方を覚えてから実践で試して行こう。

HSRP設定して障害試験やったけど、あれ?復旧しない。。。なんて経験した事はありませんか?構成によっては最低限の設定だけでは思った通りに動かない事もあります。そんな時に有用なのがインターフェーストラッキング、プリエンプト、プリエンプト ディレイです。この記事ではこれらの設定について解説します。どれも実践的な設定項目なので必要なシチュエーションや動作原理を理解し本番環境へ活かせるように学んで行きましょう。

前回のHSRPの基礎の記事を読んでいると理解がスムーズです。

HSRPで良く使う設定

この記事では以下設定について解説します。

HSRPで良く使う設定
  • インターフェーストラッキング
  • プリエンプト
  • プリエンプト ディレイ

基本的な設定(プライオリティや仮想IPアドレス)だけでは、構成によっては思い通りに動かないケースがあります。そこで上記のような設定を追加する事があります。どれも本番環境で良く使われる設定になるのでしっかり理解していきましょう。

インターフェーストラッキング

正常時

まずインターフェーストラッキングについて説明します。インターフェーストラッキングを使うとルータのWAN側ポート障害を検知してHSRPを切り替える事ができます

最初にインターフェーストラッキング無しの下記のような構成を想定します。至って標準的なHSRPの構成です。

HSRP構成(正常時)
  • ルータ1は回線1に、ルータ2は回線2に接続されている
  • プライオリティ:ルータ1が110、ルータ2が100
  • よってルータ1がアクティブルータ、ルータ2がスタンバイルータ
  • PCから来た通信はルータ1経由で回線1へルーティングされる
  • 各ルータの1番ポート同士でHelloパケット(HSRPのやり取り)を送受信している

障害時

次に障害発生時の動作を見ていきます。

HSRP構成(回線1障害時)
  • ルータ1の2番ポート(回線1向けのポート)でリンクダウンが発生
  • しかしルータ間は1番ポート経由でHelloパケットを交換できる
  • ルータ2から見るとルータ1と通信できているので、まさか障害が起きているとは思わない
  • よってHSRPのステータスは何も変わらない
  • PCから来た通信は引き続きルータ1へ引き寄せられる
  • しかし、回線1へのルートは無いので通信は止まってしまう

と、こんな感じでちょっと困った状態になります。一応、ルータ1からルータ2に転送するようなルーティングを書けば、通信はできますがちょっと複雑で面倒ですよね。。。

技術的にできるかどうかの話と設計上の分かりやすさは全くの別モノなので、運用の事を考えるのであればなるべくシンプルにしたい所です。

う~ん、気持ち的にはHSRP自体ルータ2の方に切り替わって欲しいよね。そもそもルータ1経由で回線2と通信するのも無駄だし・・・

チャーチルさん

ポン先生

その感覚は大切だね。ネットワークにおける余計な寄り道は違うトラブルを生む原因にもなるし、調査するにも時間がかかってしまうからね。

インターフェーストラッキング

ようやく本題ですが、これを解決するのがインターフェーストラッキングという訳です。

HSRP構成(インターフェーストラッキング+回線1障害時)

インターフェーストラッキングを使うと以下のように動作します。

  • ルータ1で下記設定を追加する
    • 2番ポート(回線1接続ポート)をトラッキング(監視)する設定
    • もし2番ポートがリンクダウンしたら、1番ポートのプライオリティを20下げる設定
  • この状態で実際にルータ1の2番ポートがリンクダウンすると
    • ルータ1のプライオリティが90に下がった事がルータ2へ通知される
    • ルータ2は『自分の方がプライオリティ上じゃん!』と気付き、アクティブルータになる
    • PCからの通信もルータ2経由になるので最短経路で回線2へ転送される

これがインターフェーストラッキングの動作です。HSRPの基本動作は『対向ルータからの応答が無くなったら障害と見なして自身がアクティブルータに昇格する』です。逆に言えば対向ルータが生きている場合は切り替わりません。

ここから更に発展させ『完全なダウンではないけど問題が発生したから切り替わる』、ここまで想定できるかどうかで障害耐性が大きく変わってきます。

ポン先生

これはあくまでもルータ1のポートがリンクダウンしたから検知できる話だね。リンクダウンはしてないけど回線1の中で障害が起きた場合、インターフェーストラッキングでは検知できないから注意だよ。

プリエンプト

障害時

次のプリエンプトも良く使われる設定です。プリエンプトを使うとルータ復旧時に自動的に切り戻す事ができます。

物理構成は先程と同様で、ルータ1の障害が発生している状態からスタートです。

HSRP構成(ルータ1障害時)
  • ルータ1で障害が発生し完全にダウン
  • よってルータ2がアクティブルータに昇格
  • PCの通信もルータ2経由に完全に切り替わり済み

復旧時

プリエンプト設定無しでルータ1の障害が自然復旧した場合を考えます。

HSRP構成(ルータ1復旧時)
  • ルータ1は再起動によって一時的に通信できないだけだった
  • 起動後は問題ないので再度ルータ1(回線1)経由に戻って欲しい
  • しかしHSRPの世界では、自分よりもプライオリティが高いルータが現れても、アクティブルータは変わらない
  • 『ルータ2はアクティブルータの地位を譲らない~』な状態でルータ1に切り戻らない

プリエンプト

そこで使われるのがプリエンプトです。プリエンプトは『自分が一番プライオリティ高いから自分をアクティブルータにしろ~』な設定です。

HSRP構成(ルータ1プリエンプト設定時)
  • ルータ1(プライオリティ設定が大きい方)にプリエンプトを設定しておく
  • ルータ1復旧時にルータ1とルータ2のプライオリティが比較される
  • ルータ1は自分のプライオリティの方が高い事を認識する
  • ルータ1は『俺の方がプライオリティ高いからアクティブルータの地位を返上しろ~』な要求をルータ2に送信する
  • この要求を受けてルータ1がアクティブルータ、ルータ2がスタンバイルータに切り戻る

このようにプリエンプト設定により、ルータ1復旧時に自動的に切り戻る構成を実現できます。

一方、プリエンプトはあくまでも“自動的に”切り戻すための設定です。実際の環境ではルータ1の不具合のため一旦復旧したかに見えても動作が不安定、というケースもあります。その場合はルータ1が完全に問題ないことを管理者が確認した上で、切り戻した方が良いです。

『切り戻しを自動にするか手動にするか』は意見が分かれる所で、絶対にコレだ!という正解はありません。会社によって考え方はマチマチで、“要件次第”という事は覚えておきましょう。

※個人的には自動にする会社の方が多い印象です。

ポン先生

因みに、『俺の方がプライオリティ高いからアクティブルータの地位を返上しろ~』な要求の事をCoup メッセージと言うよ。

プリエンプト ディレイ

ヨシ!今設計しているHSRPは自動切り戻り有りの構成だから早速プリエンプトを入れてみよう!

チャーチルさん

ポン先生

ちょっと待った!構成によってはプリエンプトの設定には注意が必要だよ。切り戻る時のネットワーク全体の動作を確認しよう

正常時

今度は下記のように別のルータと接続される構成を考えます。

HSRP+OSPF構成(正常時)
  • HSRPの所は今までと同じ
  • ルータ1, 2の先にはルータA,Bがあり、OSPFでルーティングしている

復旧時

障害時も今までと同じです(ルータ2に切り替わり)。一方復旧時には注意が必要です。

HSRP+OSPF構成(復旧時)
  • ルータ1が復旧
  • ルータ1のプリエンプト設定によってアクティブルータはルータ1に切り戻り
  • しかし、ルータ1⇔ルータA間のOSPFはまだ復旧してない
  • よってPCの通信はルータ1で止まってしまう!

そうか。。。PCから見たDGW(HSRP)だけ切り戻っても、その先の経路(OSPF)が整って無かったら通信できないもんね。

チャーチルさん

プリエンプト ディレイ

そこで、登場するのがプリエンプト ディレイです。プリエンプト ディレイはアクティブルータの切り戻りを任意の秒数遅らせる事ができます。

例えばOSPFは復旧に40秒前後かかるので、OSPFの復旧後にアクティブルータの切り戻りという事ができます。

HSRP+OSPF構成(プリエンプト ディレイ + 復旧時)
  • ルータ1が復旧
  • ルータ1のアクティブルータ切り戻りはできるけど、ディレイ設定の秒数分待ち
  • 約40秒後、ルータ1⇔ルータA間のOSPFが復旧
  • プリエンプトによりアクティブルータはルータ1に切り戻り
  • PC→ルータ1→ルータAの経路で通信可能
  • PCから見ると、切り戻り時の通信断はほぼ無い(瞬断あるかどうかのレベル)

このようにプリエンプト ディレイは“HSRP以外”の設定や構成を考慮し、あえて切り戻りを遅延させる設定です。そのためネットワーク全体の設計内容も把握しておく必要があります。

また、HSRP自体にはOSPFの復旧を検知する仕組みは無いです。あくまで決まった秒数遅延させる事しかできないので、“何秒遅延させるか”という設計はネットワークエンジニア自身が考える必要があります。

ポン先生

プリエンプト ディレイの秒数はOSPFよりも少し余裕を持たせた方が良いね。OSPF40秒に対してプリエンプト ディレイ60秒(1分)程度に設定するケースが多いかな。

まとめ

ポイント
  • インターフェーストラッキング
    • ルータ1のWANポートだけダウンしてもHSRP切り替わり無し
    • だからPCの通信は止まってしまう
    • インターフェーストラッキング設定をすると
      • WANポートダウン時にルータ1のプライオリティを下げる
      • ルータ2がアクティブルータに昇格しHSRPが切り替わる
  • プリエンプト
    • デフォルトだと、ルータ1が復旧してもアクティブルータは切り戻らない
    • プリエンプト設定をすると
      • ルータ1が復旧時に自動的に切り戻る
      • 自動切り戻り自体が必ず良いとは言えず、そこは方針次第
  • プリエンプト ディレイ
    • HSRP(プリエンプト)とダイナミックルーティング等を併用していると起きる問題
    • HSRPだけ先に切り戻っても通信はできない
    • プリエンプト ディレイを設定すると
      • 自動切り戻りを任意の秒数だけ遅延させる
      • ダイナミックルーティング等が復旧してからHSRPを切り戻す事が可能
      • 何秒遅延させるかはネットワーク全体の構成で判断する

HSRPの設定項目としては他にもありますが、本記事の内容を網羅できていれば大抵の環境の構築は可能です(細かい設定作り込んで行く事の楽しさも分かりますが、あまりマニアックな設定しても将来別の人が運用で困るので(;_;))。CiscoのルータやL3スイッチを冗長化する際にはかなりの頻度で出てくるので、本記事の内容はネットワークエンジニア全員にマスターして欲しい内容です。