Nutanix CE 2.1 AOS 6.8.1 aCLIでLACPを設定

はじめに

前回に続き、今回は Nutanix CE の初期構築時にCLIでLACPの設定をしていきます。前回の記事では、リンクは1本で繋いでいることを想定しています。しかし、リンクを2本繋いでいる場合では、LACPの設定なしに接続はできません。
Nutanix CE では10GbEリンクを使用することを推奨していますが、手元に1GbEしかない場合や環境を用意することが面倒な場合(私ですね)は、リンクを束ねて帯域を増やすことを推奨しています。

If 10 GbE or faster uplinks are available, Nutanix recommends that you use them instead of 1 GbE uplinks.
If you must use only 1GbE uplinks, add them into a bond to increase bandwidth and use the balance-TCP (LACP) or balance-SLB bond mode.
引用元:AHV 6.8 - Host Network Management1

環境

シンプルにスイッチ1台とサーバ1台間を2本の1GbEリンクで束ねていきます。スイッチはCiscoのCatalystを使用しています。

設定(サーバ側)

設定はCVMで実施しますので、AHVからCVMへSSHしておきます。また、aCLIコマンドを使用するため Acropolis が起動している必要があります。クラスタが起動していれば Acropolis も起動しているので作業の際はクラスタを起動しておきます。
以下の出力のように初期構築時に作成される vs0 にはすべてのNIC(例:eth0~eth5)が紐づいています。手元の環境でLACPとして扱うインターフェースを絞ります。設定後は、vs0 に紐づく uplink_list が少なくなっていることが分かります。

### 設定前の状態
nutanix@CVM$ acli net.get_virtual_switch vs0
config {
  cluster_configuration_list {
    cluster_uuid: "00062254-83be-d3da-1b06-************"
    default_uplink_grouping: "kMixed"
    host_configuration_list {
      config_failed: False
      host_uuid: "2e178a51-916c-408c-bcf4-************"
      internal_bridge: "br0"
      route_table: 1000
      uplink_list: "eth0"
      uplink_list: "eth1"
      uplink_list: "eth2"
      uplink_list: "eth3"
      uplink_list: "eth4"
      uplink_list: "eth5"
    }
  }
  default: True
  description: "Default Virtual Switch"
  lacp_config {
    lacp: False
  }
  logical_timestamp: 1
  mtu: 1500
  name: "vs0"
  nic_team_policy: "kActiveBackup"
  partially_done: False
  vswitch_uuid: "229028f8-4c09-4dd4-abd7-************"
}

### 設定コマンド(acli net.update_virtual_switch vs0 host_uplink_config="{<host_uuid>:[<NIC>,<NIC>]}")
nutanix@CVM$ acli net.update_virtual_switch vs0 host_uplink_config="{2e178a51-916c-408c-bcf4-************:[eth0,eth1]}"

### 設定後の状態
nutanix@CVM$ acli net.get_virtual_switch vs0
config {
  cluster_configuration_list {
    cluster_uuid: "00062254-83be-d3da-1b06-************"
    default_uplink_grouping: "kMixed"
    host_configuration_list {
      config_failed: False
      host_uuid: "2e178a51-916c-408c-bcf4-************"
      internal_bridge: "br0"
      route_table: 1000
      uplink_list: "eth0"
      uplink_list: "eth1"
    }
  }
  default: True
  description: "Default Virtual Switch"
  lacp_config {
    lacp: False
  }
  logical_timestamp: 1
  mtu: 1500
  name: "vs0"
  nic_team_policy: "kActiveBackup"
  partially_done: False
  vswitch_uuid: "229028f8-4c09-4dd4-abd7-************"
}

vs0 に紐づくNICの絞り込み後は、net.update_virtual_switchでLACPの設定を行います。

### vs0 のLACP設定
nutanix@CVM$ acli net.update_virtual_switch vs0 bond_type=kBalanceTcp lacp_fallback=true lacp_timeout=kFast

nutanix@CVM$ acli net.get_virtual_switch vs0
config {
  cluster_configuration_list {
    cluster_uuid: "00062254-83be-d3da-1b06-************"
    default_uplink_grouping: "kMixed"
    host_configuration_list {
      config_failed: False
      host_uuid: "2e178a51-916c-408c-bcf4-************"
      internal_bridge: "br0"
      route_table: 1000
      uplink_list: "eth0"
      uplink_list: "eth1"
    }
  }
  default: True
  description: "Default Virtual Switch"
  lacp_config {
    lacp: True
    lacp_fallback: True
    lacp_timeout: "kFast"
  }
  logical_timestamp: 5
  mtu: 1500
  name: "vs0"
  nic_team_policy: "kBalanceTcp"
  partially_done: False
  update_in_progress: False
  vswitch_uuid: "229028f8-4c09-4dd4-abd7-************"
}

設定(スイッチ側)

スイッチのコンフィグを記載しておきます。設定する際は、AHVノードに接続する推奨構成があるようで、Cisco Catalyst では以下のように記載されています。

Cisco Catalyst:
no port-channel standalone-disable
**Fallback mode is enabled by default
引用元:How to Enable, Disable, and Verify LACP on AHV hosts2

!
interface Port-channel1
 switchport access vlan 10
 switchport mode access
 no port-channel standalone-disable
!
!
interface GigabitEthernet1/0/1
 switchport access vlan 10
 switchport mode access
 channel-protocol lacp
 channel-group 1 mode active
!
interface GigabitEthernet1/0/2
 switchport access vlan 10
 switchport mode access
 channel-protocol lacp
 channel-group 1 mode active
!

