見出し画像

HSRPでWAN回線を冗長する


この記事で学べる事

・CiscoルータのHSRPを使ってゲートウェイの冗長化ができる

検証の流れ

  1. 検証環境の構築

  2. バックアップ回線の構築

  3. HSRP関連の設定

  4. 障害試験

検証内容

検証①HSRPの基本的な動きを確認する

HSRPでは、ルータを複数台に冗長する際に1つの仮想IPアドレスを使用することで、1つのルータ(=デフォルトゲートウェイ)に見せかけることができます。仮想IPアドレスは、Active/Standby構成において常にActiveルータ側が保有しているものになります。仮想IPアドレスを使用することで、「障害時に自動的に経由するルータを切り替えることができる」というHSRPの最も基本的な動作が機能することを確認してみましょう。

HSRPの基礎知識はこちらの記事を参考にしてみてください。


検証②プリエンプトで自動的に元のActive/Standby状態に戻ることを確認する

HSRPのプリエンプト機能を使うと、障害によってActiveルータがダウン→復旧と状態変化した際に、元々Activeだったルータを自動的にActiveに戻すことが可能です。今回は、障害復旧後も常にActiveルータとStandbyルータを固定としたい運用を想定して検証していきます。

検証③ トラッキングと組み合わせて障害検知ができることを確認する

HSRPを有効にしていないインターフェースや対向機器で障害が起きた際でも、トラッキング機能を使用することでHSRPの切り替わりを発生させることができます。最後に障害試験を行い、HSRPとトラッキングの連携ができていることを確認します。

構成図・各機器の基本Config

準備するもの

  • ルータ:Cisco 891FJ ×4台

  • L2スイッチ:Catalyst2960 ×1台

  • L3スイッチ:Catalyst3750 ×1台

  • 検証用PC:Windows ×2台

  • LANケーブル ×8本

  • コンソールケーブル ×1本

構成図①検証環境

検証にあたり、社内とインターネットを模した簡易的な構成を構築します。
RTAはISPルータからPPPoEでIPアドレスを割り当ててもらっているイメージです。ファイアウォールがないため、CBACという安全性を高める機能を設定しています。
PPPoEは下記記事で詳しく説明していますので参考にしてください。


検証環境(物理構成)
検証環境(論理構成)

各機器に以下のConfigを流し込んで設定しましょう。インターフェース名の部分はお手元の検証機器に合わせて変更してください。

・RTAのConfig

RTA#show run
hostname RTA
!
ip inspect name CBAC icmp
!
interface FastEthernet0
 ip address 192.168.10.253 255.255.255.0
 no shutdown
!
interface GigabitEthernet8
 no ip address
 pppoe enable group global
 pppoe-client dial-pool-number 1
 no shutdown
!
interface Dialer1
 ip address negotiated
 ip access-group EX in
 ip mtu 1454
 ip inspect CBAC out
 encapsulation ppp
 dialer pool 1
 dialer-group 1
 ppp authentication chap callin
 ppp chap hostname test1@example1.com
 ppp chap password 0 Cisco1
 no shutdown
!
ip route 0.0.0.0 0.0.0.0 Dialer1
!
ip access-list extended EX
 deny   ip any any
!
dialer-list 1 protocol ip permit
!
end

・SWのConfig

SW#show run
hostname SW
!
interface FastEthernet0/1
 switchport access vlan 10
 switchport mode access
 no shutdown
!
interface FastEthernet0/24
 switchport access vlan 10
 switchport mode access
 no shutdown
!
end

・RTAGAIBUのConfig

RTAGAIBU#show run
hostname RTAGAIBU
!
username test1@example1.com password 0 Cisco1
!
bba-group pppoe PPPOE-GROUP1
 virtual-template 1
!
interface Loopback1
 ip address 1.1.1.1 255.255.255.255
 no shutdown
!
interface FastEthernet0
 ip address 200.0.0.253 255.255.255.0
 no shutdown
!
interface GigabitEthernet8
 no ip address
 pppoe enable group PPPOE-GROUP1
 no shutdown
