HSRPを使ったロードバランシング
・HSRPを使って複数のデフォルトゲートウエイを経由させて,トラフィックを分散させる
・一方の経路がダウンしたら,もう一方の経路に切り替わるようにする
ネットワーク構成(画像を別ウインドウで表示)
RouterAのコンフィグ
!
version 12.3
service timestamps debug uptime
service timestamps log uptime
no service password-encryption
!
hostname RotuerA
!
interface Ethernet0
ip address 192.168.1.1 255.255.255.0
standby use-bia ←HSRPの仮想IPアドレスにMACアドレスを使う
standby 1 ip 192.168.1.254
standby 1 priority 255
standby 1 preempt
standby 2 ip 192.168.1.253 ←HSRPグループ2を定義
standby 2 preempt

!
interface Serial0
ip address 192.168.2.1 255.255.255.0
!
router ospf 1
log-adjacency-changes
passive-interface Ethernet0
network 0.0.0.0 255.255.255.255 area 0
!
line con 0
line aux 0
line vty 0 4
login
!
end
RouterBのコンフィグ
!
version 12.3
service timestamps debug uptime
service timestamps log uptime
no service password-encryption
!
hostname RouterB
!
interface Ethernet0
ip address 192.168.1.2 255.255.255.0
standby use-bia ←HSRPの仮想IPアドレスにMACアドレスを使う
standby 1 ip 192.168.1.254
standby 1 preempt
standby 2 ip 192.168.1.253 ←HSRPグループ2を定義
standby 2 priority 255 ←プライオリティ値を255にしてこちらをプライマリにする
standby 2 preempt

!
interface Serial0
ip address 192.168.3.1 255.255.255.0
no fair-queue
!
router ospf 1
log-adjacency-changes
passive-interface Ethernet0
network 0.0.0.0 255.255.255.255 area 0
!
line con 0
line aux 0
line vty 0 4
login
!
end
RouterCのコンフィグ
!
version 12.3
service timestamps debug uptime
service timestamps log uptime
no service password-encryption
!
hostname RouterC
!
interface Loopback0
ip address 192.168.4.1 255.255.255.0
ip ospf network point-to-point ←Loopbackアドレスを設定のマスク長で送信するようにする
!
interface Serial0
ip address 192.168.2.2 255.255.255.0
clockrate 64000
no fair-queue
!
interface Serial1
ip address 192.168.3.2 255.255.255.0
clockrate 64000
no fair-queue
!
router ospf 1
log-adjacency-changes
network 0.0.0.0 255.255.255.255 area 0
!
line con 0
line aux 0
line vty 0 4
login
!
end
確認
ルーターに複数のHSRPグループを設定することもできます。
すると,端末のデフォルトゲートウエイあてのトラフィックをロードバランスさせることができます。

●インタフェースに複数のHSRPグループを設定する
インタフェース0に,二つ目のHSRPグループであるグループ2を設定します。
すると,「インタフェースのハードウエアは,複数のグループをサポートできない」というメッセージが出ます。

RotuerA(config)#interface ethernet 0
RotuerA(config-if)#standby 2 ip 192.168.1.253
% Interface hardware cannot support multiple groups.


なぜでしょうか。
ルーターは,Ethernetインタフェースで受信すべきMACアドレスを登録します。
ですが,旧型のEthernetチップは,複数のMACアドレスを登録できません。
具体的には,「Lance」や「PQUICC」と呼ばれるEthernetチップを搭載している機器です。
(これについては,シスコのHSRP解説ページの重要な注意事項を参照してください。)

Ethernetインタフェースのチップは,show interfaceで確認することができます。
私が使ったCisco2500で見てみると,「Lance」になっていました。

RotuerA#show interfaces ethernet 0
Ethernet0 is up, line protocol is up
 Hardware is Lance, address is 0010.7b3b.eb02 (bia 0010.7b3b.eb02)
 Internet address is 192.168.1.1/24
(以下略)


●HSRPグループを複数設定できない場合の解決策
回避方法としては,HSRPグループごとに自動的に割り当てられる仮想IPアドレスを使うのではなく,インタフェースにもともとあるMACアドレスを複数のHSRPグループで共通して使う方法があります。
それが,use-biaコマンドです。
「bia」とはburnt in address(焼き付けアドレス)の略で,つまりMACアドレスのことです。

設定方法は,「standby use-bia」と入力します。
設定後は,インタフェースをいったんshutdownして,再起動する必要があります。
RouterAにHSRPグループ2を設定したのが以下です。

RouterA(config)#interface ethernet 0
RotuerA(config-if)#standby use-bia
RotuerA(config-if)#standby 2 ip 192.168.1.253
% Warning: Interface MAC address filter only supports 1 additional addresses
% and 1 HSRP groups are already configured. The HSRP MAC address may not be
% added to the MAC address filter if the group becomes active.
RotuerA(config-if)#standby 2 preempt
RotuerA(config-if)#shutdown
RotuerA(config-if)#no shutdown


RouterBにも同様に設定します。
RouterBでは,自身がHSRPグループ2のActiveルーターになるように,プライオリティを255に設定します。
入力後に,グループ2がActiveになったメッセージが表示されました。

