弱者は決して許すことができない。許しは強者の態度である── ガンディー
ネットワーク

PC に書ける出口は 1 つだけ

PC のデフォルトゲートウェイ欄には 1 つの IP しか書けない。その番地をルータ 2 台で分け合い、切り替わっても PC 側を触らずに済ませる仕組みを 1 枚の図で見る

ぴぐおv1人の校閲なし(AI のみ)訂正なし
ネットワークvrrp冗長化concept
目次

PC のデフォルトゲートウェイ欄には、IP を 1 つしか書けません。 そのルータが落ちたら、PC の設定を書き換えて回るか、通信が止まるかのどちらかです。

この記事は「壊れても止まらない」の塊の最後で、図 5 の続きです。 図 5 で PC-A の欄に書いた 192.168.10.1 を、ルータ 2 台で共有する番地に変えます。

この連載は、ネットワークの言葉を 3 つの層に置いて読みます。 もの(物理か論理か)、結びつき(人が設定で付ける手動か、機器が学習する自動か、製造時に決まる固定か)、通信フロー(1 本の通信がそれらを順に通る道筋)の 3 つです。

登場するもの

仮想 IP

論理のものです。 2 台で共有する番地で、PC のデフォルトゲートウェイ欄にはこれを書きます。この図では 192.168.10.1 です。 図 5 ではルータ 1 の口そのものがこの番地でした。ここでは番地を仮想 IP に譲り、ルータ 1 の実 IP を .11 にします。

仮想 MAC

論理のものです。 IPv4 では 00-00-5E-00-01-{グループ番号} と規格で決まっており、グループ 11 なら 0000.5e00.010b です。 機器に焼かれた MAC ではなく、グループ番号から作る番地です。

優先度と track と preempt

どれも論理・手動です。 優先度の既定は 100 で、大きい方が Master になります。 track は見張る対象で、その口が落ちたら決めた数だけ優先度を引きます。 preempt は優先度が高い方が Master を取り返すかどうかの設定で、既定は取り返します。

結びつき

  • PC のデフォルトゲートウェイ欄 ⇄ 仮想 IP は手動です。一度書いたら、切り替わっても変えません。ここが VRRP の目的そのものです。
  • 仮想 IP ⇄ どの機器が応えるかは自動です。優先度と広告で決まり、Master だけが ARP に応えます。
  • 仮想 MAC ⇄ スイッチのどのポートの先にいるかも自動です。切替のときに新しい Master が出す ARP で書き換わります。

通信フロー

支店のルータをもう 1 台(ルータ 3)増やし、ルータ 1 を Master(優先度 105)、ルータ 3 を Backup(優先度 100)にします。

① PC-A は宛先が自分のネットワークの外なので、書いてあるデフォルトゲートウェイ 192.168.10.1 の MAC を ARP で聞きます。

② Master だけが応えます。返す MAC は自分の物理ポートの MAC ではなく、仮想 MAC です。Backup は応えません。

③ PC-A は宛先 MAC = 仮想 MAC でフレームを出します。スイッチは ② で覚えた「仮想 MAC → ポート 1」の行を見て転送します。

④ Master は 1 秒ごとに広告を出します(あて先 224.0.0.18・IP プロトコル番号 112)。Backup は聞いているだけです。

⑤ 広告が Master Down Interval(優先度 100 なら 3.609 秒)のあいだ届かないと、Backup が Master になり、仮想 IP と仮想 MAC をそのまま引き継ぎます。

⑥ 新しい Master は、仮想 MAC を送信元にした ARP を出します。スイッチは「仮想 MAC → ポート 2」に書き換えます。

書き換わるのは、スイッチの MAC アドレステーブルの 1 行だけです。PC-A の設定も ARP テーブルも変わりません。

図 16

図の上半分が構成図とフロー、中ほどが秒数の式と track・preempt、下半分が表示の推移と通信の中身の推移です。