!
interface Virtual-Template1
 mtu 1454
 ip unnumbered Loopback1
 peer default ip address pool POOL1
 ppp authentication chap
 no shutdown
!
router ospf 1
 redistribute static subnets
 network 200.0.0.253 0.0.0.0 area 0
!
ip local pool POOL1 200.1.1.1
!
ip route 100.0.0.0 255.255.255.0 200.0.0.254
ip route 128.0.0.0 128.0.0.0 200.1.1.1
!
end

・SWGAIBUのConfig

SWGAIBU#show run
hostname SWGAIBU
!
ip routing
!
interface FastEthernet1/0/1
 switchport access vlan 100
 switchport mode access
 no shutdown
!
interface FastEthernet1/0/24
 switchport access vlan 200
 switchport mode access
 no shutdown
!
interface Vlan100
 ip address 100.0.0.254 255.255.255.0
 no shutdown
!
interface Vlan200
 ip address 200.0.0.254 255.255.255.0
 no shutdown
!
router ospf 1
 log-adjacency-changes
 network 200.0.0.254 0.0.0.0 area 0
!
end

この時点ではPC1のデフォルトゲートウェイ設定は192.168.10.253とします。外部PCのデフォルトゲートウェイは100.0.0.254で固定です。

確認観点①
PC1から外部のPC(PCGAIBU)までPing疎通できること
・PCGAIBUからPC1へPing疎通できないこと
・PC1でtracert 100.0.0.1と打って経由するルータも確認してみてください。下記のような実行結果になると思います。

C:\Users\user>tracert 100.0.0.1

100.0.0.1 へのルートをトレースしています。経由するホップ数は最大 30 です

  1     1 ms     1 ms     1 ms  192.168.10.253
  2     1 ms     1 ms     1 ms  1.1.1.1 
  3     1 ms     1 ms     1 ms  200.0.0.254
  4     1 ms     1 ms     1 ms  100.0.0.1

構成図②バックアップ回線を追加した後の構成図

検証①以降では以下の構成に変更して検証を行います。
通常時はメイン回線で通信し、メイン回線に障害が起きた際にバックアップ回線に自動的に切り替える運用に変更する、といったシチュエーションを模しています。構成図①の確認観点①が問題なければ、まずはここまで構築していきましょう。

検証の全体図

下記は追加のConfigになります。

・RTBのConfig

RTB#show run
hostname RTB
!
ip inspect name CBAC icmp
!
interface FastEthernet0
 ip address 192.168.10.252 255.255.255.0
 no shutdown
!
interface GigabitEthernet8
 no ip address
 pppoe enable group global
 pppoe-client dial-pool-number 1
 no shutdown
!
interface Dialer1
 ip address negotiated
 ip access-group EX in
 ip mtu 1454
 ip inspect CBAC out
 encapsulation ppp
 dialer pool 1
 dialer-group 1
 ppp authentication chap callin
 ppp chap hostname test2@example2.com
 ppp chap password 0 Cisco2
 no shutdown
!
ip route 0.0.0.0 0.0.0.0 Dialer1
!
ip access-list extended EX
 deny   ip any any
!
dialer-list 1 protocol ip permit
!
end

・RTBGAIBUのConfig

RTBGAIBU#show run
hostname RTBGAIBU
!
username test2@example2.com password 0 Cisco2
!
bba-group pppoe PPPOE-GROUP1
 virtual-template 1
!
interface Loopback1
 ip address 2.2.2.2 255.255.255.255
 no shutdown
!
interface FastEthernet0
 ip address 200.0.0.252 255.255.255.0
 no shutdown
!
interface GigabitEthernet8
 no ip address
 pppoe enable group PPPOE-GROUP1
 no shutdown
!
interface Virtual-Template1
 mtu 1454
 ip unnumbered Loopback1
 peer default ip address pool POOL1
 ppp authentication chap
 no shutdown
!
router ospf 1
 network 200.0.0.252 0.0.0.0 area 0
 default-information originate
