🐿️

NetBox にネットワーク情報を登録

2021/08/19に公開

はじめに

前回は NetBox を Kubernetes 上に構築しました。
https://zenn.dev/t_ume/articles/5d74e974ba3cbb

今回は構築した NetBox に実際にデータを登録してみたので、各オブジェクトを考察しつつオブジェクトの繋がりと実際の画面を確認していきます。
私がサーバエンジニア(クラウド寄り)なので、詳しいネットワークや物理ラックの説明等は置いておいて、まずはデバイス(機器)や VM 、IP アドレスを見ていきます。

環境情報

NetBox:v2.11.9

NetBoxおさらい

登録の前に NetBox のおさらいを。以下を参考にまとめました。
https://netbox.readthedocs.io/en/stable/

  • NetBox とは
    • IRM(Infrastructure Resource Modeling) アプリケーション
    • ネットワーク自動化を主に置いて設計されている
    • ネットワーク及びインフラエンジニアのニーズに応えるために開発された
    • ネットワーク管理のキーワードとして以下が含まれている
      • IP アドレス管理(IPAM):IP ネットワークとアドレス、VRFs(Virtual Routing and Forwarding)、VLANs
      • 機器ラック:組織化されたグループやサイト
      • デバイス:デバイスの種類と配置場所
      • 接続:デバイス間のネットワーク、コンソール、電源接続
      • 仮想化:仮想マシンとクラスター
      • データ回線:長距離回線及びプロバイダー
      • 秘密情報:クレデンシャルなどの暗号化された情報
  • コンセプト
      1. 実世界を複製する
      • データモデルが実際のネットワークを正確に反映できるように設計されている
      • 例.1) IPアドレスはデバイスではなく、特定のインタフェースに割当てられる
      • 例.2) インタフェースには複数のIPアドレスが割当てられる
      1. 「正しい情報」を提供
      • ネットワークの望ましい状態と動作状態を表すことを目的としている
      • 動作しているネットワーク状態の自動インポートは推奨されない
      • 整合性を確保するために、登録したデータは最初に人が精査する必要がある
      • これにより監視やプロビジョニングなどのシステムに高い信頼性のデータを提供できる
      1. 単純にする
  • NetBoxでは行わないこと
    • ネットワーク監視
    • DNS サーバー
    • RADIUS サーバー
    • 構成管理
    • ファシリティ管理

登録データ

今回は以下のカテゴリ順で確認していきます。

  1. Organization(Regions / Location / Tenant / ...)
  2. Device(Device / DeviceType / Interface / ...)
  3. Virtualization(VirtualMachine / Cluster / Interface / ...)
  4. IPAM(IP Address / Prefix / ...)

※各カテゴリでオブジェクト図を差し込んでいます(PlantUML で作成)。
 各オブジェクトの入力項目をコンポジション(has - a)で表現しています。

Organization

Organization では 組織の情報を登録します。

organization
@startuml

left to right direction

package Organization <<Frame>> {
    Map Tenant {
        説明 => 所有者
    }

    package Sites << Frame >> {
        Map Region {
            説明 => 大陸・国・都市
        }
        Region -> Region : parent/child

        Map Site {
            説明 => 建物・構内
        }
        Site *-- Region
        Site *---- Tenant

        Map Location {
            説明 => フロア、部屋、ケージ
        }
        Location -> Location: parent/child
        Location *-- Site
        Location *-- Region
    }
}

@enduml
  • Site:機器の配置情報
    • Region:地理的(大陸、国、都市)情報
    • Site:建物または構内
    • Location:フロアや部屋、ケージ、他組織単位
  • Tenant(顧客、組織単位)
    • 管理目的(オブジェクトの所有権)で使用されるオブジェクトの個別のグループ
    • 個々の顧客、または組織内の内部部門を表すために使用される
    • 各オブジェクトは単一のテナントのみが所有できる

入力例

※一覧画面がないので各画面を連結しています

Device

Device は物理的な機器情報を登録します。サーバーやネットワーク機器の情報から、実際のポートとポートとの接続情報も登録することが出来ます。

Device
@startuml

left to right direction

Map Interface {
    説明 => ネットワークインタフェース
}
package IPAM << Frame >> {
    Map IPAddress {
        説明 => IPアドレス
        NAT => NAT IP
    }
    IPAddress *-- Interface

    Map Service{
        説明 => TCP/UDPサービス\n(名前/プロトコル/ポート番号)
    }
    Service *-- IPAddress
}