正常に接続できていることを確認します。手元のPCからCVMへPingを打ってみたり、SSHやブラウザからWeb管理画面にログインをしてみてください。

#show etherchannel summary
Flags:  D - down        P - bundled in port-channel
        I - stand-alone s - suspended
        H - Hot-standby (LACP only)
        R - Layer3      S - Layer2
        U - in use      f - failed to allocate aggregator

        M - not in use, minimum links not met
        u - unsuitable for bundling
        w - waiting to be aggregated
        d - default port

        A - formed by Auto LAG


Number of channel-groups in use: 1
Number of aggregators:           1

Group  Port-channel  Protocol    Ports
------+-------------+-----------+-----------------------------------------------
1      Po1(SU)         LACP        Gi1/0/1(P)      Gi1/0/2(P)

#show etherchannel port-channel
Port-channel: Po1    (Primary Aggregator)

------------

Age of the Port-channel   = 0d:0h:23m:58s
Logical slot/port   = 12/1          Number of ports = 1
HotStandBy port = null
Port state          = Port-channel Ag-Inuse
Protocol            =   LACP
Port security       = Disabled
Standalone          = Enabled (independent mode)

Ports in the Port-channel:

Index   Load   Port        EC state        No of bits
------+------+------+------------------+-----------
  0     00     Gi1/0/1     Active             0
  0     00     Gi1/0/2     Active             0

Time since last port bundled:    0d:00h:29m:21s    Gi1/0/1
Time since last port Un-bundled: 0d:0h:53m:46s    Gi1/0/2

追記(2024/11/10)

設定コマンドを実行した際に設定が反映されるまでに少し時間がかかります。その際にタスク状況が確認できるコマンドを以下に記載しています。

### タスク実行状況確認
nutanix@CVM$ ecli task.list include_completed=false
Task UUID       Parent Task UUID        Component       Sequence-id     Type    Status  Creation Time(UTC)        Completion Time(UTC)

参考資料

  1. AOS 6.8 - Acropolis Command-Line Interface (aCLI)
  2. Nutanix CE よろず相談所

Nutanix CE 2.1 AOS 6.8.1 インストールのメモ

1. はじめに

 以前、Nutanix Meetup に参加した際にHCI(ハイパーコンバージドインフラストラクチャー)がどのようなものかやその良さを伺う機会があり、自宅でも環境構築を試みましたが、途中でつまずいてそれっきりになっていました。。。 今回、会社の検証環境でリソースが不足した際に簡単に環境を拡張できるものはないかと考えた際に Nutanix Meetup で聞いた内容を思い出し、HCI製品の Nutanix なら実現できるのではないかと思いました。 後、ご自宅でヤギを飼っている方ともお話をさせていただいた際に、「自宅で試してみます!」と言ったのにやっていなかったことに罪悪感を持っていたので、再挑戦することにしました。

2. 環境

 今回は、 以下の手元の環境で Nutanix CE 2.1 をシングルクラスタで構築します。シングルクラスターで構築した場合、既存クラスタから3ノードや4ノードへ拡張することができないことに留意ください。 ストレージは4枚のうち、2枚はRAID1、残り2枚は非RAID構成で、すべてRAIDコントローラに接続した状態です。 ストレージは注意点があり、ハードウェア要件 の「Storage devices, Hot Tier Flash」で 少なくとも1枚の200GB以上の非NVNe SSDが必要と記載があります。

  • CPU:Intel(R) Xeon(R) 4コア

  • メモリ:64GB

  • ストレージ1(データ用):SATA HDD 2TB (RAID1)

  • ストレージ2(ハイパーバイザー用):SAS HDD 300GB

  • ストレージ3(CVM用):SATA SSD 500GB

  • NIC:1Gbps

3. 事前準備

3-1. アカウント作成

 Nutanix CE はコミュニティ版としてお試しで提供されており、利用するには My Nutanix のアカウントが必要です。公式サイト の右上にあるログインからアカウントを作成します。 アカウント作成でも注意点があり、登録するメールアドレスはGメールやYahoo!メールなどのアドレスは使用できないため、独自に用意したメールアドレスを登録する必要があります。

3-2. Nutanix CE イメージのダウンロード

 アカウント作成で登録したメールアドレスを このサイト で入力し、メールアドレスに届いたリンクからイメージダウンロードのページへアクセスします。 「Installer ISO」の下にあるリンクをクリックして、イメージをダウンロードします。

3-3. ブートUSBメモリの作成

 RufusでブートUSBメモリを作成します。中のデータを書き換えても問題ないUSBメモリを用意して、ダウンロードしたイメージをUSBメモリに焼きます。イメージは6GBちょっとあるので、8GBのUSBメモリがあれば問題ないと思います。下の画像のように、デバイスをUSBメモリ、ブートの種類を右の選択をクリックして、ダウンロードしたイメージを指定します。

画像3.1.Rufus

4. インストール

4-1. 起動順序の変更

 BIOSから起動順序をUSBメモリが一番になるように変更します。BIOSへの入り方は機器によって異なるため手元の環境を調べたうえで作業をしてみてください。

4-2. 初期設定

 インストール先の指定やハイパーバイザーとCVMのネットワーク設定を行います。設定項目を移動する際はTabキー、設定項目をすべて埋めて次のページへ移動する際は「Next Page」へ移動して、Spaceキーで決定します。Enterキーではありません!Spaceキーを押してください!ここでEnterキーを押してしまうと、最初の起動からやり直しなので注意してください。