RouterB(config)#interface ethernet 0
RouterB(config-if)#standby use-bia
RouterB(config-if)#standby 2 ip 192.168.1.253
RouterB(config-if)#standby 2 priority 255
RouterB(config-if)#standby 2 preempt
RotuerB(config-if)#shutdown
RotuerB(config-if)#no shutdown


00:37:31: %HSRP-6-STATECHANGE: Ethernet0 Grp 2 state Standby -> Active

●設定の確認
show standbyコマンドを使って,HSRPの設定を確認してみましょう。
RouterAは以下です。

RotuerA#show standby
Ethernet0 - Group 1
 State is Active
  5 state changes, last state change 00:04:09
 Virtual IP address is 192.168.1.254
 Active virtual MAC address is 0010.7b3b.eb02
  Local virtual MAC address is 0010.7b3b.eb02 (bia)
 Hello time 3 sec, hold time 10 sec
  Next hello sent in 2.116 secs
 Preemption enabled
 Active router is local
 Standby router is 192.168.1.2, priority 100 (expires in 9.816 sec)
 Priority 255 (configured 255)
 IP redundancy name is "hsrp-Et0-1" (default)
Ethernet0 - Group 2
 State is Standby
  9 state changes, last state change 00:00:32
 Virtual IP address is 192.168.1.253
 Active virtual MAC address is 0010.7b38.10b2
  Local virtual MAC address is 0010.7b3b.eb02 (bia)
 Hello time 3 sec, hold time 10 sec
  Next hello sent in 0.596 secs
 Preemption enabled
 Active router is 192.168.1.2, priority 255 (expires in 9.788 sec)
 Standby router is local
 Priority 100 (default 100)
 IP redundancy name is "hsrp-Et0-2" (default)


グループ1とグループ2の二つのHSRPグループが表示されました。
両方の「Local virtual MAC address is〜」に続くアドレスを見ると,「(bia)」という表示があり,仮想MACアドレスではなく,インタフェースのMACアドレスを使っていることがわかります。

show interefaceでRouterAのEthernet0インタフェースのMACアドレスを確認してみましょう。

RotuerA#show interfaces ethernet 0
Ethernet0 is up, line protocol is up
 Hardware is Lance, address is 0010.7b3b.eb02 (bia 0010.7b3b.eb02)
 Internet address is 192.168.1.1/24


「0010.7b3b.eb02」で,RouterAのshow standbyで表示されているアドレスと一致しています。
このMACアドレスを,RouterAのHSRPグループ1とHSRPグループ2で共有して使っているわけです。

RouterBも同様に確認してみましょう。

RouterB#show standby
Ethernet0 - Group 1
 State is Standby
  12 state changes, last state change 00:01:30
 Virtual IP address is 192.168.1.254
 Active virtual MAC address is 0010.7b3b.eb02
  Local virtual MAC address is 0010.7b38.10b2 (bia)
 Hello time 3 sec, hold time 10 sec
  Next hello sent in 2.676 secs
 Preemption enabled
 Active router is 192.168.1.1, priority 255 (expires in 8.968 sec)
 Standby router is local
 Priority 100 (default 100)
 IP redundancy name is "hsrp-Et0-1" (default)
Ethernet0 - Group 2
 State is Active
  4 state changes, last state change 00:01:30
 Virtual IP address is 192.168.1.253
 Active virtual MAC address is 0010.7b38.10b2
  Local virtual MAC address is 0010.7b38.10b2 (bia)
 Hello time 3 sec, hold time 10 sec
  Next hello sent in 2.648 secs
 Preemption enabled
 Active router is local
 Standby router is 192.168.1.1, priority 100 (expires in 9.228 sec)
 Priority 255 (configured 255)


HSRPグループ1とHSRPグループ2で使っているMACアドレスは,「0010.7b38.10b2」です。
これは,RouterBのEthernet0インタフェースのMACアドレスを使っているわけです。

RouterB#show interfaces ethernet 0
Ethernet0 is up, line protocol is up
 Hardware is Lance, address is 0010.7b38.10b2 (bia 0010.7b38.10b2)
 Internet address is 192.168.1.2/24


このように,use-biaコマンドを使うと,複数のHSRPグループで実在するMACアドレスを共有するようになるわけです。

●動作の確認
以上までで,RouterAとRouterBの両方に,HSRPグループ1とHSRPグループ2を設定しました。
念のため,設定の確認をしましょう。

RouterAでは,HSRPグループ1がActiveで,HSRPグループ2がStandbyです。

RotuerA#show standby
Ethernet0 - Group 1
 State is Active
  6 state changes, last state change 00:15:05
 Virtual IP address is 192.168.1.254
 Active virtual MAC address is 0010.7b3b.eb02
  Local virtual MAC address is 0010.7b3b.eb02 (bia)
 Hello time 3 sec, hold time 10 sec
  Next hello sent in 0.900 secs
 Preemption enabled
 Active router is local
 Standby router is 192.168.1.2, priority 100 (expires in 9.056 sec)
 Priority 255 (configured 255)
 IP redundancy name is "hsrp-Et0-1" (default)
