0

HSRP 動作検証 纏め

HSRPのしくみ

HSRPは,シスコ・ルーターが装備するルーター冗長化プロトコルです。
同じグループに属する複数台のルーターが情報をやりとりして,共通のIPアドレスとMACアドレスを持ちます。
その中の1台がActiveルーターになり, ARP応答やルーティングといった処理を実行します。
その他のルーターはStandbyルーターになり,Activeルーターあての経路がなくなったときに1台が処理を引き継ぎます。
デフォルトでは,ルーター同士が3秒間隔でHelloパケットをやりとりし(Hello time),相手からのHelloが10秒間来なくなったら相手がダウンしたとみなします(hold time)。
このしくみを使うと,LAN上のパソコンが,デフォルトゲートウエイのアドレスを変更せずに,障害回避ができるようになります。

❏ 設定の確認

このラボ・シナリオでは,RouterAとRouterBの2台を,1台のアドレスを持つルーターに見立てます。
HSRPの設定は,インタフェースの設定モードでstandbyコマンドを使います。

RouterAのHSRPの設定は以下です。
HSRPグループが1で,仮想IPアドレスを192.168.1.254にしています。
さらに,プライオリティを255に設定しています。
このプライオリティ値が大きいルーターが,Activeルーターに選出されます。

RouterA(config)#interface ethernet 0
RouterA(config-if)#standby 1 ip 192.168.1.254
RouterA(config-if)#standby 1 priority 255

RouterBの設定が以下です。
RouterAと同様に,HSRPグループが1で仮想IPアドレスを192.168.1.254にしています。
プライオリティは設定していません。
プライオリティを設定しない場合は,デフォルトのプライオリティ値である100が適用されます。

RouterB(config)#interface ethernet 0
RouterB(config-if)#standby 1 ip 192.168.1.254

ちなみに,プライオリティ値が両ルーターで同じ場合は,IPアドレスが一番大きいルーターがActiveルーターになります。
設定は以上です。

❏ 設定の確認

以上の設定をすると,お互いのEthernet0ポート同士でHelloメッセージをやりとりして,ActiveルータとStandbyルーターが決まります。
show standbyコマンドを使ってHSRPの様子を確認してみましょう。
RouterAの表示結果は以下です。

RotuerA#show standby
Ethernet0 - Group 1
 State is Active
  2 state changes, last state change 00:01:09
 Virtual IP address is 192.168.1.254
 Active virtual MAC address is 0000.0c07.ac01
  Local virtual MAC address is 0000.0c07.ac01 (bia)
 Hello time 3 sec, hold time 10 sec
  Next hello sent in 2.324 secs
 Preemption disabled
 Active router is local
 Standby router is 192.168.1.2, priority 100 (expires in 9.504 sec)
 Priority 255 (configured 255)
 IP redundancy name is "hsrp-Et0-1" (default)

「State is Active」とあり,Activeルーターになっていることがわかります。
つまり,現在はこのルーターがデフォルトゲートウエイとして動作しているわけですね。
そして「Virtual IP address is 192.168.1.254」とあり,仮想IPアドレスが192.168.1.254になっています。
プライオリティが,255になっていることもわかります。

RouterBのHSRPの様子も見てみましょう。

RouterB#show standby
Ethernet0 - Group 1
 State is Standby
  1 state change, last state change 00:01:06
 Virtual IP address is 192.168.1.254
 Active virtual MAC address is 0000.0c07.ac01
  Local virtual MAC address is 0000.0c07.ac01 (default)
 Hello time 3 sec, hold time 10 sec
  Next hello sent in 2.952 secs
 Preemption disabled
 Active router is 192.168.1.1, priority 255 (expires in 9.600 sec)
 Standby router is local
 Priority 100 (default 100)
 IP redundancy name is "hsrp-Et0-1" (default)