検証として利用する分にはディスク選択はデフォルトのままでもOKだと思いますが、ハードウェア要件 に沿って選択するなら以下の通りになると思います。

  • Hypervisor Boot:32GB以上の SATA DOM または M.2 SSD または SATA SSD/HDD

  • CVM Boot:200GB以上の非NVNe SSD

  • Data:500GB以上のHDDまたはSSD

ハイパーバイザーとCVMのネットワーク設定は、ホスト(以降、AHVと記載)とCVMのIPアドレスが同じセグメントかつインターネットに接続できるセグメントであるポイントを押さえていれば問題ありません。DNSの設定がないことに疑問を持つかもしれませんが、後で設定するタイミングがありますので、安心してください。

画像4.1.初期設定

4-3. ライセンスへの同意

 CE EULA の内容を十字キーで操作し、最後まで移動&確認する必要があります。最後まで移動&確認できていない場合、インストールできません。 内容に同意できれば、Tabキーで移動し、「I accept the end user license agreement. 」にチェックをします。
最後に「Start」に移動して、Spaceキーを押してください。Enterキーではありません!Spaceキーを押してください!

画像4.2.ライセンス画面

4-4. インストールと再起動

 インストール後にブートUSBメモリを外してから、「Y」を入力&Enterキーで再起動を実施します。

画像4.3.再起動

再起動後、以下の画像のようにログイン画面が表示されるとインストール完了です。 インストール完了後、初回は localhost と表示されますが、以降は NTNX-****** と表示されます。原因は不明ですが、どちらもAHVへログインすることに変わりはありません。

画像4.4.ログイン画面

5. クラスタの作成と設定(シングル)

 ここでは、公式の Get Started に沿って記載しますので、不明点や分かりにくい場合は公式サイトを確認ください。それでも解決の糸口が見つからない場合は、コミュニティで質問すると専門の方が問題解決に向けて助けてくださると思います。

5-1. CVMへログイン

 手元のPCからTeraTermやPuTTyなどでCVMへSSHやコンソールからAHVへログイン後にCVMへSSHしてログインする方法のどちらかで接続します。 ログインする際は、AHVとCVMでそれぞれ以下の通りとなり、ユーザ名が異なる点に留意してください。

  • AHV ユーザ名:root、パスワード:nutanix/4u

  • CVM ユーザ名:nutanix、パスワード:nutanix/4u

5-2. クラスタの作成

 今回はシングルクラスタで構成するため「--redundancy_factor=1」が必要となり、複数ノードで構成する場合は不要です。CVMのIPアドレスは、インストール時の初期設定した値を入力してください。

$ cluster -s <CVM_IPアドレス> --redundancy_factor=1 create

5-3. クラスタの設定

 クラスタの名前やIPアドレス、DNS、NTPを設定していきます。
初めにクラスタの名前を設定します。こちらは任意の名前で問題ありません。

$ ncli cluster edit-params new-name=<クラスタ名>

DNSの設定をします。このDNSはインターネットに接続した際に名前解決を行うフルリゾルバまたはキャッシュDNSサーバを指します。デフォルトで、Googleの提供するパブリックキャッシュDNSサーバ「8.8.8.8」と「8.8.4.4」が設定されていますので、必須設定ではありません。手元にDNSサーバがあり、デフォルト設定を削除したい場合のコマンドも一緒に記載します。

### DNSサーバの追加 ###
$ ncli cluster add-to-name-servers servers=<DNSサーバ>
### DNSサーバの削除 ###
$ ncli cluster remove-from-name-servers servers=8.8.8.8,8.8.4.4

クラスタのIPアドレスはインストール時に設定したAHVとCVMのIPアドレスと同じセグメント内のIPアドレスを使用します。当然ですが、他のIPアドレスと重複しないようにしてください。

$ ncli cluster set-external-ip-address external-ip-address=<クラスタ_IPアドレス>

NTPの設定は、デフォルトで NTP Pool Project の「1.pool.ntp.org」と「0.pool.ntp.org」が設定されています。DNS同様、手元にNTPサーバがあり、デフォルト設定を削除したい場合のコマンドも一緒に記載します。

### NTPサーバの追加 ###
$ ncli cluster add-to-ntp-servers servers=<NTPサーバ>
### NTPサーバの削除 ###
$ ncli cluster remove-from-ntp-servers servers=0.pool.ntp.org,1.pool.ntp.org

5-4. クラスタの起動

$ cluster start

※クラスタを削除する場合

### クラスタの停止 ###
$ cluster stop

This operation will stop the Nutanix storage services and any VMs using Nutanix storage will become unavailable. Do you want to proceed? (I agree/[N]): I agree <--「I agree」を入力

### クラスタが停止していることを確認
The state of the cluster: stop

### クラスタが停止コマンドによって停止していることを確認
2024-09-21 10:36:01,475Z INFO MainThread cluster:2193 Cluster has been stopped via 'cluster stop' command, hence stopping all services.
2024-09-21 10:36:01,475Z INFO MainThread cluster:3465 Success!

### クラスタの削除 ###
$ cluster destroy

This operation will completely erase all data and all metadata, and each node will no longer belong to a cluster. Do you want to proceed? (Y/[N]): Y <--「Y」を入力

### クラスタが削除成功したことを確認
2024-09-21 11:00:33,856Z INFO MainThread cluster:3465 Success!

5-4. Webコンソール接続

 ブラウザを開いて、「 https://<CVMのIPアドレス>:9440 」にアクセスします。SSL証明書の警告が表示されますが、確認してアクセスします。初回ログイン時は、ユーザ名:admin、パスワード:nutanix/4u でログインします。

画像5.1.Webコンソールログイン画面