VRRP:PC に書ける出口は 1 つだけ。ルータ 2 台で「仮想の IP」と「仮想の MAC」を分け合う 支店のルータをもう 1 台(ルータ 3)増やす。図 5 で PC-A の GW 欄に書いた 192.168.10.1 を、特定の 1 台の口ではなく 2 台で共有する番地にする PC-A 192.168.10.10 GW 192.168.10.1 (手動・1 つだけ) 1 2 スイッチ 1 ポート 1・ポート 2 3 5 ⑤⑥ の切替後はこちらへ移る 仮想ルータ(VRRP グループ 11) 仮想 IP 192.168.10.1 / 仮想 MAC 0000.5e00.010b ルータ 1 = Master Gi0 192.168.10.11(実 IP・手動) 優先度 105(高い方が Master になる) 4 広告(1 秒ごと) ルータ 3 = Backup Gi0 192.168.10.12(実 IP・手動) 優先度 100 → 3.609 秒 待って引き継ぐ データセンター側へ 主の線 172.16.12.0/30 予備の線 172.16.13.0/30 この先に ルータ 2 図 5 では ルータ 1 の口そのものが 192.168.10.1 だった。VRRP ではその番地を仮想 IP に譲り、ルータ 1 の実 IP を .11 にする ④ の広告は、実際にはスイッチを経由して Backup に届く(図では 2 台の間に描いている) 6 切り替わった後にスイッチが書き換えるのは「仮想 MAC → どのポート」の 1 行だけ Master Down Interval(Master が居なくなったと判断するまでの秒数) 広告間隔 = 既定 1 秒(Master が 1 秒ごとに広告を出す) Skew Time =(256 − 優先度)× 広告間隔 ÷ 256 Master Down Interval = 3 × 広告間隔 + Skew Time 優先度 105 → 3 + 151/256 = 3.589 秒 優先度 100 → 3 + 156/256 = 3.609 秒 実際に待つのは Backup 側の値。この構成なら 3.609 秒 仮想 MAC はどう決まるか IPv4 では 00-00-5E-00-01-{グループ番号}(規格で決まっている) グループ 11 → 16 進で 0b → 0000.5e00.010b 機器に焼かれた MAC ではなく、規格から作る番地(論理) Master になった側が、この MAC で ARP に応え、この MAC で広告を出す だから引き継いでも PC の ARP テーブルは書き換わらない 書き換わるのはスイッチの MAC アドレステーブルだけ track:見張っている口が落ちたら、自分の優先度を下げる track = 見張る対象。勉強会では LAN 側の口と WAN 側の口の 2 つ 落ちたら decrement の数だけ優先度を引く(勉強会では 20) WAN 側が落ちた場合: 105 − 20 = 85 < 100 → ルータ 3 が Master へ 優先度を 125 にすると 125 − 20 = 105 > 100 のまま切り替わらない 「優先度を上げたのに切り替わらない」はこれ。引く量が足りない track で下がったときは、下がった優先度の広告を Backup が受け取って 取り返す。3.609 秒(広告が途絶えたとき)を待つ話とは別 LAN 側の口が落ちた場合は別。そのグループは Init になり比較に入らない preempt:優先度が高い方が Master を取り返すか 既定は有効(規格の既定値が「取り返す」) 有効: 直った高優先度の機器が Master を取り返す 無効: 優先度が高くても、今の Master が止まるまで Backup のまま 「直したのに元に戻らない」ときは、ここを見る VRRP は IETF の標準(RFC 5798)。HSRP・GLBP は Cisco の文書にある 同じ目的の仕組み。CCNA は「目的・機能・概念の説明」まで フロー ① PC-A は宛先が自分のネットワークの外なので、書いてあるデフォルトゲートウェイ 192.168.10.1 の MAC を ARP で聞く(全員あて) ② Master(ルータ 1)だけが応える。返す MAC は自分の物理ポートの MAC ではなく、仮想 MAC 0000.5e00.010b。Backup は応えない ③ PC-A は宛先 MAC = 仮想 MAC でフレームを出す。スイッチは ② で学習した「仮想 MAC → ポート 1」の行を見て転送する(ここでは学習は起きない) ④ Master は 1 秒ごとに広告を出す(宛先 224.0.0.18・IP プロトコル番号 112、送信元 MAC は仮想 MAC)。Backup は聞いているだけ ⑤ 広告が Master Down Interval(優先度 100 なら 3.609 秒)届かないと、Backup が Master になる。仮想 IP と仮想 MAC をそのまま引き継ぐ ⑥ 新しい Master は仮想 MAC を送信元にした ARP(GARP)を出す。スイッチは「仮想 MAC → ポート 2」に書き換える。PC-A の設定も ARP テーブルも変わらない 増えたもの 仮想 IP(論理。2 台で共有する、PC の GW 欄に書くための番地)と仮想 MAC(論理。グループ番号から規格どおりに作る番地) 3 層で見ると もの:仮想 IP・仮想 MAC(どちらも論理。機器 1 台に属さない)/実 IP(各ルータの口に付く、機器ごとの番地)/優先度(論理・手動) 結びつき:仮想 IP ⇄ どの機器が応えるか(自動。優先度と広告で決まる)。PC の GW 欄 ⇄ 仮想 IP(手動。一度書いたら切替後も変えない) フロー:図 5 の ①「A はデフォルトゲートウェイへ送る」の宛先が、特定の 1 台ではなく仮想の番地になる。②以降のルータの動きは図 5 のまま 各テーブル・各状態の推移(○番のフローで変わる行。青字) 前提: ルータ 1 も ルータ 3 も データセンターまでの経路を持っている(VRRP は経路の話ではなく「PC から見た出口を誰が名乗るか」の話) PC-A: 設定(手動) IP 192.168.10.10 / GW 192.168.10.1 出口として書ける番地は 1 つだけ ⑤ の切替があっても、ここは変えない PC-A: ARP テーブル ② 追加: 192.168.10.1 → 0000.5e00.010b ⑥ の後も同じ行のまま(変わらない) スイッチ 1: MAC アドレステーブル ② 追加: 0000.5e00.010b → ポート 1 (Master の ARP 応答の送信元 MAC で学習) ③ この行を見てルータ 1 へ出す(学習ではなく転送) ⑥ 変更: 0000.5e00.010b → ポート 2(GARP で) ルータ 1 の VRRP(グループ 11) State Master / 優先度 105 仮想 IP 192.168.10.1 WAN 側が落ちると 105−20=85 → Backup へ LAN 側が落ちるとこのグループは Init へ ルータ 3 の VRRP(グループ 11) State Backup / 優先度 100 Master Down 3.609 秒(この間は待つ) ⑤ の後: Master ルータ 1・3 のルーティングテーブル 2 台ともデータセンター向けの行を持つ(手動) VRRP が決めるのは「誰が出口を名乗るか」だけ テーブルの中身は VRRP では変わらない 通信の中身の推移(フローごとのフレーム/パケット) ① PC-A → 全員:ARP 要求(GW の MAC を聞く) 宛先 MAC ff:ff:ff:ff:ff:ff(全員) 送信元 MAC MAC A 知りたい IP 192.168.10.1 自分の IP 192.168.10.10 データ ARP 要求 ARP は IP パケットではない(Ethernet の種類の欄が IP とは別の値)。中身が IP を扱うので同じ並びで描いている。ルータは ARP を中継しない ② ルータ 1(Master)→ PC-A:ARP 応答。送信元 MAC が仮想 MAC 宛先 MAC MAC A 送信元 MAC 0000.5e00.010b 相手の IP 192.168.10.10 自分の IP 192.168.10.1 データ ARP 応答 Backup(ルータ 3)は同じ要求を受け取っても応えない。だから PC-A は Master の居場所しか知らない ③ PC-A → ルータ 1:本番(宛先 MAC は仮想 MAC) 宛先 MAC 0000.5e00.010b 送信元 MAC MAC A 宛先 IP 192.168.3.10 送信元 IP 192.168.10.10 データ ping フレーム=全部。ただしスイッチが見るのは MAC とタグの部分だけ パケット=この部分。ルータはここ(IP)を見る ④ Master の広告(1 秒ごと。データとは別に流れる) 宛先 MAC 0100.5e00.0012 送信元 MAC 0000.5e00.010b 宛先 IP 224.0.0.18 送信元 IP 192.168.10.11 データ VRRP ⑤⑥ 切替後 ルータ 3 → 全員:仮想 MAC を送信元にした ARP(GARP) 宛先 MAC ff:ff:ff:ff:ff:ff(全員) 送信元 MAC 0000.5e00.010b 知りたい IP 192.168.10.1 自分の IP 192.168.10.1 データ ARP 要求 自分の IP を自分で聞く形の ARP 要求。スイッチはこれが入ってきた瞬間に「仮想 MAC → ポート 2」へ書き換える ⑥ の後 PC-A → ルータ 3:本番。③ と中身は 1 つも変わらない 宛先 MAC 0000.5e00.010b 送信元 MAC MAC A 宛先 IP 192.168.3.10 送信元 IP 192.168.10.10 データ ping 出典: VRRP バージョン 3(RFC 5798)— https://www.rfc-editor.org/rfc/rfc5798.txt 原文:「IPv4 case: 00-00-5E-00-01-{VRID}」=仮想 MAC はグループ番号から作る 原文:「Skew_Time:(((256 - priority) * Master_Adver_Interval) / 256)」「Master_Down_Interval:(3 * Master_Adver_Interval) + Skew_time」 原文:「The default is 100 centiseconds (1 second)」=広告間隔の既定/「The default priority value ... is 100」/予備機の優先度は 1〜254 原文:「Preemption ... Default is True」=取り返すのが既定/Backup は「MUST NOT respond to ARP requests」=応えない 原文:「VRRP packets are transmitted with the virtual router MAC address as the source MAC address」=広告の送信元も仮想 MAC 原文: 広告のあて先は「224.0.0.18」、IP プロトコル番号は「112」。Master になるときに GARP を出す 宛先 MAC 0100.5e00.0012 は、この 224.0.0.18 から IPv4 マルチキャストの MAC 対応付け(RFC 1112 6.4「low-order 23-bits」)で導いた値 勉強会の実機表示(優先度 105 で 3.589 秒、優先度 100 で 3.609 秒)は、上の式の計算結果と一致した 勉強会の設定はバージョン 2 相当。仮想 MAC の形式・秒数の式・既定値・あて先はバージョン 2 の RFC 3768 でも同じだと確認した https://www.rfc-editor.org/rfc/rfc3768.txt 「00-00-5E-00-01-{VRID}」「(3 * Advertisement_Interval) + Skew_time」「The default is 1 second」 「口が落ちるとそのグループは Init になる」の根拠: RFC 5798 6.4 の状態遷移。勉強会のログ(Master から Init に変わった記録)とも一致 原文:「If a Shutdown event is received, then: ... Transition to the {Initialize} state」「The purpose of this state is to wait for a Startup event」 HSRP・GLBP: Cisco の First Hop Redundancy Protocols 設定ガイドにある、VRRP と同じ目的の仕組み https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/ipapp_fhrp/configuration/xe-16/fhp-xe-16-book/fhp-hsrp.html 「Cisco 独自」という語は上のページに見当たらなかったので、図では使っていない(VRRP が IETF の標準であることは RFC 5798 で確認済み) 未検証: 実際に通信が復旧するまでの時間(連続 ping が何発落ちるか)は、上の秒数だけでは決まらない。機器の実装と設定による CCNA 200-301 の範囲は 3.5「Describe the purpose, functions, and concepts of first hop redundancy protocols」(設定は範囲外) ## 図 5・図 2 との接続