package Organization <<Frame>> {
    package Sites << Frame >> {
        Map Location {
            説明 => フロア、部屋、ケージ
        }
        Location -> Location: parent/child
    }
}

package Device << Frame >> {
    package DeviceType << Frame >>{
        Map Manufacturer {
            説明 => メーカー
        }

        Map DeviceType {
            説明 => ハードウェアのメーカー/モデル
        }
        DeviceType *-down- Manufacturer
    }

    package Devices << Frame >> {
        Map DeviceRole {
            説明 => デバイスの役割
        }

        Map Platform {
        説明 => ソフトウェアタイプ\n(OSなど)
        }
        Platform *-- Manufacturer

        Map Device {
            説明 => ハードウェア
        }
        Device *-- DeviceRole
        Device *-- Manufacturer
        Device *-- DeviceType
        Device *-- Location
        Device *-- Platform
        Device *-- Interface
        Device *-- Service
    }
}

@enduml
  • Device
    • Device:サイト、ラック内に配置されている機器・ハードウェア
    • Device Role
      • 機能的な役割(ユーザがカスタマイズして使う)
      • 例)コアスイッチ、ディストリビューションスイッチなど
    • Platform
      • デバイス、仮想マシンで実行されるソフトウェアのタイプ
      • 異なるバージョンや機能セットを表したい場合に利用する
  • Device Types
    • Device Type
      • ハードウェアの特定のメーカ、モデルを表す(デバイスの物理属性など)
      • 注意:デバイスタイプに加えられた変更は、そのデバイスタイプのインスタンスに遡って適用されることは無い(らしい。ドキュメント参照)
    • Manufacturer:メーカー(Cisco/Dellなど)
      • 各デバイスタイプはManufaturerに割り当てる必要がある
  • Connection:各ケーブル、接続を表す(Interface から設定)
  • Interface
    • ネットワークインタフェース
    • デバイスと仮想マシンでは(データ)モデルが異なる(プロパティが異なる)
      • Interface Type
        • 物理的、仮想的なインタフェースが定義できる
        • ケーブリング出来るのは物理的インタフェースのみ
      • IP Address Assignment
        • IPアドレスをインタフェースに割り当てる

入力例

Virtualization

Virtualization は仮想化基盤を管理します。主に Hypervisor を導入しているサーバの集まりであるクラスタや仮想化基盤上で起動している VM を登録します。

Virtualization
@startuml

left to right direction

Map Platform {
  説明 => ソフトウェアタイプ\n(OSなど)
}

package Organization <<Frame>> {
    Map Tenant {
        説明 => 所有者
    }

    package Sites {
        Map Region {
            説明 => 国・地域・都市
        }
        Region -> Region : parent/child

        Map Site {
            説明 => 建物・施設
        }
        Site *- Region
        Site *---- Tenant
    }
}

Map Interface {
    説明 => ネットワークインタフェース
}

package IPAM << Frame >> {
    Map IPAddress {
        説明 => IPアドレス
        NAT => NAT IP
    }
    IPAddress *---- Tenant
    IPAddress *- Interface

    Map Service{
        説明 => TCP/UDPサービス\n(名前/プロトコル/ポート番号)
    }
    Service *--- IPAddress
}

package Virtualization << Frame >> {
    Map ClusterType {
        説明 => クラスターの種類\nex) VMware / AzureJE
    }

    Map Cluster {
        説明 => 仮想マシンが起動する物理サーバのクラスタ
    }
    Cluster *- ClusterType
    Cluster *-- Region
    Cluster *-- Site
    Cluster *---- Tenant

    Map VirtualMachine {
        説明 => クラスタ内でホストされている\n仮想コンピューティングインスタンス
    }
    VirtualMachine *-- Cluster
    VirtualMachine *---- Tenant
    VirtualMachine *-- Platform
    VirtualMachine *-- Interface
    VirtualMachine *-- Service
}

@enduml
  • Virtual Machine
    • VMインスタンス
    • 各VMは1つのクラスタに割り当てる必要がある
    • リソース情報の入力欄がある(vCPU/memory/disk)
      • Interface
        • Device の Interface と同様だが一部プロパティが異なる
        • VMインタフェースはケーブルを接続することはできない
  • Cluster
    • Cluster
      • 仮想マシンが実行される物理リソースの論理グループ
      • Cluster Type を割り当てる必要がある
      • 物理デバイスは、仮想基盤のホストとしてクラスターに関連付けることができる
    • Cluster Type
      • クラスターのプロダクトやサービス、技術情報を表す
      • 例.1) VMware vSphere:ローカルのVMware
      • 例.2) AzureJE:クラウドプロバイダー

入力例

IPAM

いよいよ本題の IPAM です。IP アドレスやネットワークの Prefix などを登録します。また、Aggregate を登録することで全体を俯瞰してみることもできます。

IPAM
@startuml

left to right direction

package Organization <<Frame>> {
    Map Tenant {
        説明 => 所有者
    }

    package Sites {
        Map Region {
            説明 => 国・地域・都市
        }
        Region -> Region : parent/child

        Map Site {
            説明 => 建物・施設
        }
        Site *-- Region
    }
}

Map Interface {
    説明 => ネットワークインタフェース
}

package IPAM << Frame >> {
    Map IPAddress {
        説明 => IPアドレス
        NAT => NAT IP
    }
    IPAddress *-- Tenant
    IPAddress *- Interface

    package Prefix << Frame >> {
        Map PrefixVlanRoles {
            説明 => ネットワークの役割・機能
        }

        Map Prefix {
            説明 => IPv4/v6 ネットワーク
            Prefix => 管理対象 NW Prefix(CIDR)
        }
        Prefix *-- Site
        Prefix *-- PrefixVlanRoles
        Prefix *-- Region
        Prefix *-- Tenant
    }

    package Aggregate << Frame >> {
        Map RIR {
            説明 => 特定のアドレス空間を「所有」する機関
        }

        Map Aggregate {
            説明 => ネットワークの集約機関
            Prefix => 集約する NW Prefix(CIDR)
        }
        Aggregate *- RIR
        Aggregate *-- Tenant
    }

    Map Service{
        説明 => TCP/UDPサービス\n(名前/プロトコル/ポート番号)
    }
    Service *-- IPAddress
}

package Virtualization << Frame >> {
    Map VirtualMachine {
        説明 => クラスタ内でホストされている\n仮想コンピューティングインスタンス
    }
    VirtualMachine *-- Interface
    VirtualMachine *-- Service
}

Map Device {
    説明 => ハードウェア
}
Device *-- Interface
Device *-- Service

@enduml
  • IP Address:
    • 単一のホストアドレスとそのサブネットマスクで構成される
    • IPAddressは任意のデバイス、仮想マシンのインタフェースに割り当てることが出来る
    • インタフェースには複数のIPアドレスを割り当てることができる
  • Prefix:
    • Prefix
      • IPv4/v6 のネットワーク(CIDR表記)
      • 自動的にネットワークの集合体が構成される
      • VRFに割当てられていないすべてのプレフィックスはグローバルテーブルにあるとみなされる
    • Prefix/VLAN Roles
      • Prefix、VLANの機能を表す
      • 例)データ、音声、セキュリティ
  • Aggregate:
    • Aggregate
      • ネットワークの集約
      • IPスペースの関心のある部分を指定できる
    • RIR:特定のアドレス空間を「所有」する機関を定義
  • Service:サービス、デーモンを定義

入力例

Prefix IP 管理画面

Aggregate 管理画面

その他オブジェクト

  • ~Group:各オブジェクトをグルーピングできる
  • Power ~:電源関連の情報を登録できる
  • Rack / Port / VLAN
  • Tag:各オブジェクトに付与できるタグ
  • Secret:機密情報

まとめ

IPAM と一口に言っても、場所やデバイスなど関連するデータを登録してからメインの NW 情報を登録する形となります。オブジェクト図の右側にあるオブジェクトから登録することで、依存関係に悩まされることなく登録ができるかと思います。
Prefix や Aggregate を活用することで IP アドレス空間を俯瞰的に見ることもでき、IPAM で有効活用ができるかと思います。また、プラグインを導入することでネットワーク図も出力できるので使い方は様々かと思います。

補足

Interface 間をつなぐ Connection を再作成している際に、作成できずエラー画面が出ました。

エラー文言
Cable matching query does not exist.

以下の対応を取ることで解消できるということだったのですが、私は Redis Pod を再起動することでエラーが解消できました。

https://github.com/netbox-community/netbox/issues/6636

Discussion