ログイン後、初期パスワードを変更するように求めらます。変更後のパスワードは 画像5.2. の下に青文字で記載されている要件に沿ったものを設定します。

画像5.2.初期パスワード変更画面

初期パスワード変更ができると、再度ログイン画面に遷移するので、変更後のパスワードでログインします。

画像5.3.初期パスワード変更後のWebコンソールログイン画面

事前準備で作成した My Nutanix アカウントの情報を入力します。NEXT username は、My Nutanix アカウントを作成した際に登録したメールアドレスを入力します。この時、CVMからインターネットに接続できる状態であることを確認してください。

画像5.4.Nutanixアカウント認証画面

ホーム画面が表示されるとインストールは完了です。

画像5.5.ホーム画面

参考資料

STPにおけるMACアドレス比較のポイント

1. はじめに

 STPでルートブリッジ、ルートポートや指定ポートを決定する基準の中でブリッジプライオリティとMACアドレスを合わせて構成されたブリッジIDを比較して選定することがあります。
デフォルトの設定から変更してない場合、ブリッジプライオリティが同じである可能性は十分あり、MACアドレスを比較することになります。 そんな時、「MACアドレスってどうやって比較するんだ?」となり、検索した際にYahoo!知恵袋で以下の回答が記載されていました。

(一部抜粋)
001dは同じなので省きます。
9とcですが、10進数に治すと9はそのまま9で、cは12です。

既に5桁目でcの方が大きいので上の方が小さいです。
引用元:すみません質問です今CCNA対策でSTPのところをやってまして1

そこで実際にこの回答が正しいことを「Packet Tracer2」を使用して調査したので、その内容と結果を記載していきます。 気になる方は実際に手元の自分の環境で本当に同じようになるのか試してみてください。

2. 構成

 今回は、Packet Tracer でL2SW(2960-24TT)3台を輪(以降、ループと記載)になるように結線します。 論理構成図を少し変わった書き方をしましたが、物理構成図と一緒に載せましたので、参考にしていただければと思います。

画像2.1.STP検証_Packet Tracer

画像2.2.STP検証_物理構成

画像2.3.STP検証_論理構成

3. 内容

3.1 準備

 実際に機器設定も含めて検証してみた内容を記載をしていきます。今回は、STPでルートブリッジを選定する際のプロセスで解説します。
まず設定について、3台のL2SWへの設定ですが、3台とも以下のコンフィグで検証をしています。特に複雑な設定は行わず、VLANインターフェース作成とVLANを物理ポート割り当てる以外は、デフォルトのままで実施しました。

(省略)
!
spanning-tree mode pvst
spanning-tree extend system-id
!
interface FastEthernet0/1
 switchport access vlan 10
!
interface FastEthernet0/2
 switchport access vlan 10
!
(省略)
!
interface Vlan10
 no ip address
!
(省略)

設定後は、L2SWをループするように画像2.2. のようにケーブルで接続します。SW同士を接続するので使用するケーブルは、「copper crossover cable(銅クロスケーブル)」を使用します。なぜ、クロスケーブルを使用するのかはここでは説明を省きます。気になる方は、MDIとMDI-Xについて調べてみてください。

3.2 ルートブリッジの選定

 STPではツリー構造となる起点のSWを選定し、これをルートブリッジと呼びます。ルートブリッジの選定には、ブリッジID(ブリッジプライオリティ+MACアドレス)を比較し、最も小さいSWがルートブリッジになります。ブリッジプライオリティは、デフォルト値が「32768」となっており、すべてのSWがデフォルト値である場合、次の比較対象としてMACアドレスを見ていきます。
各L2SWに設定したVLANに割り当てられたMACアドレスを確認します。コマンドは「show interfaces vlan <VLAN番号>」を実行し、以下の画像3.1. のように表示されたMACアドレスを確認します。ここでの注意点は、物理ポートのMACアドレスではなく、VLANのMACアドレスを確認します(画像3.2. )。

画像3.1.MACアドレスの確認

画像3.2.物理ポートとVLANインターフェースのMACアドレス

各SWのMACアドレスを確認できたら、実際に比較していきます。比較対象は「SW0:0000.0c27.6801」、「SW1:0002.17a9.2601」、「SW2:000a.f33a.dc01」になります。画像3.3. にあるようにMACアドレスは左から比較していきます。左から見ていくと、左から3つは同じ「0」が並んでおり、4つ目から値に差分があります。よって、「SW0:0」、「SW1:2」、「SW2:a」を比較していきます。

画像3.3.MACアドレスの比較

MACアドレスは16進数で構成されており、アルファベットが含まれますが、数字とアルファベットの比較をどのように行うのか説明します。
比較対象を絞るために「SW0:0」と「SW1:2」を最初に見ていきます。数字の比較はどちらが小さいのかは言うまでもなく、「SW0:0」になります。
続いてアルファベットが含まれている「SW0:0」と「SW2:a」を比較します。比較するには、16進数で表現された「SW2:a」を10進数に変換します。10進数変換後は、「SW2:10」になります。これで数字の比較が可能になり、「SW0:0」と「SW2:10」のどちらの値が小さいかというと「SW0:0」になりますので、SW0がルートブリッジに決定されます。SW0が実際にルートブリッジになっていることを確認します(画像3.4.)。

画像3.4.ルートブリッジの確認

4. 結果

 結論、最初の記事であった回答が正しいことがわかりました。本記事とは別に3回ほど環境を変えて試してみましたが、結果はすべて想定通りになりました。MACアドレスの比較では16進数から10進数に変換してから比較することでどちらが対象になるのか判明します。今回は、STPのルートブリッジ選定まででしたが、ルートポートや指定ポートを選定する際にもブリッジIDを元にMACアドレスの比較をすることがあります。気になる方は、この後の流れについても確認してみてください。

参考資料

デフォルトゲートウェイ冗長化における仮想MACアドレスとグループ番号の関係

1. はじめに

 デフォルトゲートウェイを冗長化するプロトコルとして、「HSRP」「VRRP」「GLBP」の3つが挙げられ、これらをまとめて「FHRP」と呼ばれます。
デフォルトゲートウェイを冗長化する場合、対象機器で仮想IPアドレスを設定します。また、仮想MACアドレスは設定されたグループ番号によって自動で割り振られます。振り分けられる際は、10進数で設定したグループ番号を16進数に変換した結果によって決定されます。今回は、そんな仮想MACアドレスとグループ番号の関係について書いていきます。
※今回の記事で記載しているHSRPは、バージョン1を示しています。

2. HSRPとVRRP

 HSRPとVRRPを一緒に紹介するのは、設定する際にグループ番号の使用できる範囲が「0 ~ 255」で同じという点で共通点があるためです。
仮想MACアドレスについては、それぞれ以下のようなパラメータになり、「XX」はグループ番号によって変化します。例として、グループ番号が「10」と「20」の場合で、HSRPとVRRPでどのような仮想MACアドレスになるのか記載します。「10」の場合は、10進数から16進数に変換後は「0A」になり、「20」の場合は、10進数から16進数に変換後は「14」になります。そして、これらの16進数変換後の値がMACアドレスの後ろに入り、仮想MACアドレスが決定します。
CCNAの試験でグループ番号から仮想MACアドレスを推測する問題が出題される可能性もあるので、グループ番号と仮想MACアドレスの関係を覚えておきたいです。

プロトコル 仮想MACアドレスの型 グループ番号が「10」の仮想MACアドレス グループ番号が「20」の仮想MACアドレス
HSRP 0000.0C07.ACXX 0000.0C07.AC0A 0000.0C07.AC14
VRRP 0000.5E00.01XX 0000.5E00.010A 0000.5E00.0114

画像1.1.HSRPの構成例

画像1.2.HSRPの構成(グループ番号:10)

HSRPとVRRPで設定可能なグループ番号が「0 ~ 255」である点も併せて解説していきます。
先ほど、グループ番号を10進数から16進数に変換した値が仮想MACアドレスの後ろに入ると記載しました。よって、16進数の最大値がグループ番号の最大値になります。 2桁の16進数で最大値は「FF」になります。これを10進数に変換すると、「255」になります。これが、グループ番号として利用できる範囲が「0 ~ 255」である理由になります。もし、グループ番号の利用範囲に「256」が範囲に含まれると、HSRPの場合は仮想MACアドレスが「0000.0C07.A100」となり、あらかじめ仮想MACアドレスとして決まっているパラメータの「0000.0C07.ACXX」から逸れてしまいます。

HSRPにはバージョン2(以降、HSRPv2と記載)があり、利用可能なグループ番号がバージョン1とは異なり、「0 ~ 4095」となっています。グループ番号で利用できる範囲が広がるということは、仮想MACアドレスも変化します。HSRPv2の仮想MACアドレスは「0000.0C9F.FXXX」になります。そして、3桁の16進数で最大値は「FFF」となり、10進数に変換すると「4095」になるので、グループ番号の範囲が「0 ~ 4095」である理由です。

Q. HSRPバージョン2とHSRPバージョン1の違いは何ですか。
バージョン 1 のグループ番号は 0 ~ 255 の範囲に制限されます。HSRP バージョン 2 では、グループ番号の範囲が 0 ~ 4095 に拡大されています。たとえば、新しいMACアドレス範囲0000.0C9F.Fyyyを使用できます。yyy = 000-FFF(0 ~ 4095)です。
引用元:ホットスタンバイルータプロトコル(HSRP)に関するFAQを確認する1

3. GLBP

 GLBPは、1つのグループに含められるメンバーの最大値は4つであり、HSRPやVRRPのような Active-Stanby 構成とは異なり、Active-Active 構成によるデフォルトゲートウェイの冗長と負荷分散を行います。そのため、グループに含まれるメンバーにそれぞれ仮想MACアドレスが設定されます。グループ番号の使用できる範囲が「0 ~ 1023」、プライオリティの使用できる範囲が「1 ~ 255(デフォルト:100)」です。仮想MACアドレスについては、後ろの「YY」はプライオリティ、「X.XX」はグループ番号によって変化します。

プロトコル 仮想MACアドレスの型 グループ番号が「10」の仮想MACアドレス グループ番号が「20」の仮想MACアドレス
GLBP 0007.B40X.XXYY 0007.B400.0A01 0007.B400.1401

画像1.3.GLBPの構成例

画像1.4.GLBPの構成(グループ番号:10)

プライオリティの設定可能な値は「1 ~ 255(デフォルト:100)」であり、仮想MACアドレスに用いられる際は、これまでのようにプライオリティの値を16進数に変換するのではなく、単純にプライオリティが大きい機器順で「01>02>03>04」が使用されます。例として、画像[画像01-04_GLBPの構成(グループ番号:10)]の環境では各ルータでプライオリティをRT01は「105」、RT02は「100」を設定しました。すると、RT01は「01」、RT01は「02」が仮想MACアドレスに設定されます。

GLBP ゲートウェイ プライオリティ
また、GLBP ルータがバックアップ仮想ゲートウェイとして機能するかどうかや、現在の AVG の機能が停止したときに AVG になる順序を決定するのもプライオリティです。 glbp priority コマンドを使用して 1 ~ 255 の値を設定し、各バックアップ仮想ゲートウェイのプライオリティを設定できます。
引用元:GLBP の設定 [Cisco IOS 15.1S]2

GLBPで設定可能なグループ番号が「0 ~ 1023」である理由のソースが見つけられなかったため、私個人の憶測で記載しています。
HSRPやVRRPでは、仮想MACアドレスの変化する桁が2つであることから「256(= 16 x 16)」となり、ここから「1」を引くことで、グループ番号の最大値「255」となります。GLBPでは、仮想MACアドレスの変化する桁が3つであることから「4096(= 16 x 16 x 16)」となります。ただ、GLBPでは1つのグループに対して最大で4つの仮想MACアドレスを使用します。そのため、「4096」から1つのグループに対して設定可能な仮想MACアドレスの最大値である「4」で割り、「1024」となった後で、「1」を引くと「1023」がGLBPで使用できるグループ番号の最大値であると思います。

画像1.5.仮想MACアドレスと16進数

画像1.6.仮想MACアドレスと16進数

追記

(2024/05/11)
[3. GLBP]における記載内容に誤り
誤: プライオリティの設定可能な値は「1 ~ 255(デフォルト:100)」であり、仮想MACアドレスに用いられる際は、これまでのようにプライオリティの値を16進数に変換するのではなく、単純にプライオリティが大きい機器順で「01>02>03>04」が使用されます。
正:
プライオリティの設定可能な値は「1 ~ 255(デフォルト:100)」であり、仮想MACアドレスに用いられる際は、これまでのようにグループ番号の値を16進数に変換するのではなく、単純にプライオリティが大きい機器順で「01>02>03>04」が使用されます。

参考資料

ネゴシエーションによるポート動作モード

1. 初めに

 CCNAの勉強でポートネゴシエーションによる動作モードでポートやリンク状態がどうなるんだっけ?という私の覚え方のメモをこちらで共有し、他の方の助けになればと思います。

2. ポートネゴシエーションとは

 ポートの動作モードにはアクセスポートとトランクポートの2つがあります。機器へ接続し、手動で設定を行うかケーブルで接続された機器間でネゴシエーションによって決定されます。
Cisco では、独自プロトコルの DTP(Dynamic Trunking Protocol) を使用し、対向先のポートと動作モードについてネゴシエーション(交渉)します。DTP はトランクポートにするためのプロトコルであり、DTP が相手から送信が無ければトランクポートになることはありません。例として、先出をしてしまうと、動作モードが「dynamic auto ⇔ dynamic auto」の場合は、お互いに DTP の送信がないため、リンクの状態がアクセスリンクになります。

動作モードには以下の4つが存在します。以下の内容からそれぞれ動作モードに強さが [ trunk/access > dynamic desirable > dynamic auto ] のような感じですね。

  • trunk

トランクポートとして動作し、対向ポートにDTPを送信する。
イメージ:私はトランクポートしか認めない!お前もトランクポートになれ!

アクセスポートとして動作し、対向ポートにDTPを送信しない。
イメージ:私はアクセスポートしか認めない!

  • dynamic desirable(desirable:望ましい)

対向先のポートにDTPを送信する。対向先のポートと交渉で了承が得られるとトランクポートになる。
イメージ:良ければトランクポートになりませんか。ダメならアクセスポートになります。

  • dynamic auto

対向先のポートにDTPを送信しない。対向先のポートから交渉が来たら、了承してトランクポートになる。
イメージ:アクセスポートなりたいけど、相手(対向)に合わせるよ。

3. 動作モードによるリンク状態

 以下、動作モードによってリンク状態がどのようになるのかを一覧に記載しました。それぞれのパターンを簡単に解説していきます。

画像1.1.ポートの動作モードによるリンク状態

  • trunk ⇔ trunk

これはさすがに簡単ですね。お互いに trunk モードとして動作するため、リンクはトランクリンクになります。

こちらも簡単ですね。お互いに access モードとして動作するため、リンクはアクセスリンクになります。

  • dynamic desirable ⇔ access

dynamic desirable のできれば trunk モードになりたいけど、access モードが強いため、リンクはアクセスリンクになります。

  • dynamic desirable ⇔ dynamic auto

dynamic auto は対向から交渉がなければ access モードになりますが、dynamic desirable からできれば trunk モードになりませんか?のような交渉があるため、リンクはトランクリンクになります。

参考資料

Cisco Router でのロールバックの使い方

1. 初めに

 検証作業などでコンフィグファイルを変更前の状態に戻したい場合に、投入した設定をすべて削除または戻すコマンドを用意して、実行するのは手間がかかる。その場合、特定地点の設定内容までに戻すことができるのが、ロールバックである。 ロールバックは事前に任意地点の設定ファイルを保存し、保存した設定ファイルを現時点のファイルと置換する。
注意点があるとすれば、コンフィグファイルを保存するということは同じコンフィグファイルが二つ存在することになるため、コンフィグファイルのサイズが格納可能な空き容量が必要となる。しかしながら、コンフィグファイルのサイズが格納できない状態が発生することはあまり考えられないため知識として覚えておくだけで問題ないと考える。
その他の注意点は、以下の内容を確認ください。

コンフィギュレーションの置換とロールバックの制約事項
デバイスに、2 つのコンフィギュレーション ファイル(現在の実行コンフィギュレーションと、保存された置換用コンフィギュレーション)を合わせたサイズより大きな空きメモリがない場合、コンフィギュレーション置換操作は実行されません。

ネットワーク デバイスの物理コンポーネント(物理インターフェイスなど)に関連する特定の Cisco コンフィギュレーション コマンドは、実行コンフィギュレーションについて追加または削除することはできません。たとえば、コンフィギュレーション置換操作を行っても、そのインターフェイスがデバイス上に物理的に存在する場合、現在の実行コンフィギュレーションから interface ethernet 0 コマンド行を削除することはできません。同様に、interface ethernet 1 コマンド行は、そのようなインターフェイスがデバイス上に物理的に存在しない場合、実行コンフィギュレーションに追加することはできません。コンフィギュレーション置換操作でこのタイプの変更を試行すると、その特定のコマンド行が失敗したことを示すエラー メッセージが表示されます。

非常にまれなケースですが、ルータをリロードしないと特定の Cisco コンフィギュレーション コマンドを実行コンフィギュレーションから削除できないことがあります。コンフィギュレーション置換操作でこのタイプのコマンドの削除を試行すると、その特定のコマンド行が失敗したことを示すエラー メッセージが表示されます。

出典:コンフィギュレーションの置換とロールバック [Cisco IOS 15.1S]1

2. 使用機器

機器 詳細
Cisco Router 800M IOS 15.9(3)M7

3. 準備

 バックアップを取得するための準備をする。
アーカイブファイルを格納するためのフォルダ(例:archive)を「mkdir」コマンドで作成する。2

#mkdir archive
Create directory filename [archive]?  <--Enterキー
Created dir sdflash:/archive  <--Enterキー

#dir flash:/ 
Directory of sdflash:/

  377  drw-           0  Oct 12 2022 20:43:14 +09:00  archive

1959055360 bytes total (1893502976 bytes free)

4. 設定

 アーカイブ取得に関する設定をする。今回は、先ほど作成したフォルダに最大で3世代分(有効な値は 1 ~ 14 で、デフォルトは 10 です。3 )のアーカイブを取得することができるように設定する。4
アーカイブを小刻みに取得する場合、例として一日一度アーカイブを取得する設計にすると、7世代にするなどの検討は必要である。
アーカイブの取得を自動で実施するような設定も可能ですが、今回は手動でアーカイブを取得するようにする。
「path」コマンドで設定するアーカイブパスはファイル名が重複しないように自動でアーカイブファイル名の最後に連番の数字が付与される。[5. アーカイブ取得]のアーカイブファイル確認でも記述している。

(config)# archive
(config-archive)# path flash:/archive/RT
(config-archive)# maximum 3

5. アーカイブ取得

 「archive config」で現時点のコンフィグファイルのアーカイブを取得する。プロンプトが返されれば問題なくアーカイブが取得できている。

#archive config

アーカイブ取得後の状態を確認する。アーカイブファイルの格納場所とどのアーカイブファイルが直近で取得したものであるかを「<- Most Recent」で示している。
アーカイブは世代から増えるにしたがって、新しくなる。ここでは、アーカイブ1が古く、アーカイブ3が新しい。
アーカイブで4世代目を取得する場合、1世代目のアーカイブが消え、3世代目に新しいアーカイブが追加される。

#show archive
The maximum archive configurations allowed is 3.
There are currently 1 archive configurations saved.
The next archive file will be named flash:/archive/RT-<timestamp>-1
 Archive #  Name
   1        flash:/archive/RT-Nov-14-11-19-00.602-0 <- Most Recent
   2
   3

#dir flash:/archive/
Directory of sdflash:/archive/

  383  -rw-        5580  Nov 14 2023 20:19:00 +09:00  RT-Nov-14-11-19-00.602-0

1959055360 bytes total (1827606528 bytes free)

アーカイブを取得する際、アーカイブファイル名の最後に自動で連番が付与されるためアーカイブファイル名が重複することはない。
[<timestamp>] のフォーマットは、[<month>-<date>-<hour>-<minutes>-<second.micro second>-<timezone>] となります。

The next archive file will be named flash:/archive/RT-<timestamp>-1

6. ロールバック

 実際に「show archive」で確認した戻したいアーカイブを指定し、ロールバックを実施する。ロールバック実施前に、対象アーカイブファイルが想定の内容であることを事前に確認することをお勧めする。
また、以下のオプションは必須ではない。
force:本当にコンフィグファイルをロールバックしても問題ないかの確認を省略することができるオプション。以下の例での「yes」を入力する必要がなくなる。

#show archive config differences flash:/archive/RT-Oct-12-20-51-24.554-1
<出力内容省略>

#configure replace flash:/archive/RT-Oct-12-20-51-24.554-1 [force]
This will apply all necessary additions and deletions 
to replace the current running configuration with the 
contents of the specified configuration file, which is 
assumed to be a complete configuration, not a partial 
configuration. Enter Y if you are sure you want to proceed. ? [no]: yes <--Enter "yes"
Total number of passes: 1 
Rollback Done

7. 最後に

 ロールバックは特定地点の設定内容まで比較的簡単に戻せることができる便利な一面がある。しかしながら、私個人の感想として、実際に運用中の機器に対してロールバックを実施することはできる限り控えるべきと考える。理由は一つで、ロールバックはコンフィグファイルの置換であり、実際にコマンドを実行して設定を戻す機能ではないためである。初めに注意点として記載した通り、「非常にまれなケースですが、ルータをリロードしないと特定の Cisco コンフィギュレーション コマンドを実行コンフィギュレーションから削除できないことがあります。」といった事象が発生する可能性があり、機器で予期しない動作が発生することを防ぐためでもある。
機能としては非常に便利なものですので、検証作業時に使用するなど状況に応じて、うまく活用するべきである。

8. 参考文献

Cisco Router へのイメージ転送とバージョンアップの手順

※この作業は、Cisco Router へSSH接続ができる状態であることを前提に記載しています。SSH接続ができない場合は、SSH接続の設定を実施してください。

1. IOSイメージファイルをCisco Router へ転送

Cisco Router へファイル転送するには、FTPやTFTPで行うこともできますが、サーバを用意するなどの事前準備が必要であったりと手間がかかることや現時点で稼働している状態に暗号化されない通信でファイル転送を行うことはセキュリティ的に問題があるため、今回はSCPでファイル転送を行います。1
Cisco Router にSCPでファイル転送を行う場合は、事前に privilege が15のユーザ作成と SCPの有効化を設定する必要があります。2
privilege が15のユーザ(ログイン後に特権モードで操作が可能)が必要な理由は、SCPでファイル転送を行うには flash への書き込み権限が必要なためです。
SCPの有効化が必要な理由は、Cisco Router では、SSH接続の設定だけではSCPでファイル転送ができないためです。

(config)#username <UserName> privilege 15 secret <Password>
(config)#ip scp server enable

flash の空き容量を確認します。

#show file systems
File Systems:
       Size(b)       Free(b)      Type  Flags  Prefixes
*   1959055360    1892917248      disk     rw   sdflash: flash:#

※空き容量が不足している場合は、Cisco Router からIOSイメージファイルを退避させます。
Windows で PowerShell を起動後、以下の通りに実行し、SCPでIOSイメージファイルをローカルにダウンロードします。

> scp -o KexAlgorithms=+diffie-hellman-group-exchange-sha1 -o StrictHostKeyChecking=no <UserName>@<IPアドレス>:/<古いIOSイメージファイル.bin> .
(<UserName>@<IPアドレス>) Password: <--privilege が15のユーザのパスワードを入力
<古いIOSイメージファイル.bin>                                                 100%   62MB 900.4KB/s   01:10

Cisco Router で以下の通りに実行し、IOSイメージファイルを削除します。

#delete flash:<古いIOSイメージファイル.bin>
Delete filename [<古いIOSイメージファイル.bin>]? <--Enterキーを押す
Delete sdflash:/<古いIOSイメージファイル.bin>? [confirm] <--Enterキーを押す

空き容量がある場合は、こちらから作業を進めます。
Windows で PowerShell を起動します。
以下の通りに実行すると、Key Exchange Algorithm が対応していないため接続ができないことがあります。3

> scp <新しいIOSイメージファイル.bin> <UserName>@<IPアドレス>:/<新しいIOSイメージファイル.bin>
Unable to negotiate with <IPアドレス> port 22: no matching key exchange method found. Their offer: diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
lost connection

Key Exchange Algorithm が対応していないことで接続ができない場合は、「-o」オプションで Key Exchange Algorithm を指定して、SCPコマンドを実行します。また、SSHでの初回ログインは、fingerprint の確認がありますが、同じく「-o」オプションで無視するようにします。

> scp -o KexAlgorithms=+diffie-hellman-group-exchange-sha1 -o StrictHostKeyChecking=no <新しいIOSイメージファイル.bin> <UserName>@<IPアドレス>:/<新しいIOSイメージファイル.bin>
Warning: Permanently added '<IPアドレス>' (RSA) to the list of known hosts.

(<UserName>@<IPアドレス>) Password: <--privilege が15のユーザのパスワードを入力
<新しいIOSイメージファイル.bin>                                                100%   56MB 334.1KB/s   02:52
Connection to <IPアドレス> closed by remote host.

参考程度に、Cisco Router へIOSイメージファイルを転送している時の負荷は簡易的に構築した Prometheus で監視したところ、以下のような状態でした。チューニングが適切でないため、高負荷時にパラメータが取得できていない時間があります。 以下のグラフを見たところ、一分間の平均CPU使用率が高く、IOSイメージファイルを転送しているので、インターフェースのIN方向(機器に対して通信が入ってくる方向)に対する通信が増加しています。 これらの結果を踏まえて、IOSアップデートするタイミングの検討が必要ですね。

画像1.1. 一分間の平均CPU使用率

画像1.2. 対象インターフェースで受信したパケットの総量

画像1.3. 対象インターフェースで送信したパケットの総量

2. 起動するイメージファイルを設定

今回は明示的にコンフィグファイルに起動するイメージファイルを設定します。古いIOSイメージファイルで起動するように設定をしている場合は、削除します。
flash にイメージファイルが一つしかない場合は、コンフィグファイルへの設定は不要です。コンフィグファイルに起動するイメージファイルを設定する必要があるのは、flash に複数のイメージファイルが存在する場合です。4
精神面で不安がある場合は設定をしておくことを個人的におすすめします。
コンフィグファイルの保存ができたら、「reload」コマンドで再起動します。

#conf t
(config)#no boot system flash:<古いIOSイメージファイル.bin>
(config)#boot system flash:<新しいIOSイメージファイル.bin>
(config)#end
#copy running-config startup-config
Destination filename [startup-config]? <--Enterキーを押す
Building configuration...
[OK]
#reload
Proceed with reload? [confirm] <--Enterキーを押す

3. バージョン確認

 再起動後にバージョン確認コマンドを実行し、新しいバージョンに切り替わっていることを確認します

#show ver
Cisco IOS Software, C****** Software (C******-UNIVERSALK9-M), Version <新しいバージョン>, RELEASE SOFTWARE (fc2)

4.参考資料