図 5 の ①「A はデフォルトゲートウェイへ送る」の宛先が、特定の 1 台の口ではなく仮想の番地になります。② 以降のルータの動きは図 5 のままです。

図 2 の ARP(要求は全員あて、応答は 1 対 1)もそのまま効きます。違うのは、応える機器が 2 台のうち 1 台に決まっていることと、返す MAC が自分の口の MAC ではないことです。

次の図 17 からは「入口の管理」の塊に入り、PC が IP を受け取るところから見ます。

未検証・注意

  • Master Down Interval は「Master が居なくなったと判断するまでの秒数」で、通信が復旧するまでの秒数ではありません。連続 ping が何発落ちるかは実装と設定にもよります(未検証)。
  • track で優先度が下がったときの切替は、広告が途絶えるのを待つ経路とは別です。下がった優先度を載せた広告を Backup が受け取って取り返します。
  • WAN 側の口が落ちた場合と、LAN 側の口そのものが落ちた場合は別です。後者ではそのグループが Init になり、優先度の比較に入りません。この Init は RFC 5798 6.4 の状態遷移と勉強会のログの一致から書いています。Cisco の実装でインターフェースの down が規格の Shutdown イベントに当たるかは確認していません(未検証)。
  • HSRP と GLBP は、Cisco の文書にある同じ目的の仕組みです。上の設定ガイドに proprietary の語が見当たらなかったので、Cisco 独自とは書いていません。
  • 勉強会では LAN 側と WAN 側で別々のグループを持たせていました。この記事は 1 グループに絞り、仮想 IP を実際に持っている機器(優先度 255)の構成も扱っていません。
  • この図のルータ 3 は、支店に増やした 2 台目のゲートウェイです。図 13 で迂回路として出てくるルータ 3 とは別の機器で、名前が同じなだけです。
  • 勉強会の設定はバージョン 2 相当です。仮想 MAC の形式・式・既定値・あて先は RFC 3768 でも同じでした。