「State is Standby」とあり,Standbyルーターになっていることがわかります。
このルーターは待機中で,RouterAへの経路がなくなったときの予備経路というわけです。
プライオリティは,デフォルトの100が適用されています。
RouterAのプライオリティ(255)の方が値が大きいので,RouterAがActiveになったわけです。

RouterAとRouterB共に,Hello間隔(Hello time)が3秒で,Heloが来なくなったときにダウンとみなすまでの時間(hold time)が10秒であることもわかります。

❏ パソコンの設定を確認

この状態でパソコンから192.168.4.1へpingを打つと,pingが返ってきます。
パソコンの状態を確認してみましょう。
アドレスの設定は以下です。
デフォルト・ゲートウエイは,HSRPの仮想IPアドレスである192.168.1.254を指定します。

C:\>ipconfig

Windows IP Configuration

Ethernet adapter ローカル エリア接続:

    Connection-specific DNS Suffix . :
    IP Address. . . . . . . . . . . . . . : 192.168.1.100
    Subnet Mask . . . . . . . . . . . . : 255.255.255.0
    Default Gateway . . . . . . . . . : 192.168.1.254

192.168.4.1へpingを打った後に,パソコンのARPテーブルを見てみます。

C:\>arp -a

Interface: 192.168.1.100 --- 0x10004
 Internet Address   Physical Address     Type
 192.168.1.254     00-00-0c-07-ac-01   dynamic

すると,192.168.1.254のMACアドレスを00-00-0c-07-ac-01と記録しています。
これは,RouterAがARPで返答した,仮想IPアドレス(192.168.1.254)に対応する仮想MACアドレスです。
HSRPでは,「00-00-0c-07-ac-**」という仮想MACアドレスを使います。
「**」の部分には,HSRPのグループ番号が入ります。
今回は,グループ1を指定したので「01」になったわけですね。

動作確認

(RouterA手前のケーブルを抜いてみる)
では,実際にHSRPによる経路切り替えの動作を確認してみましょう。
RouterAのEthernet0につながっているケーブルを抜いてみます。

RouterA#
00:28:21: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet0, changed state to down
00:28:21: %HSRP-6-STATECHANGE: Ethernet0 Grp 1 state Active -> Init

HSRPのステートが「Active」から「Init」になったことを示すメッセージが出ました。
RouterAはActiveルーターではなくなったわけです。

RouterB#
00:28:03: %HSRP-6-STATECHANGE: Ethernet0 Grp 1 state Standby -> Active

一方RouterBには,HSRPのステートが「Standby」から「Active」になったことを示すメッセージが出ました。
Standby状態だったルーターが,Activeルーターに昇格したわけです。
この間,パソコンから192.168.4.0へのpingは数秒くらい途切れますが,再び通るようになります。

RouterAとRouterBのHSRPの状態がどう変わったか見てみましょう。
RouterAは,インタフェースがダウンして,Initステートになったことがわかります(下の赤字の部分)。

RotuerA#show standby
Ethernet0 - Group 1
 State is Init (interface down)
  3 state changes, last state change 00:00:46
 Virtual IP address is 192.168.1.254
 Active virtual MAC address is unknown
  Local virtual MAC address is 0000.0c07.ac01 (default)
 Hello time 3 sec, hold time 10 sec
 Preemption disabled
 Active router is unknown
 Standby router is unknown
 Priority 255 (configured 255)
 IP redundancy name is "hsrp-Et0-1" (default)

一方のRouterBを見てみると,こちらがActiveルーターになったことがわかります(下の赤字の部分)。

RouterB#show standby
Ethernet0 - Group 1
 State is Active
  2 state changes, last state change 00:01:02
 Virtual IP address is 192.168.1.254
 Active virtual MAC address is 0000.0c07.ac01
  Local virtual MAC address is 0000.0c07.ac01 (bia)
 Hello time 3 sec, hold time 10 sec
  Next hello sent in 0.416 secs
 Preemption disabled
 Active router is local
 Standby router is unknown
 Priority 100 (default 100)
 IP redundancy name is "hsrp-Et0-1" (default)