!
ip local pool POOL1 100.1.1.1
!
ip route 0.0.0.0 0.0.0.0 100.1.1.1
ip route 100.0.0.0 255.255.255.0 200.0.0.254
!
end

・SWの追加設定

社内のSWにはバックアップ回線用の下記設定を追加してください。

SW(config)#interface FastEthernet0/23
SW(config-if)#switchport access vlan 10
SW(config-if)#switchport mode access
SW(config-if)#no shutdown

・外部SWの追加設定

同じように、外部SWの設定も追加します。

SWGAIBU(config)#interface FastEthernet1/0/23
SWGAIBU(config-if)#switchport access vlan 200
SWGAIBU(config-if)#switchport mode access

PC1のデフォルトゲートウェイ設定は、192.168.10.252に変更しておきましょう。

確認観点②
PC1から外部のPC(PCGAIBU)までPing疎通できること
→PC1で再度tracert 100.0.0.1と打ち、経由するルータがバックアップ回線側であればOK(下記実行結果のようになること)
・PCGAIBUからPC1へPing疎通できないこと

C:\Users\user>tracert 100.0.0.1

100.0.0.1 へのルートをトレースしています。経由するホップ数は最大 30 です

  1     1 ms     1 ms     1 ms  192.168.10.252
  2     1 ms     1 ms     1 ms  2.2.2.2 
  3     1 ms     1 ms     1 ms  200.0.0.254
  4     1 ms     1 ms     1 ms  100.0.0.1

検証①HSRPの基本的な動きを確認する

事前準備の確認観点②までできたらHSRPの設定をやっていきましょう。
まず、HSRPを有効にするにはstandbyコマンドを使用します。
HSRPを有効にする対象は、2台のルータが共通して所属しているネットワークのインターフェースになります。有効にする際は、任意のグループ番号を指定します。

■コマンド書式
standby [グループ番号] ip [仮想IPアドレス]

■コマンド実行例

RTA(config)#interface fastethernet 0
RTA(config-if)#standby 100 ip 192.168.10.251

RTB(config)#interface fastethernet 0
RTB(config-if)#standby 100 ip 192.168.10.251

今回はグループ番号を100、仮想IPアドレスを192.168.10.251に設定しました。この仮想IPアドレスが、クライアントPCから見たデフォルトゲートウェイのIPアドレスになります。

次に、どちらのルータをActiveルータとするのかをプライオリティ値を使って指定します。この値が高いほうがActiveルータとなります。プライオリティ値は0~255の範囲で指定することができ、特に指定しなかった場合は100となります。
今回はRTAをActiveルータとして使用するため、RTAのプライオリティ値を105、RTBのプライオリティ値はデフォルトの100とします。

■コマンド書式
standby [グループ番号] priority [プライオリティ]

■コマンド実行例

RTA(config)#interface fastethernet 0
RTA(config-if)#standby 100 priority 105

続いて、Helloパケットの送信間隔(Helloタイマー)と、Holdタイマーを設定します。Holdタイマーの時間が経っても主系からHelloパケットを受け取らなかった場合、副系はActiveに切り替わります。HoldタイムはHelloタイムの3倍以上に設定します。

■コマンド書式
standby [グループ番号] timers [helloタイム(秒)] [Holdタイム(秒)]

■コマンド実行例

RTA(config)#interface fastethernet 0
RTA(config-if)#standby 100 timers 1 3

RTB(config)#interface fastethernet 0
RTB(config-if)#standby 100 timers 1 3

今回は1秒間隔でHelloパケットを送り、Holdタイムを3秒間に設定します。

ここまで設定したら、設定の確認と動作確認してみましょう。
HSRPの設定を簡易的に確認するには、show standby briefというコマンドを使います。RTAで実行し、StateがActiveになっていることがわかります。

RTA#show standby brief
                     P indicates configured to preempt.
                     |
Interface   Grp  Pri P State   Active          Standby         Virtual IP
Fa0         100  105   Active  local           192.168.10.252  192.168.10.251