出典

関連

この記事の校閲記録

誰が・いつ・どの版の・どの段落を・何の観点で見て、何と言ったかを全件そのまま出す(追記のみ・削除しない)。

段落 33 のうち出典つき 12・出典なし 21

v1 2 件
  • AIAI (claude-fable-5) が AI 確認未解決

    出典 URL 4 本を再取得した。仮想 MAC の 00-00-5E-00-01-{VRID}、Skew_Time と Master_Down_Interval の式、広告間隔の既定 1 秒、優先度の既定 100、あて先 224.0.0.18、IP プロトコル番号 112、Backup は MUST NOT respond to ARP requests であることを RFC 5798 で確認し、仮想 MAC の形式・式・既定値が RFC 3768 でも同じであることを確認した。224.0.0.18 から 0100.5e00.0012 を導く対応付けは RFC 1112 6.4 で確認した。Cisco の HSRP の設定ガイドには proprietary の語が見当たらなかったため、HSRP・GLBP を Cisco 独自とは書いていない。切替で通信が戻るまでの時間、Cisco の実装でインターフェース down が規格の Shutdown イベントに当たるかは未検証として残した。校正チェックリストを通し、例え話・体言止め・未定義語の初出を検査した。守秘: 実名・社名・会場名・地名・金額なし

  • AIAI (claude-fable-5) が 編集未解決

    公開前の校閲。この図のルータ 3 は支店の 2 台目のゲートウェイで、図 13 で迂回路として出てくるルータ 3 とは別の機器なので、連載を通して読む人が同じ機器と読まないよう、注に 1 行足した。「②以降」を他の記事と同じ「② 以降」に直した。仮想 MAC 0000.5e00.010b、Master Down Interval 3.609 秒、あて先 224.0.0.18 は出典の式と値から再計算して一致を確認した。

参考文献

更新履歴

  • 連載のトピックを「ネットワーク基礎」から「ネットワーク」へ改名(32 本+目次。slug と URL は不変)
  • 公開: 連載「ネットワーク基礎」図 8〜24 の記事 17 本と目次の更新

機械可読の記録