転載・引用について

ユーザ用ツール

サイト用ツール


tech:l2redundancy

Datalink Layerでの冗長化プロトコル

TCP/IPを利用する際、さまざまなLayerで冗長化Protocolが定義されているが、特に利用頻度が高いのはおそらくDatalink Layer(特にEthernet)におけるそれだろう。すぐに思いつく限りでもVRRP/HSRP/CARPは思いつくし、どうやらGLBPというのもあるらしい。

Protocol Summary

以下に各プロトコルに関する簡単な説明を記載する。

HSRP

Hot Standby Router Protocolの略

Cisco(TM)によって設計・実装された冗長化プロトコル。1998年、RFC2281で説明されている。プロプラエタリ実装であり、仕様は非公開。

HSRPは非常に古いProtocolであり、現在はversion2が主流。v2でIPv6がサポートされ、実装状の改善(安定性の向上、規模拡張容易性等の向上など)もされているため、現時点で利用するならv2であるべきである。

複数のNode間で共通のIP Addressを保持し、その中から代表(Master)を選出し、Masterがパケットの転送を行う

HSRPはあくまで共通のIP Addressを選出するためのProtocolであり、動作中のRouterの各種状態(NAT状態や経路表)は同期しないので、状態をもつ上位層プロトコルの取り扱いには注意が必要。

VRRP

Virtual Router Redundancy Protocolの略

HSRPがプロプラエタリ実装であるため、さまざまな実装でHSRPで実装された機能を利用できるようにIETFで検討されたProtocol。

複数のNode間で共通のIP Addressを保持し、その中から代表(Master)を選出し、Masterがパケットの転送を行う

VRRPはあくまで共通のIP Addressを選出するためのProtocolであり、動作中のRouterの各種状態(NAT状態や経路表)は同期しないので、状態をもつ上位層プロトコルの取り扱いには注意が必要。

(2023現在)現実的には最も普及・利用されているL2 Redundancy Protocolと言えるだろう

VRRPは各種Network機器に実装されており、HSRPを開発したCisco社のNetwork機器でも利用可能なことが多い

Opensource実装

他多数

CARP

Common Address Redundancy Protocolの略

OpenBSD Projectによって開発された VRRP 代替Protocol。

現在、OpenBSD, FreeBSD, NetBSDは標準でKernelもしくはKernel Moduleとして取り込まれている。LinuxやmacOSなどのPlatformでは、uCARP(Userland CARP)やCARP-rsなどの実装があるが、uCARP/CARP-rsはすでにArchive状態であり、更新は停止していると思われる。

簡単な歴史

IETFは1990年代後半、Routerの冗長性を確保するためのProtocol策定作業を開始した。Ciscoはこの分野における特許を取得していたため、それをIETFに通知、1998年にはHSRPに関する特許を通知した。さまざまな議論の末、IETF VRRP WGは、Ciscoが合理的で非差別的なライセンス条件の下で第三者に特許を利用できるようにする限り、特許技術に依存したまま、VRRPを承認することを決定した。その際、VRRPはHSRPプロトコルにあった問題を解決したため、CiscoはHSRPを独自のものとして主張しつつ、VRRPも使用し始めた。

以上の経緯より、Ciscoは、OpenBSD開発チームに対し、HSRPに特許を適用することを通告した。この際に提示されたCisco側のライセンス条件がOpenSourceとしてのVRRP実装を妨げたため、OpenBSD開発チームはVRRPの代替となるCARPの開発を開始した。OpenBSDはセキュリティに重点を置いており、CARPでやり取りされる通信を保護するために暗号技術を使用するようにCARPを設計した。また、Masterを決めるためのアルゴリズムも再設計したため、CARPはVRRPと根本的に異なる実装であって、Ciscoの特許を侵害しないことが保証された。

なお、Ciscoの保持するHSRPに関する米国特許は2014年に失効したが、このHSRP/VRRP/CARPの3つのプロトコルは現在も並行して共存している。

OpenBSDにおけるCARPにはL2でのLoad Balance機構(arpbalance)が実装されているが、FreeBSD 10.0以降では(CARPが再実装されたため)LB機能は実装されていない。(それ以前のFreeBSDでLB機構が実装されていたかは確認していない)。また、NetBSDは、Manual Pageを見る限りarpbalanceは実装されてるように見えるが、確認はしていない。このARP Balance機構を利用すると、複数ホストでLoad Balanceできる可能性がある。

VRRPとの非互換性

