CML2で構築した冗長デフォルトゲートウェイの検証記録
小規模なデータセンターのサーバー収容ネットワークを想定し、VLANとHSRPを使った冗長構成の検証を行いました。 今回は、その構築過程と、L2の状態、通常時の疎通結果を備忘録としてまとめておきます。
今回構築したネットワークの構成
今回の検証では、2台のゲートウェイルーターと1台のアクセススイッチを用意しました。これらで2つのサーバーVLANを収容し、HSRPを用いてゲートウェイを冗長化する構成を組んでいます。主な目的は、片方のゲートウェイに障害が発生した場合でも、可能な限り通信を継続できるようにすることです。
論理構成図は以下の通りです。詳細なIPアドレスなどは省略しています。
flowchart TB
R1["Router1<br>VLAN 10: Active<br>VLAN 20: Standby"]
R2["Router2<br>VLAN 10: Standby<br>VLAN 20: Active"]
SW1["SW1 / IOSvL2"]
PC1["PC1<br>VLAN 10"]
PC2["PC2<br>VLAN 20"]
R1 <-->|"802.1Q trunk<br>VLAN 10, 20"| SW1
R2 <-->|"802.1Q trunk<br>VLAN 10, 20"| SW1
SW1 ---|"access VLAN 10"| PC1
SW1 ---|"access VLAN 20"| PC2
検証結果に出てくるIPアドレスとの対応が分かるよう、各ノードのアドレス情報を以下の表に整理しておきます。
| ノード | インターフェース | VLAN | IPアドレス | HSRPの役割・用途 |
|---|---|---|---|---|
| Router1 | Ethernet0/0.10 | 10 | 10.10.10.2/24 | Active |
| Router2 | Ethernet0/0.10 | 10 | 10.10.10.3/24 | Standby |
| HSRP仮想IP | - | 10 | 10.10.10.1/24 | PC1のデフォルトゲートウェイ |
| Router1 | Ethernet0/0.20 | 20 | 10.10.20.2/24 | Standby |
| Router2 | Ethernet0/0.20 | 20 | 10.10.20.3/24 | Active |
| HSRP仮想IP | - | 20 | 10.10.20.1/24 | PC2のデフォルトゲートウェイ |
| Router1 | Loopback0 | - | 10.255.0.1/32 | 到達確認用 |
| Router2 | Loopback0 | - | 10.255.0.2/32 | 到達確認用 |
| PC1(Ubuntu0) | ens2 | 10 | 10.10.10.11/24 | デフォルトゲートウェイ: 10.10.10.1 |
| PC2(Ubuntu1) | ens2 | 20 | 10.10.20.11/24 | デフォルトゲートウェイ: 10.10.20.1 |
VLAN 10のネットワークは10.10.10.0/24、VLAN 20は10.10.20.0/24です。どちらも両ルーターへ直接接続されているため、VLAN間通信用のスタティックルートは設定していません。
スタティックルートは、到達確認用に用意した対向ルーターのLoopback宛だけを設定しました。
| 設定ノード | 宛先 | ネクストホップ |
|---|---|---|
| Router1 | 10.255.0.2/32 | 10.10.10.3 |
| Router2 | 10.255.0.1/32 | 10.10.20.2 |
構築の流れ
今回はCisco Modeling Labs 2(CML2)を用いて、大まかに以下のような流れで構築と検証を進めました。
- L2ネットワークの構成: スイッチにVLANを作成し、ルーター接続用ポートをトランク、PC接続用ポートをアクセスポートとして設定しました。
- ゲートウェイとHSRPの設定: 各ルーターにサブインターフェースを作成し、IPアドレスを設定しました。さらにVLANごとにHSRPを設定し、それぞれ優先度を変えてActiveを分散(ロードバランシング)させています。
- スタティックルートの設定: 今回は動的ルーティングプロトコルを使用せず、必要最低限の経路(各ルーターのLoopback宛)をスタティックルートで追加しました。
- 冗長性のテスト: ホストからの疎通確認後、意図的にルーターのリンクをダウンさせ、HSRPの切り替わりや通信の継続性を確認しました。
構築時のコンフィグ
CML2上のRouter1、Router2、SW1に投入した主なコンフィグを残しておきます。
Router1のコンフィグ
! Lab 01 - Router1 relevant configuration
!
hostname Router1
no ip domain lookup
service timestamps log datetime msec
service timestamps debug datetime msec
!
interface Loopback0
description ROUTER_ID
ip address 10.255.0.1 255.255.255.255
!
interface Ethernet0/0
description sw1_trunk
no ip address
no shutdown
!
interface Ethernet0/0.10
description vlan10_server-a
encapsulation dot1Q 10
ip address 10.10.10.2 255.255.255.0
standby version 2
standby 10 ip 10.10.10.1
standby 10 priority 110
standby 10 preempt
!
interface Ethernet0/0.20
description vlan20_server-b
encapsulation dot1Q 20
ip address 10.10.20.2 255.255.255.0
standby version 2
standby 20 ip 10.10.20.1
standby 20 preempt
!
ip route 10.255.0.2 255.255.255.255 10.10.10.3
!
line console 0
exec-timeout 0 0
logging synchronous
Router2のコンフィグ
! Lab 01 - Router2 relevant configuration
!
hostname Router2
no ip domain lookup
service timestamps log datetime msec
service timestamps debug datetime msec
!
interface Loopback0
description ROUTER_ID
ip address 10.255.0.2 255.255.255.255
!
interface Ethernet0/0
description sw1_trunk
no ip address
no shutdown
!
interface Ethernet0/0.10
description vlan10_server-a
encapsulation dot1Q 10
ip address 10.10.10.3 255.255.255.0
standby version 2
standby 10 ip 10.10.10.1
standby 10 preempt
!
interface Ethernet0/0.20
description vlan20_server-b
encapsulation dot1Q 20
ip address 10.10.20.3 255.255.255.0
standby version 2
standby 20 ip 10.10.20.1
standby 20 priority 110
standby 20 preempt
!
ip route 10.255.0.1 255.255.255.255 10.10.20.2
!
line console 0
exec-timeout 0 0
logging synchronous
SW1のコンフィグ
! Lab 01 - SW1 relevant configuration
!
hostname SW1
no ip domain lookup
service timestamps log datetime msec
service timestamps debug datetime msec
!
vlan 10
name SERVER-A
!
vlan 20
name SERVER-B
!
interface Ethernet0/0
description Router1_TRUNK
switchport trunk encapsulation dot1q
switchport mode trunk
switchport trunk allowed vlan 10,20
switchport nonegotiate
no shutdown
!
interface Ethernet0/1
description Router2_TRUNK
switchport trunk encapsulation dot1q
switchport mode trunk
switchport trunk allowed vlan 10,20
switchport nonegotiate
no shutdown
!
interface Ethernet0/2
description PC1_VLAN10
switchport mode access
switchport access vlan 10
spanning-tree portfast
no shutdown
!
interface Ethernet0/3
description PC2_VLAN20
switchport mode access
switchport access vlan 20
spanning-tree portfast
no shutdown
!
line console 0
exec-timeout 0 0
logging synchronous
L2ネットワークの状態確認
構築後に、VLAN、トランク、アクセスポート、STPの状態が想定通りかを確認しました。
まず、SW1でshow vlan briefを実行し、VLAN 10とVLAN 20のStatusがいずれもactiveになっていることを確認しました。
SW1#show vlan brief
VLAN Name Status
---- ---------- --------
10 SERVER-A active
20 SERVER-B active
トランクポートについては、まずEt0/0とEt0/1のStatusがtrunkingであることを確認しました。
さらに出力項目を見ていくと、Vlans allowed on trunkには設定としてトランクを通ることが許可されているVLANが、Vlans in spanning tree forwarding state and not prunedにはそれに加えてSTPでブロックされず実際に転送可能な状態になっているVLANがそれぞれ表示されます。今回はこの両方に10,20と表示されているため、VLAN 10と20が設定と動作の両面で正常に通信を転送できる状態であることが分かります。
SW1#show interfaces trunk
Port Encapsulation Status Native vlan
Et0/0 802.1q trunking 1
Et0/1 802.1q trunking 1
Port Vlans allowed on trunk
Et0/0 10,20
Et0/1 10,20
Port Vlans in spanning tree forwarding state and not pruned
Et0/0 10,20
Et0/1 10,20
続いてアクセスポートです。Et0/2とEt0/3のOperational Modeがstatic accessになっており、Access Mode VLANからEt0/2はVLAN 10、Et0/3はVLAN 20に所属していることを確認できました。
SW1#show interfaces Et0/2 switchport
Name: Et0/2
Administrative Mode: static access
Operational Mode: static access
Access Mode VLAN: 10 (SERVER-A)
SW1#show interfaces Et0/3 switchport
Name: Et0/3
Administrative Mode: static access
Operational Mode: static access
Access Mode VLAN: 20 (SERVER-B)
STPについては、This bridge is the rootの表示からSW1自身がルートブリッジとして動作していることを確認しました。また、Et0/2とEt0/3のTypeにはEdgeと表示されており、PortFastが機能しています。
SW1#show spanning-tree vlan 10
VLAN0010
This bridge is the root
Interface Role Sts Type
--------- ---- --- --------
Et0/0 Desg FWD P2p
Et0/1 Desg FWD P2p
Et0/2 Desg FWD P2p Edge
SW1#show spanning-tree vlan 20
VLAN0020
This bridge is the root
Interface Role Sts Type
--------- ---- --- --------
Et0/0 Desg FWD P2p
Et0/1 Desg FWD P2p
Et0/3 Desg FWD P2p Edge
通常時の疎通とルーティングの確認
次に、PC(Ubuntu0)から同一VLANのHSRP仮想IP、別VLANのPC、Router2のLoopbackへpingを実行し、いずれもパケットロスなく到達できることを確認しました。
cisco@ubuntu0:~$ ping 10.10.10.1 -c 5
5 packets transmitted, 5 received, 0% packet loss
cisco@ubuntu0:~$ ping 10.10.20.11 -c 5
5 packets transmitted, 5 received, 0% packet loss
cisco@ubuntu0:~$ ping 10.255.0.2 -c 5
5 packets transmitted, 5 received, 0% packet loss
Router1側でもインターフェースの状態とルーティングテーブルを確認しました。サブインターフェースとLoopback0のStatusおよびProtocolがいずれもupになっています。また、ルーティングテーブルにはVLAN 10と20の直接接続経路に加え、Router2のLoopbackへのスタティックルートが登録されています。
Router1#show ip interface brief
Interface IP-Address Status Protocol
-------------- ----------- ------ --------
Ethernet0/0 unassigned up up
Ethernet0/0.10 10.10.10.2 up up
Ethernet0/0.20 10.10.20.2 up up
Loopback0 10.255.0.1 up up
Router1#show ip route
C 10.10.10.0/24 is directly connected, Ethernet0/0.10
C 10.10.20.0/24 is directly connected, Ethernet0/0.20
C 10.255.0.1/32 is directly connected, Loopback0
S 10.255.0.2/32 [1/0] via 10.10.10.3
Router1からRouter2のLoopbackへのpingも、5回すべて成功しました。
Router1#ping 10.255.0.2 repeat 5
!!!!!
Success rate is 100 percent (5/5),
round-trip min/avg/max = 1/1/1 ms
Router1のARPテーブルを見ると、HSRP仮想IP、Router2、各VLANのPCに対応するMACアドレスが解決できていることが分かりました。
Router1#show ip arp
Address Hardware Addr Interface
------------ -------------- ----------------
10.10.10.1 0000.0c9f.f00a Ethernet0/0.10
10.10.10.3 aabb.cc00.0300 Ethernet0/0.10
10.10.10.11 5254.00a1.2c03 Ethernet0/0.10
10.10.20.3 aabb.cc00.0300 Ethernet0/0.20
10.10.20.11 5254.0008.6180 Ethernet0/0.20
構築過程での気付き
構築時にルーター間で初めてpingを実行した際、最初の1パケットだけが失敗して成功率が80%になる事象を確認しました。これは、初回はMACアドレスを解決するためのARP処理が走り、その待ち時間でICMPがタイムアウトしたことが原因だと考えられます。再確認時にはARPテーブルがすでに作成されていたため、最初から応答を受け取れました。
1回のパケットロスだけで「通信が通らない」と即断せず、裏で動いているプロトコルの動作を意識して切り分けを行うことが重要だと感じました。
HSRPのフェイルオーバー検証について
通常時の状態に加え、Router1の障害時および復旧時のHSRPの挙動についても確認しました。 VLAN 10からVLAN 20への通信と逆方向の通信が異なるルーターを通ることや、Router1の停止後にRouter2が両方のVLANでActiveになることを確認しています。
障害時のHSRPの切り替えと復旧時の切り戻しの詳細な挙動については、以下の記事で扱っています。
全体の所感
今回の構築を通して、VLANとトランク、アクセスポート、STP、ルーティングの各種状態をコマンド出力から読み取る練習になり、HSRPを使った冗長デフォルトゲートウェイの土台を無事作ることができました。