疎通の確認では、PC1のデフォルトゲートウェイ設定を仮想IPアドレス(192.168.10.251)に変更します。次に、ping -t 192.168.10.251で仮想ゲートウェイ宛てにパケットを飛ばし続けます。
この状態でSW-RTA間のケーブルを抜いてみてください。

ケーブル抜去位置①

RTBはRTAからHelloパケットを受け取らなくなったため、Holdタイムである3秒後にActiveルータへと昇格します。
Holdタイムにより瞬断が発生しますが、すぐに疎通を再開できていたらOKです。

C:\Users\user>ping -t 192.168.10.251

192.168.10.251 に ping を送信しています 32 バイトのデータ:
192.168.10.251 からの応答: バイト数 =32 時間 <1ms TTL=255
192.168.10.251 からの応答: バイト数 =32 時間 <1ms TTL=255
192.168.10.251 からの応答: バイト数 =32 時間 =4ms TTL=255
192.168.10.251 からの応答: バイト数 =32 時間 =1ms TTL=255
要求がタイムアウトしました。 ←ケーブルを抜いたタイミングで瞬断が発生
192.168.10.251 からの応答: バイト数 =32 時間 =1ms TTL=255
192.168.10.251 からの応答: バイト数 =32 時間 =1ms TTL=255
192.168.10.251 からの応答: バイト数 =32 時間 =1ms TTL=255
192.168.10.251 からの応答: バイト数 =32 時間 =1ms TTL=255

RTBでHSRPの状態確認をするとRTBがActiveになっていることがわかります。

RTB#show standby brief
                     P indicates configured to preempt.
                     |
Interface   Grp  Pri P State   Active          Standby         Virtual IP
Fa0         100  100   Active  local           unknown         192.168.10.251

検証②プリエンプトで自動的に元のActive/Standby状態に戻ることを確認する

現在の状態では、SWA-RTA間のリンクが復旧してもActiveルータはRTBのままです。つまり、検証①で抜いたケーブルを挿しなおしてもRTAはActiveに戻りません。
障害復旧後にプライオリティの高いルータをActiveにしたい場合はプリエンプト機能を有効にします。プリエンプト機能はActiveルータ側で有効にします。

■コマンド書式
standby [グループ番号] preempt

■コマンド実行例

RTA(config)#interface fastethernet 0
RTA(config-if)#standby 100 preempt

RTA#show standby brief
                     P indicates configured to preempt.
                     |
Interface   Grp  Pri P State   Active          Standby         Virtual IP
Fa0         100  105 P Active  local           192.168.10.252  192.168.10.251

プリエンプトを有効にしていると、show standby briefで確認したときにPの文字が付与されます。

この状態で再度pingを送ってみましょう。今度はSW-RTA間のケーブルを抜いたのち、再度ケーブルを挿しなおします。

C:\Users\user>ping -t 192.168.10.251

192.168.10.251 に ping を送信しています 32 バイトのデータ:
192.168.10.251 からの応答: バイト数 =32 時間 <1ms TTL=255
192.168.10.251 からの応答: バイト数 =32 時間 =1ms TTL=255
192.168.10.251 からの応答: バイト数 =32 時間 <1ms TTL=255
要求がタイムアウトしました。 ←ケーブル抜去
192.168.10.251 からの応答: バイト数 =32 時間 =1ms TTL=255
192.168.10.251 からの応答: バイト数 =32 時間 =1ms TTL=255
192.168.10.251 からの応答: バイト数 =32 時間 =1ms TTL=255
192.168.10.251 からの応答: バイト数 =32 時間 =1ms TTL=255

(ケーブル挿しなおし)

192.168.10.251 からの応答: バイト数 =32 時間 =1ms TTL=255
192.168.10.251 からの応答: バイト数 =32 時間 =1ms TTL=255
要求がタイムアウトしました。
要求がタイムアウトしました。
要求がタイムアウトしました。
192.168.10.251 からの応答: バイト数 =32 時間 <1ms TTL=255
192.168.10.251 からの応答: バイト数 =32 時間 <1ms TTL=255

ケーブルを挿しなおした後、リンクアップまで少し時間を置いたのち再度pingの疎通が再開していることがわかります。show standby allで確認してもRTAがActiveに戻ることが確認できたかと思います。また、RTBでHSRP関連のログが画面に出力されるのが確認できるかと思います。

RTB# 
(ケーブル抜去)
*May 14 03:49:08.139: %HSRP-5-STATECHANGE: FastEthernet0 Grp 100 state Standby -> Active
(ケーブル挿入)
*May 14 03:49:47.187: %HSRP-5-STATECHANGE: FastEthernet0 Grp 100 state Active -> Speak
*May 14 03:49:50.451: %HSRP-5-STATECHANGE: FastEthernet0 Grp 100 state Speak -> Standby

RTBがStandby状態からActive状態に変化し、復旧後再度Standby状態に戻ったことがわかります。

検証③ トラッキングと組み合わせて障害検知ができることを確認する

HSRPを有効にしているLAN側インターフェースや、ルータ自体のダウンといった障害はStandbyルータ側は検知することができます。しかし、WAN側インターフェースやその対向の機器のダウンまでは検知できません。
そのような障害が発生してもHSRPでの回線の切り替えが可能か、トラッキング設定をして検証していきます。

今回はPPPoEにてIPアドレスが払い出されているかを監視するオブジェクトトラッキングを設定します。
WAN側インターフェースのダウン→PPPoEのセッション切れ→ルーティングテーブルから割り当てアドレスが削除される
という動作を利用します。

■コマンド書式
track [トラック番号] ip route [IPアドレス] [サブネットマスク] reachability
→指定したIPアドレスがルーティングテーブルに載っているかを監視

standby [グループ番号] track [トラック番号] decrement [減算値]
→トラッキングの設定をHSRPに紐づけ、監視対象に異常があったらプライオリティ値を指定した数だけ下げる。

■コマンド実行例

RTA(config)#track 1 ip route 200.1.1.1 255.255.255.255 reachability
RTA(config-track)#exit
RTA(config)#interface fastethernet 0
RTA(config-if)#standby 100 track 1 decrement 10

RTB(config)#interface fastethernet 0
RTB(config-if)#standby 100 preempt

今回は、ActiveルータのPPPoEの払い出しIPアドレスへIPレベルでの到達が不可能になったらHSRPのプライオリティ値を10減算する設定にしました。プライオリティ値が105→95と変化するため、Standbyルータ側のプライオリティ値(100)のほうが相対的に高くなります。この仕組みを使うにはStandbyルータ側でもプリエンプト機能が必須なので、RTBでプリエンプトを有効にしています。

この状態でWAN側インターフェースのケーブルを抜いてみましょう。

ケーブル抜去位置②


下記のようにログが出力されます。

RTAw#sho standby brief
                     P indicates configured to preempt.
                     |
Interface   Grp  Pri P State   Active          Standby         Virtual IP
Fa0         100  105 P Active  local           192.168.10.252  192.168.10.251
(ケーブル抜去)
RTA#
*May 14 05:16:36.326: %LINEPROTO-5-UPDOWN: Line protocol on Interface Virtual-Access2, changed state to down
*May 14 05:16:36.326: %DIALER-6-UNBIND: Interface Vi2 unbound from profile Di1
*May 14 05:16:36.330: %LINK-3-UPDOWN: Interface Virtual-Access2, changed state to down
*May 14 05:16:40.502: %TRACK-6-STATE: 1 ip route 200.1.1.1/32 reachability Up -> Down
(トラッキング監視対象のダウンを検知)
*May 14 05:16:40.734: %HSRP-5-STATECHANGE: FastEthernet0 Grp 100 state Active -> Speak
*May 14 05:16:43.902: %HSRP-5-STATECHANGE: FastEthernet0 Grp 100 state Speak -> Standby
RTAw#sho standby brief
                     P indicates configured to preempt.
                     |
Interface   Grp  Pri P State   Active          Standby         Virtual IP
Fa0         100  95  P Standby 192.168.10.252  local           192.168.10.251
(プライオリティ値が95になり、Standbyになった)

WAN側インターフェースの接続が復旧すると、プライオリティ値は元に戻り、RTAがActiveルータとして元に戻ります。

ここまではPC1から仮想デフォルトゲートウェイまでの通信で動作確認しましたので、障害試験を実施します。

検証④障害発生時もPC1から外部PCへ疎通が可能であることを確認する

PC1から外部PC宛てにpingを実行してメイン回線→バックアップ回線の切り替わりを再現させます。
通常ISP側のルータはBGPでルーティング情報を交換しているため、WAN回線障害時も自動的に切り替わりますが、今回はCCNAの範囲でもあるOSPFを使っていますので、以下赤線のケーブルを抜線して実現させます。

PC1から外部PCにpingを実行し続け、①②③の障害発生と共に、赤線のケーブルも抜線してみましょう。

PC1-外部PC間の疎通・障害試験

PC1には以下のようにログが出力されます。※PPPoEのダウン、OSFPのダウンの時間を要するため、30秒程度で切り替わる

C:\Users\user>ping -t 100.0.0.1

100.0.0.1 に ping を送信しています 32 バイトのデータ:
100.0.0.1 からの応答: バイト数 =32 時間 <1ms TTL=255
100.0.0.1 からの応答: バイト数 =32 時間 =1ms TTL=255
100.0.0.1 からの応答: バイト数 =32 時間 <1ms TTL=255
要求がタイムアウトしました。
要求がタイムアウトしました。
要求がタイムアウトしました。
要求がタイムアウトしました。
100.0.0.1 からの応答: バイト数 =32 時間 =1ms TTL=255
100.0.0.1 からの応答: バイト数 =32 時間 =1ms TTL=255
100.0.0.1 からの応答: バイト数 =32 時間 =1ms TTL=255
100.0.0.1 からの応答: バイト数 =32 時間 =1ms TTL=255
100.0.0.1  からの応答: バイト数 =32 時間 =1ms TTL=255
100.0.0.1  からの応答: バイト数 =32 時間 =1ms TTL=255
100.0.0.1  からの応答: バイト数 =32 時間 <1ms TTL=255
100.0.0.1  からの応答: バイト数 =32 時間 <1ms TTL=255

RTAのログでは、検証③で確認したログも確認ができます。

まとめ

  • 検証①では、HSRPの最も基本的なActive/Standbyの切り替わりが確認できました。

  • 検証②では、プリエンプト機能で障害復旧時の自動的なActive/Standbyの切り替わりを確認できました。

  • 検証③では、通常HSRPでは監視できないインターフェイスの異常をトラッキングを使うことで検知し、バックアップ回線への自動的な切り替えを確認できました。

今回の検証がネットワークを学ぶ上での助けになれば幸いです。最後まで読んでいただきありがとうございました。

最後に宣伝 /インフラエンジニア募集中★

筆者が所属する株式会社CAIRN(ケルン)はインフラエンジニアに特化した高還元SES企業です。

・ 契約単価に連動した報酬体系なので評価基準が明確です。
・ITインフラに強い営業網で豊富な案件からプロジェクトを選べます。
・ 独自の研修制が多数あり、学びなおしが出来ます。
・厚生労働省認定のホワイト企業です。

▲給与テーブルの抜粋
▲厚生労働省 安全衛生優良企業認定ホワイトマークを取得

インフラエンジニアにとって良い環境を整えています。ご応募お待ちしております。

株式会社CAIRNの採用ページへジャンプ

▼CAIRNについてさらに詳しく知りたい方はこちら

【Instagram】
ケルンの日常を発信♪
https://www.instagram.com/cairn_recruit/

【代表川嵜のブログ】
インフラエンジニアのキャリアについて週1で発信♪
https://note.com/joyous_cairn1015/
   
【技術ブログ】
月1で発信♪
https://t.co/iInlgn3cfw

【代表川嵜のX】
代表の日常、SES業界について発信♪DM歓迎です!
https://twitter.com/cairndk

【人事花田のX】
人事花田の日常、労務関連について発信♪DM歓迎です!
https://twitter.com/HanadaCAIRN_SES