つまりパソコンは,RouterBの方の経路を使うようになったわけです。
このとき,RouterBも,RouterAと同じ仮想IPアドレス(192.168.1.254)と仮想MACアドレス(00-00-0c-07-ac-01)を使うので,パソコン側の設定変更は必要ありません。

❏ RouterAのケーブルを戻してもActiveはRouterBのまま
ただしHSRPで注意が必要なのは,RouterAが障害から復帰してもRouterAがActiveに戻らない点です。
試しに,抜いていたRouterAのEthernet0ポートのケーブルを再びつないでみます。

RouterAのHSRPの様子を見てみると,Standbyのままです。

RotuerA#
00:36:09: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet0, changed state to up
00:36:19: %OSPF-5-ADJCHG: Process 1, Nbr 192.168.3.1 on Ethernet0 from LOADING to FULL, Loading Done
RotuerA#show standby
Ethernet0 - Group 1
 State is Standby
  4 state changes, last state change 00:00:14
 Virtual IP address is 192.168.1.254
 Active virtual MAC address is 0000.0c07.ac01
  Local virtual MAC address is 0000.0c07.ac01 (default)
 Hello time 3 sec, hold time 10 sec
  Next hello sent in 0.656 secs
 Preemption disabled
 Active router is 192.168.1.2, priority 100 (expires in 9.644 sec)
 Standby router is local
 Priority 255 (configured 255)
 IP redundancy name is "hsrp-Et0-1" (default)

RouterBもActiveのままです。

RouterB#
00:36:19: %OSPF-5-ADJCHG: Process 1, Nbr 192.168.2.1 on Ethernet0 from LOADING to FULL, Loading Done
RouterB#show standby
Ethernet0 - Group 1
 State is Active
  2 state changes, last state change 00:03:15
 Virtual IP address is 192.168.1.254
 Active virtual MAC address is 0000.0c07.ac01
  Local virtual MAC address is 0000.0c07.ac01 (bia)
 Hello time 3 sec, hold time 10 sec
  Next hello sent in 2.584 secs
 Preemption disabled
 Active router is local
 Standby router is 192.168.1.1, priority 255 (expires in 7.584 sec)
 Priority 100 (default 100)
 IP redundancy name is "hsrp-Et0-1" (default)

RouterBのEthernet0ポートがダウンすると,RouterAが再びActiveルーターになります。
ただ,「通常は常にRouterAを使うようしたい」という場合もあります。
そこでHSRPには,障害から復帰したときなどでも常にプライオリティの高いルーターをActiveルーターにする「preempt」(プリエンプト)という機能があります。

❏ ホットスタンバイ ルータ プロトコル(HSRP)の特長と機能

http://www.cisco.com/japanese/warp/public/3/jp/service/tac/619/hsrpguidetoc-j.html

ホットスタンバイ ルータ プロトコル(HSRP): FAQ

http://www.cisco.com/japanese/warp/public/3/jp/service/tac/619/3-j.shtml

HSRPのデフォルトの動作では,Activeルーターがダウンしたあとに復旧しても,Activeにならない。
復旧したルーターを再びActiveにしたいときは,preempt(プリエンプト)という機能を使う必要があります。

❏ preemptの設定

今回は,RouterAでpreemptを有効にします。
RouterAで,以下のコマンドを1行追加してやるだけでOKです(赤字の部分)。

RotuerA(config)#interface ethernet 0
RotuerA(config-if)#standby 1 preempt

ちなみに,「HSRPの基本」のラボ・シナリオとの違いは,このコマンドの有無だけです。

❏ 設定の確認

RouterAでpreemptの機能が動作しているか確認してみましょう。
HSRPの状態を確認するshow standbyコマンドを使います。