OpenBSDプロジェクトは、CARPのために、IANAに対し一意の番号を要求したが、拒否された。OpenBSDは特許対応等のためVRRPを「公式」な配布物に組み入れられないため、OpenBSDにおけるL2での冗長化ProtocolとしてはCARPを採用した。そのため、CARPに対し、他と競合しない(予定だった)IP Protocol 112に設定し、IANAに通知した。IANAはこれに対し、返事を拒否した。IANAではプロトコル番号112をVRRPに割り当て(1998年、RFC 2338)、現在でもプロトコル番号112はVRRPによって引き続き使用されている。このため、VRRPとCARPは現在でもプロトコル番号112で衝突したままである。

ただし、プロトコル番号が衝突していても、VRRPグループIDとCARP仮想ホストIDが異なる限り、同じブロードキャストドメインでVRRPとCARPを使用することは可能である。

GLBP

Gateway Load-Balancing Protolの略

Cisco(TM)によって設計・実装された冗長化プロトコル。

HSRP、VRRP、CARPが、複数台のnodeを 1 Master(Active) - Other Slave(Standby) 構成で冗長化を図るのに対し、GLBPは Multi Master構成で利用でき、負荷分散を図れるところが特徴。分散方法を決めるアルゴリズムとしては、host-depended/RoundRobin/Weightedの3種がある。

GLBPは、グループごとに1つのAVG(Active Virtual Gateway)を選択する。他のグループメンバーは、AVGに障害が発生した場合にAVGのバックアップとして機能する。AVGは、自身を含むGLBPグループの各メンバーに仮想MACアドレスを割り当て、AVF(Active Virtual Forwarders)を有効にする。各AVFは、仮想MACアドレスに送信されたパケットを転送する責任を負う。AVFは最大4台まで存在可能である。

IOS 12.2(33)SXIでGLBPがIPv6をサポートした。

その他

上記の他にもさまざまな実装がある。以下に一部を記載する

  • Extreme Standby Router Protocol (ESRP)
    • Extreme社製品に実装されている、高速FailoverおよびL2保護を実装したExtreme社独自プロトコル
  • Routed Split multi-link trunking (R-SMLT)
    • Avaya社独自プロトコル
  • NetScreen Redundancy Protocol (NSRP)
    • Juniper社独自プロトコル。元来は、Juniper社に買収されたNetscreen社の独自プロトコル
  • Chassis Cluster Redundant Ethernet
    • Juniper社独自プロトコル。SRXプラットフォームで使用されている
  • Multi-active Gateway Protocol (MAGP)
    • Mellanox社独自プロトコル。VRRPを元にした、Active-Acvive運用を可能にするプロトコル
  • VRRPE
    • Brocade社独自プロトコル

Protocol間比較

項目 HSRP v1 HSRP v2 VRRP CARP GLBP
規格 Cisco独自 同左 RFC3768 OpenBSD独自 Cisco独自
グループ構成 Active 1台 同左 Master 1台 Master 1台 AVG 1台
Standby その他 同左 Backup その他 Backup その他 AVF その他(最大4台)
最大グループ数 255 4095 255 255 1024
パケット転送 Active機 同左 Master機 Master機 AVF機
ARP Requestへの返答 Active機 同左 Master機 Master機 AVG機
Virtual IP Address 未使用アドレス 同左 物理I/Fもしくは未使用アドレス 未使用アドレス 未使用アドレス
Virtual MAC Address 0000.0c07.acXX 0000.0c9f.fXXX 0000.5e00.01XX 0000.5e00.01XX 0007.b400.XXYY
XX = グループ番号 同左 XX = グループ番号 XX = グループ番号 XX = グループ番号
YY=MACアドレス番号
Hello Multicast address 224.0.0.2 224.0.0.102 224.0.0.18 224.0.0.18 224.0.0.102
Timer default Hello 3s 同左 advertise 1s advbase 1s Hello 3s
Hold 10s 同左 master-down 3s advsket 0ms Hold 10s
認証方式 Plane text/MD5 同左 Plane text/MD5 SHA1 Plane text/MD5
preempt 無効 同左 有効 無効 AVG:無効, AVF:有効
動作プロトコル UDP上 同左 IP上 IP上 UDP上
UDP/IPでカプセル化 同左 IPでカプセル化 IPでカプセル化 UDP/IPでカプセル化
メッセージ送信に使うポート 1985/UDP 同左 112/IP 112/IP 3222/UDP
このウェブサイトはクッキーを使用しています。 Webサイトを使用することで、あなたはあなたのコンピュータにクッキーを保存することに同意します。 また、あなたはあなたが私たちのプライバシーポリシーを読んで理解したことを認めます。 同意しない場合はウェブサイトを離れてください。クッキーに関する詳細情報
tech/l2redundancy.txt · 最終更新: 2023/08/02 12:22 by seirios

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki