U.log

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アドレスとの対応が分かるよう、各ノードのアドレス情報を以下の表に整理しておきます。

ノードインターフェースVLANIPアドレスHSRPの役割・用途
Router1Ethernet0/0.101010.10.10.2/24Active
Router2Ethernet0/0.101010.10.10.3/24Standby
HSRP仮想IP-1010.10.10.1/24PC1のデフォルトゲートウェイ
Router1Ethernet0/0.202010.10.20.2/24Standby
Router2Ethernet0/0.202010.10.20.3/24Active
HSRP仮想IP-2010.10.20.1/24PC2のデフォルトゲートウェイ
Router1Loopback0-10.255.0.1/32到達確認用
Router2Loopback0-10.255.0.2/32到達確認用
PC1(Ubuntu0)ens21010.10.10.11/24デフォルトゲートウェイ: 10.10.10.1
PC2(Ubuntu1)ens22010.10.20.11/24デフォルトゲートウェイ: 10.10.20.1

VLAN 10のネットワークは10.10.10.0/24、VLAN 20は10.10.20.0/24です。どちらも両ルーターへ直接接続されているため、VLAN間通信用のスタティックルートは設定していません。

スタティックルートは、到達確認用に用意した対向ルーターのLoopback宛だけを設定しました。

設定ノード宛先ネクストホップ
Router110.255.0.2/3210.10.10.3
Router210.255.0.1/3210.10.20.2

構築の流れ

今回はCisco Modeling Labs 2(CML2)を用いて、大まかに以下のような流れで構築と検証を進めました。

  1. L2ネットワークの構成: スイッチにVLANを作成し、ルーター接続用ポートをトランク、PC接続用ポートをアクセスポートとして設定しました。
  2. ゲートウェイとHSRPの設定: 各ルーターにサブインターフェースを作成し、IPアドレスを設定しました。さらにVLANごとにHSRPを設定し、それぞれ優先度を変えてActiveを分散(ロードバランシング)させています。
  3. スタティックルートの設定: 今回は動的ルーティングプロトコルを使用せず、必要最低限の経路(各ルーターのLoopback宛)をスタティックルートで追加しました。
  4. 冗長性のテスト: ホストからの疎通確認後、意図的にルーターのリンクをダウンさせ、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のStatustrunkingであることを確認しました。 さらに出力項目を見ていくと、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 Modestatic 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を使った冗長デフォルトゲートウェイの土台を無事作ることができました。