RotuerA#show standby
Ethernet0 - Group 1
 State is Active
  5 state changes, last state change 00:01:05
 Virtual IP address is 192.168.1.254
 Active virtual MAC address is 0000.0c07.ac01
  Local virtual MAC address is 0000.0c07.ac01 (bia)
 Hello time 3 sec, hold time 10 sec
  Next hello sent in 0.276 secs
 Preemption enabled
 Active router is local
 Standby router is 192.168.1.2, priority 100 (expires in 8.264 sec)
 Priority 255 (configured 255)
 IP redundancy name is "hsrp-Et0-1" (default)

「Preemption enabled」という表示があります。
RouterAでは,確かにpreemptが有効になっているのがわかります。
また,「State is Active」となっており,現在このルーター(RouterA)が使われていることわかります。

一方,RouterBは,「State is Standby」となっており,待機中であることがわかります。

RouterB#show standby
Ethernet0 - Group 1
 State is Standby
  4 state changes, last state change 00:01:18
 Virtual IP address is 192.168.1.254
 Active virtual MAC address is 0000.0c07.ac01
  Local virtual MAC address is 0000.0c07.ac01 (default)
 Hello time 3 sec, hold time 10 sec
  Next hello sent in 2.344 secs
 Preemption disabled
 Active router is 192.168.1.1, priority 255 (expires in 8.348 sec)
 Standby router is local
 Priority 100 (default 100)
 IP redundancy name is "hsrp-Et0-1" (default)

❏ 動作の確認(RouterA手前のケーブルを抜いて,その後戻してみる)

RouterAのケーブルを抜き差ししたときに,両ルーターに表示されるメッセージを見てみましょう。

最初に,RouterAの手前のケーブルを抜きます。
RouterAのEthernet0がダウンし,HSRPのステートもActiveではなくなりました。

RotuerA#
00:33:07: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet0, changed state to down
00:33:07: %HSRP-6-STATECHANGE: Ethernet0 Grp 1 state Active -> Init

一方のRouterBには,StandbyからActiveになったことを示すメッセージが出ました。

RouterB#
00:32:49: %HSRP-6-STATECHANGE: Ethernet0 Grp 1 state Standby -> Active

次に,
先ほど抜いたRouterA手前のケーブルを戻してみて,preemptの動作を確かめてみましょう。
RouterAのEthernet0がアップし,HSRPのステートがActiveになりました。

RouterA#
00:33:56: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet0, changed state to up
00:33:58: %HSRP-6-STATECHANGE: Ethernet0 Grp 1 state Listen -> Active

一方のRouterBには,Activeではなくなったことを示すメッセージが出ました。

RouterB#
00:33:34: %HSRP-6-STATECHANGE: Ethernet0 Grp 1 state Active -> Speak

これで,RouterAのEthernet0が稼働しているときは,必ずRouterAを使うようになりました。
これが,preemptの機能というわけです。

❏ HSRPでやりとりするメッセージを確認

ケーブルを戻したときにRouterAの様子の詳細をdebugコマンドで観察してみましょう。
debug standbyコマンドを使います。