Ethernet0 - Group 2
 State is Standby
  5 state changes, last state change 00:14:46
 Virtual IP address is 192.168.1.253
 Active virtual MAC address is 0010.7b38.10b2
  Local virtual MAC address is 0010.7b3b.eb02 (bia)
 Hello time 3 sec, hold time 10 sec
  Next hello sent in 1.680 secs
 Preemption enabled
 Active router is 192.168.1.2, priority 255 (expires in 9.020 sec)
 Standby router is local
 Priority 100 (default 100)


RouterBは逆に,HSRPグループ1がStandbyで,HSRPグループ2がActiveです。

RouterB#show standby
Ethernet0 - Group 1
 State is Standby
  9 state changes, last state change 00:15:50
 Virtual IP address is 192.168.1.254
 Active virtual MAC address is 0010.7b3b.eb02
  Local virtual MAC address is 0010.7b38.10b2 (bia)
 Hello time 3 sec, hold time 10 sec
  Next hello sent in 0.996 secs
 Preemption enabled
 Active router is 192.168.1.1, priority 255 (expires in 9.828 sec)
 Standby router is local
 Priority 100 (default 100)
 IP redundancy name is "hsrp-Et0-1" (default)
Ethernet0 - Group 2
 State is Active

  2 state changes, last state change 01:09:40
 Virtual IP address is 192.168.1.253
 Active virtual MAC address is 0010.7b38.10b2
  Local virtual MAC address is 0010.7b38.10b2 (bia)
 Hello time 3 sec, hold time 10 sec
  Next hello sent in 0.956 secs
 Preemption enabled
 Active router is local
 Standby router is 192.168.1.1, priority 100 (expires in 9.408 sec)
 Priority 255 (configured 255)
 IP redundancy name is "hsrp-Et0-2" (default)


デフォルトゲートウエイをRouterA(192.168.1.254)に設定したパソコンから192.168.4.1にpingを打つと成功します。
このあとパソコンのARPテーブルを見てみると,RouterAのMACアドレス(00-10-7b-3b-eb-02)を学習していることがわかります。
つまり,このパソコンは,RouterAを経由しているわけです。

C:\>arp -a

Interface: 192.168.1.100 on Interface 0x2
 Internet Address   Physical Address   Type
 192.168.1.254     00-10-7b-3b-eb-02   dynamic


もう1台の,デフォルトゲートウエイをRouterB(192.168.1.253)に設定したパソコンはどうでしょうか。
こちらからも,192.168.4.1にpingを打ったあとに,ARPテーブルを表示してみます。
すると,RouterBのMACアドレス(00-10-7b-38-10-b2)を学習しており,こちらはRouterBを経由していることがわかります。

C:\>arp -a

Interface: 192.168.1.200 --- 0x2
 Internet Address   Physical Address   Type
 192.168.1.253     00-10-7b-38-10-b2   dynamic


それぞれのパソコンで,経由するデフォルトゲートウエイを分散することにより,ロードバランスを実現できました。

●経路切り替えの確認
障害が発生したときの経路の切り替え動作も見ておきましょう。

RouterAをシャットダウンすると,RouterBがActiveになります。

RotuerA(config-if)#shutdown
00:48:14: %HSRP-6-STATECHANGE: Ethernet0 Grp 1 state Active -> Init
00:48:16: %LINK-5-CHANGED: Interface Ethernet0, changed state to administratively down
00:48:17: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet0, changed state to down

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


逆に,RouterBをシャットダウンすると,RouterAがActiveになります。

RouterB(config-if)#shutdown
00:44:31: %LINK-5-CHANGED: Interface Ethernet0, changed state to administratively down
00:44:32: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet0, changed state to down

RotuerA#
00:50:24: %HSRP-6-STATECHANGE: Ethernet0 Grp 2 state Standby -> Active


ここで通信が途切れるのは数秒くらいです。

でもパソコンのARPテーブルには,古いMACアドレスが記録されているはずです。
Windowsパソコンでは,デフォルトで2分間,ARPテーブルの情報を保持します。
そのため,障害が発生すると,障害が発生したルーターあてにパケットを送り続けることになって,2分間は通信ができなくなるはずです。
それなのに,なぜ数秒で切り替わるのでしょうか?

それは,新たにActiveになったルーターが,「Gratuitous ARP」と呼ばれるパケットを送信するからです。
Gratuitous ARPは,自身のMACアドレスをLAN上のマシンに知らせるためのARPです。
パソコンがこのGratuitous ARPパケットを受け取ると,ARPテーブルの情報をその場で書き換えます。
こうすることでパソコンは,常にActiveルーターのMACアドレスあてにパケットを送るようになるわけです。


●HSRP(Hot Stanby Router Protocol)を使用したロード シェアリング
http://www.cisco.com/japanese/warp/public/3/jp/service/tac/619/7-j.shtml

HSRPラボ
HSRPの基本
プリエンプト
インタフェース・トラッキング
HSRPを使ったロードバランシング
VRRP