RotuerA#debug standby
HSRP debugging is on
RotuerA#
00:35:02: HSRP: Et0 Grp 1 Hello in 192.168.1.2 Active pri 100 vIP 192.168.1.254
00:35:02: HSRP: Et0 Grp 1 Active router is 192.168.1.2
00:35:03: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet0, changed state to up
00:35:03: HSRP: Et0 API Software interface coming up
00:35:03: HSRP: Et0 Interface up ←①
00:35:03: HSRP: Et0 Starting minimum interface delay (1 secs)
00:35:04: HSRP: Et0 Interface min delay expired
00:35:04: HSRP: Et0 Grp 1 Init: a/HSRP enabled
00:35:04: HSRP: Et0 Grp 1 Init -> Listen
00:35:04: HSRP: Et0 Grp 1 Redundancy "hsrp-Et0-1" state Init -> Backup
00:35:04: HSRP: Et0 Redirect adv out, Passive, active 0 passive 1
00:35:05: HSRP: Et0 Grp 1 Hello in 192.168.1.2 Active pri 100 vIP 192.168.1.254 ←②
00:35:05: HSRP: Et0 Grp 1 Listen: h/Hello rcvd from lower pri Active router (100/192.168.1.2) ←③
00:35:05: HSRP: Et0 Grp 1 Active router is local, was 192.168.1.2
00:35:05: HSRP: Et0 Redirect adv out, Active, active 1 passive 2
00:35:05: HSRP: Et0 Grp 1 Coup  out 192.168.1.1 Listen pri 255 vIP 192.168.1.254 ←④
00:35:05: HSRP: Et0 Grp 1 Listen -> Active ←⑤
00:35:05: %HSRP-6-STATECHANGE: Ethernet0 Grp 1 state Listen -> Active
00:35:05: HSRP: Et0 Grp 1 Redundancy "hsrp-Et0-1" state Backup -> Active
00:35:05: HSRP: Et0 Redirect adv out, Active, active 1 passive 1
00:35:05: HSRP: Et0 Grp 1 Hello out 192.168.1.1 Active pri 255 vIP 192.168.1.254
00:35:05: HSRP: Et0 API MAC address update
00:35:05: HSRP: Et0 REDIRECT adv in, Passive, active 0, passive 1, from 192.168.1.2
00:35:05: HSRP: Et0 Grp 1 Hello in 192.168.1.2 Speak  pri 100 vIP 192.168.1.254
00:35:05: HSRP: Et0 API Add active HSRP addresses to ARP table
00:35:08: HSRP: Et0 Grp 1 Hello in 192.168.1.2 Speak  pri 100 vIP 192.168.1.254
00:35:08: HSRP: Et0 Grp 1 Hello out 192.168.1.1 Active pri 255 vIP 192.168.1.254
00:35:11: HSRP: Et0 Grp 1 Hello in 192.168.1.2 Speak  pri 100 vIP 192.168.1.254
00:35:11: HSRP: Et0 Grp 1 Hello out 192.168.1.1 Active pri 255 vIP 192.168.1.254
00:35:14: HSRP: Et0 Grp 1 Hello in 192.168.1.2 Speak  pri 100 vIP 192.168.1.254
00:35:14: HSRP: Et0 Grp 1 Hello out 192.168.1.1 Active pri 255 vIP 192.168.1.254
00:35:15: HSRP: Et0 Grp 1 Hello in 192.168.1.2 Standby pri 100 vIP 192.168.1.254
00:35:15: HSRP: Et0 Grp 1 Standby router is 192.168.1.2 ←⑥
00:35:17: HSRP: Et0 Grp 1 Hello out 192.168.1.1 Active pri 255 vIP 192.168.1.254
00:35:18: HSRP: Et0 Grp 1 Hello in 192.168.1.2 Standby pri 100 vIP 192.168.1.254

表示が多いので,注目部分をピックアップしてみます(赤字部分)。

①Ethernet0インタフェースがアップした。
②192.168.1.2というActiveルーター(プライオリティ値は100)からHelloが来た。
③自分よりプライオリティ値の低いActiveルーターからHelloを受信した。
④Coupメッセージを送出して,自分がActiveになることを知らせる。
⑤自身をActiveに変更する。
⑥192.168.1.2(ルーターB)をStandbyに変更する。

HSRPのメッセージは,Hello,Coup,Resignの3種類があります。
そのうちのCoupは,自身がActiveになりたい旨を宣言するメッセージです(Helloは定常通知,ResignはActiveの放棄)。
Activeルーターの復旧時は,Coupメッセージをやりとりすることで,ActiveとStandbyを決めているわけです。

standby preemptおよびstandby trackコマンドの使用法

http://www.cisco.com/japanese/warp/public/3/jp/service/tac/619/6-j.html

以上です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です