仮想化基盤

Proxmoxネットワーク入門

BroadcomによるVMware買収に伴い、ライセンス体系がサブスクリプション化されました。これによるコスト増を受け、多くの企業が対応を迫られています。

その対策の1つとして、仮想化基盤をVMwareから別の製品に切り替えることを検討している企業も増えてきています。

オープンソースの仮想基盤として注目を浴びているProxmoxについて、ネットワークの設定方法をご紹介します。

はじめに

こんにちは。東京エレクトロンデバイスでエンジニアをしている Satoshiです。

最近、お客様から「ESXiから別の仮想化基盤に移行したい」という声を良く聞くようになりました。
Hyper-VやKVMなど様々な仮想化基盤がある中で、Proxmoxの名前があがるケースも増えてきています。

Proxmoxは以下の3点で高く評価されていますが、国内(日本語)の情報はまだ少ないのが現状です。
・コストパフォーマンス: オープンソースベースで導入しやすい
・柔軟性: VM(仮想マシン)とコンテナ(LXC)の両方に対応
・運用性: 高機能なWeb UIによる直感的な管理

特にネットワークに関しては、ESXiと異なる点も多く、どのような設定をしたら良いのか悩まれる方も多いかと思います。
本ブログでは「Proxmoxネットワーク入門」として、Proxmoxのネットワークの基礎知識をご紹介します。

(1) ESXiとProxmoxのネットワーク構成の違い

1.1 全体構成

ESXiとProxmoxのネットワークの設定で最大の違いは、「仮想ネットワーク」の設定がないことです。
そのため、ESXiの環境をProxmoxに移行して利用するためには、仮想環境内のネットワーク設計を再検討する必要があります。

以下が、ESXiとProxmoxのネットワーク構成の違いを示した図になります。
一見、ProxmoxはESXiと比べ複雑な構成に見えますが、実際に設定を行ってみると難しくありません。


図1.ESXiとProxmoxのネットワーク構成の違い

1.2 ネットワーク設定の違い

ESXiとProxmoxのネットワークの設定の違いを見ていきます。

①ESXiのネットワークの設定

仮想スイッチとポートグループで、基本的なネットワーク設定が行えます。

項番

設定箇所

設定内容

仮想スイッチ

・物理ポートとの接続を設定できる
・物理NICに対しチーミングの設定ができる

ポートグループ

・仮想スイッチとの接続構成を設定できる
・VLANの設定ができる
・IPアドレスの設定ができる
・仮想マシンから接続する

②Proxmoxのネットワークの設定

機能によってLinux Bridge、Linux VLAN、Linux Bondと設定項目がわかれています。

項番

設定箇所

設定内容

Linux Bridge

・NICまたはLinux Bondとの接続を設定できる
・IPアドレスが設定できる
・仮想マシンから接続する

ポートグループ

・仮想スイッチとの接続構成を設定できる
・VLANの設定ができる
・IPアドレスの設定ができる
・仮想マシンから接続する

Linux VLAN

・物理NICまたはLinux bondに対しVLANの設定ができる
・IPアドレスが設定できる

物理NIC

・IPアドレスが設定できる
※マルチパスを設定した際に、IPアドレスを設定します。
NICにIPアドレスを設定した場合、カーネルがNICを独立したネットワークの終端として扱うため、Linux Bridgeに接続することはできなくなります。

まとめると、大きくESXiの設定と異なる点は、以下の2つになります。
① Bonding (ESXiでいうTeaming)は、Linux Bondを作成し、Bonding用のポートを別に作成する必要がある。
② VLANは、NICまたLinux Bondに設定を行い、新たに接続ポートを作成する必要がある。

それでは、実際に設定方法をみていきましょう。

(2) 検証環境について

本ブログでは、検証用としてESXi上にProxmoxを構築した「Nested Proxmox」環境を使用します。
ネットワークポートは3ポートある構成にしてあります。

Proxmox自体は、以下の設定でインストールを行いました。

・Proxmoxの設定

項目

内容

Filesystem

ext4

Disk(s)

/dev/sda

Country

Japan

Timezone

Asia/Tokyo

Keymap

jp

Email

email@example.com

Management Interface

nic0

Hostname

Proxmox

IP CIDR

192.168.15.45/24

Gateway

192.168.15.197

DNS

192.168.15.197


(3) WEB
管理画面のログイン

Proxmoxのインストールが完了したら、ブラウザーからProxmoxのWEB管理画面にログインします。

https://192.168.15.45:8006

Proxmoxでは最新のGoogle ChromeやFirefoxを推奨しています。
オフライン環境でアップデートできない場合は、オフライン用のインストーラーをダウンロードしインストールする必要があります。

・Google Chrome オフラインインストーラー
 Windows 64bit版:https://www.google.com/chrome/?standalone=1&platform=win64
 Windows 32bit版:https://www.google.com/chrome/?standalone=1&platform=win
 Mac版:https://www.google.com/chrome/?standalone=1&platform=mac
 Linux版:https://www.google.com/chrome/?standalone=1&platform=linux

Firefox オフラインインストーラー
 https://www.firefox.com/ja/download/all/?redirect_source=mozilla-org#product-desktop-release
 

(4) Proxmoxのネットワークの設定

4.1 導入直後のネットワーク環境

Proxmoxのホスト名をクリックし、右側のメニューから「ネットワーク」をクリックします。

インストール時にProxmoxで認識された物理ネットワークポートは、デフォルトでnic0、nic1、nic2…と名前がつきます。
vmbr0という名前のLinux Bridgeに管理IPアドレスが設定され、nic0が割り当てられた状態になります。

4.2 VMからUnTag(タグなし)で通信をする場合の設定

Proxmoxでは、VM(仮想マシン)の仮想NICは、必ずLinux Bridgeを割り当てます。

VMがVLAN IDを必要とせずUnTag(タグなし)でnic0から通信をする場合、VLANを有効にしていないLinux Bridge(vmbr0)に仮想NICを割り当てればOKです。

 

 

 

4.3 NICに対しTagVLAN(タグあり)で通信をする場合の設定

NICに対しTagVLAN(タグあり)で通信するためには、物理NICにLinux VLANの設定を行います。

①Linux VLANの作成

新規作成 ⇒ Linux VLANを選択します。
ここでVLAN タグとVLAN IDを割り当てるNIC(VLANのRAWデバイス)の設定をします。

名前の設定ルールとして、以下の3パターンがあります。

名前

設定例

設定

VLANのRAWデバイス

VLANタグ

[NIC名].[VLAN ID]

nic0.100

nic0

100

vlan[VLAN ID]
(vlanは小文字)

vlan100

任意で入力

100

上記以外の
任意の名前

VLAN100

任意で入力

任意で入力

名前に「NIC名.VLAN ID」で設定した例が以下になります。

②Linux VLANに接続するLinux Bridgeを作成

新規作成 ⇒ Linux Bridgeを選択します。
名前は任意ですが、デフォルトで自動的にvmbrの連番が入力されます。
ブリッジポートに作成したLinux VLANの名前を入力します。
今回の環境ではIPアドレスも入力していますが、必要がなければ空欄でも問題ありません。
「VLAN aware」に☑を入れることで、VLANが有効になります。

③VMの仮想NICの割り当て

VMの仮想NICにLinux Bridge (vmbr1)を仮想NICに割り当てることで、nic0からVLAN100の通信が可能になります。

 

 

 

 

 

 

4.4 Bondingの設定

Bondingは複数の物理的なネットワークインターフェース(NIC)を束ねて、1つの論理的なインターフェースとして扱えるようにすることで、冗長化(障害時の自動切り替え)やスループット向上(帯域幅の拡大)が可能です。

①Linux Bondの作成

新規作成 ⇒ Linux Bondを選択します。
名前はデフォルトでbondの連番になりますが、任意で設定することが可能です。
モードは、どのようなBondingの設定を行うか、プルダウンで選択します(詳細は後述)。

以下は、active-backupの設定する場合の例になります。
スレーブにBonding対象となるNICの名前を空白で区切って記載します。
bond-primaryに通常時に通信を行うNICの名前を記載します。
この設定により、通常時はnic1で通信をおこない、nic1に障害が発生した際にnic2に切り替わります。

Bondingのモードは以下の7つがあります。設定により接続するスイッチ側の制約があります。

モード

負荷分散

スイッチの制約

balance-rr (0)

ラウンドロビンによる負荷分散になります。bondingを行っているすべてのインターフェースで受信が可能

スイッチで EtherChannel を構成する必要がある

active-backup

active/backupの方式で、1つのスレーブインターフェースで送信を行う。activeポートが使用できなくなると、backupポートがactiveポートになる

スイッチの設定は必要なし

balance-xor

送信元/宛先情報を元に負荷分散を行う。情報はxmit_hash_policyによって設定可能。bondingを行っているすべてのインターフェースで受信が可能

スイッチで EtherChannel を構成する必要がある

broadcast

すべてのスレーブインターフェースから同じパケットを送信する。bondingを行っているすべてのインターフェースで受信が可能

スイッチの設定は必要なし

LACP (802.3ad)

LACP(Link Aggregation Control Protocol:リンクアグリゲーションの接続を確立させるプロトコル)を使用する。情報はxmit_hash_policyによって設定可能。送信元/宛先情報を元に負荷分散を行い、受信はLACPでネゴシエーションが取れたインターフェースであれば可能

スイッチで 802.3ad を構成する必要がある

balance-tlb

スレーブインターフェースの負荷によって負荷分散され、送信する。bondingを行っているすべてのインターフェースで受信が可能。アクティブなアダプタが故障すると別のアダプタが MAC アドレスを引き継ぐ

スイッチの設定は必要なし

balance-alb

スレーブインターフェースの負荷によって負荷分散され、送信する。受信は負荷に応じて変更。通信相手の ARP テーブルを書き換えることでアダプタを選択(ARP ネゴシエーション)。ルータ越しだと常に同じアダプタ

スイッチの設定は必要なし

 

4.5 Bondingに対しTagVLAN(タグあり)で通信をする場合の設定

Bondingに対しTagVLAN(タグあり)で通信するためには、BondingにLinux VLANの設定を行います。
「4.3 NICに対しTagVLAN(タグあり)で通信をする場合の設定」と同じになります。
ただし、対象となるVLANのRAWデバイスの設定はNICではなく、作成したLinux Bondの名前になります。

①Linux VLANの作成

Bond0にVLAN200とVLAN300の通信を行う場合、それぞれのLinux VLANを作成しbond0に割り当てます。

②Linux VLANに接続するLinux Bridgeを作成

新規作成 ⇒ Linux Bridgeを選択します。
VLAN200とVLAN300用のLinux Bridgeを作成します。ブリッジポートに作成したLinux VLANの名前を入力します。
忘れずに「VLAN aware」に☑を入れます。

③VMの仮想NICの割り当て

VMの仮想NICにLinux Bridge (vmbr2)とLinux Bridge (vmbr3)を仮想NICに割り当てることで、Bondingしたnic2とnic3からVLAN200とVLAN300の通信が可能になります。

 

 

 

 

4.6 設定後のネットワーク環境

4.2~4.5までの設定完了後のネットワークの設定画面は以下になります。
NICが3ポート、Linux Bridgeが4つ、Linux VLANが3つ、Linux Bondが1つで構成されています。

 

(5) ネットワークの設定ファイル

設定したネットワークの設定は、「/etc/network/interfaces」に保存されています。
ProxmoxはDebian Linuxがベースになるため、直接設定ファイルを編集してネットワークの設定を行うことも可能です。

# network interface settings; autogenerated
# Please do NOT modify this file directly, unless you know what
# you’re doing.
#
# If you want to manage parts of the network configuration manually,
# please utilize the ‘source’ or ‘source-directory’ directives to do
# so.
# PVE will preserve these directives, but will NOT read its network
# configuration from sourced files, so do not attempt to move any of
# the PVE managed interfaces into external files!

auto lo
iface lo inet loopback

auto nic0
iface nic0 inet manual

auto nic1
iface nic1 inet manual

auto nic2
iface nic2 inet manual

auto nic0.100
iface nic0.100 inet manual

auto bond0
iface bond0 inet manual
          bond-slaves nic1 nic2
          bond-miimon 100
          bond-mode active-backup
          bond-primary nic1


設定ファイルを書き換えた場合は、以下のコマンドで設定の有効化をします。
・すべての設定を有効化

root@Proxmox:~# ifreload -a

・個別の設定を有効化

root@Proxmox:~# ifdown vmbr0 && ifup vmbr0


(6)
ネットワークの確認コマンド

ネットワークの状況は、コマンドでも確認することができます。

6.1 ip address show (省略系:ip a)

ネットワークインターフェースに割り当てている、IPアドレスやネットワークアドレスを取得するコマンドです。

赤文字=Proxmoxのインターフェース設定上からのUP/DOWN (ifup/ifdown)
青文字=物理接続の状況 (LOWER UP=物理的に接続されている)
緑文字=リンクのUP/DOWN

root@Proxmox:~# ip address show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute
       valid_lft forever preferred_lft forever
2: nic0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master vmbr0 state UP group default qlen 1000
    link/ether 00:50:56:b3:8b:b7 brd ff:ff:ff:ff:ff:ff
    altname enp11s0
    altname enx005056b38bb7
3: nic1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP group default qlen 1000
    link/ether 00:50:56:b3:76:8e brd ff:ff:ff:ff:ff:ff
    altname enp19s0
    altname enx005056b3768e
4: nic2: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP group default qlen 1000
    link/ether 00:50:56:b3:76:8e brd ff:ff:ff:ff:ff:ff permaddr 00:50:56:b3:60:30
    altname enp27s0
    altname enx005056b36030
5: nic0.100@nic0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:50:56:b3:8b:b7 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::250:56ff:feb3:8bb7/64 scope link proto kernel_ll
       valid_lft forever preferred_lft forever



6.2 ip –br link (
省略系:ip –br l)

ネットワークインターフェースのリンク情報を取得するコマンドです。

root@Proxmox:~# ip -br link
1: lo: <LOOPBACK,UP,LOWER_UP>lo               UNKNOWN        00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP>
nic0             UP             00:50:56:b3:8b:b7 <BROADCAST,MULTICAST,UP,LOWER_UP>
nic1             UP             00:50:56:b3:76:8e <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP>
nic2             UP             00:50:56:b3:76:8e <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP>
nic0.100@nic0    UP             00:50:56:b3:8b:b7 <BROADCAST,MULTICAST,UP,LOWER_UP>
vmbr0            UP             00:50:56:b3:8b:b7 <BROADCAST,MULTICAST,UP,LOWER_UP>
bond0            UP             00:50:56:b3:76:8e <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP>
bond0.200@bond0  UP             00:50:56:b3:76:8e <BROADCAST,MULTICAST,UP,LOWER_UP>
vmbr1            UP             00:50:56:b3:76:8e <BROADCAST,MULTICAST,UP,LOWER_UP>
bond0.300@bond0  UP             00:50:56:b3:76:8e <BROADCAST,MULTICAST,UP,LOWER_UP>
vmbr2            UP             00:50:56:b3:76:8e <BROADCAST,MULTICAST,UP,LOWER_UP>



6.3 ethtool
デバイス名

ネットワークインターフェースカードの設定の変更や、情報を取得するためのコマンドです。

root@Proxmox:~# ethtool nic0
Settings for nic0:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Half 1000baseT/Full
        Supported pause frame use: No
        Supports auto-negotiation: Yes
        Supported FEC modes: Not reported
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Half 1000baseT/Full
        Advertised pause frame use: No
        Advertised auto-negotiation: Yes
        Advertised FEC modes: Not reported
        Link partner advertised link modes:  100baseT/Half 100baseT/Full
                                             1000baseT/Full
        Link partner advertised pause frame use: Symmetric
        Link partner advertised auto-negotiation: Yes
        Link partner advertised FEC modes: Not reported
        Speed: 1000Mb/s
        Duplex: Full


(7) 簡易トラブルシューティング

コマンドの実行結果から、通信障害の原因を推測することができます。

コマンド

結果

原因

ifup NIC名

ifupコマンドでNICがUPになった。

設定ファイル(/etc/network/interfaces)にautoの記載不足

ifupが失敗

設定ファイル(/etc/network/interfaces)の問題

ip link show NIC名

「NO-CARRIER」や「state DOWN」が表示される

物理層の問題

ethtool NIC名

「Link detected: no」の場合

ケーブル/スイッチ/VLANの問題

「Link detected: yes」なのに DOWNの場合

OS側の問題

ip link show

NICの名前がない

NIC名の間違い


簡易通信トラブル切り分けチェックリスト (
例:nic3の通信ができない場合)

ip address showによる確認

root@Proxmox:~# ip address show nic3

「State DOWN」や「LOWER_UPがない」場合は、OSレベルでインターフェースが有効化されていないか、物理リンクが上がっていない可能性が高いです。

《原因1》/etc/network/interfacesにNICの自動起動の設定がない
Proxmoxは、ネットワーク設定を書いただけではNICはupせず、自動起動の設定を入れる必要があります。
手動で設定ファイルを書き換えた場合に、設定が抜けている可能性があります。

・間違っている例

iface nic3 inet static
    address 192.168.1.10/24


・正しい例

auto nic3
iface nic3 inet static
    address 192.168.1.10/24

 

《原因2》物理リンクが上がっていない (ケーブル/ポート)

root@Proxmox:~# ip link show nic3

「NO-CARRIER」や「state DOWN」の場合は、物理層の問題の可能性があります。

root@Proxmox:~# ethtool nic3

・「Link detected: no」の場合:ケーブル/スイッチ/VLANの問題
・「Link detected: yes」なのに DOWNの場合: OS側の問題

 

《原因3》NIC名を勘違いしている
実際の名前がnic3でなく、enp3s0、eno2、ens18など違う名前になっている可能性があります。
設定したNIC名と、実在するインターフェース名が一致しているか、以下のコマンドで確認して下さい。

root@Proxmox:~# ip link show

 

《原因4》BIOS/IOMMU(Input-Output Memory Management Unit)/パススルー設定
サーバーで以下の設定をしていると、Proxmox側ではNICがDOWN扱いになることがあります。
・SR-IOV
・PCI Passthrough

 

 (8) 補足情報

8.1 ネットワーク設定画面の稼働中のステータスについて

Proxmoxの説明を見ると、ネットワーク画面にて「稼働中(Active)」が「はい」になっていたらリンクアップしているとなっています。
しかし、物理的にリンクダウンしていても、稼働中のステータスが「はい」のままになっている事象を確認しています。
実際のリンクアップ・ダウンの確認はコマンドでチェックすることをおすすめします。

 

8.2 Proxmox VE 9.1でのNIC名固定手順

Proxmoxはインストール時に、物理ネットワークポートに対し、nic0、nic1、nic2…という名前を割り当てます。
しかし、導入後に新規のネットワークポートを検出した場合、enoXX、ensXXなど自動的に名前が払い出しされます。

以下のコマンドを実行することで、新規のネットワークポートもnicXXという名前を割り当てます。

root@Proxmox:~# pve-net network-interface-pinning generate

コマンドを実行すると、既存の設定ファイル(/etc/network/interfaces)から、新しい設定内容を反映した、/etc/network/interfaces.new が作成されます。内容に問題がないことを確認します。

root@Proxmox:~# cat /etc/network/interface.new

変更を適用するために、ノードの再起動をします。

root@Proxmox:~# reboot

ネットワーク設定の変更は、再起動後に有効になります。再起動後、ネットワークの疎通がとれなくなることも考慮し、作業はコンソールアクセス可能な状態で行うことを強くお勧めします。再起動後、NIC名は自動的に新しい固定名 (例: nic0, nic1) に変更され、/etc/network/interfaces ファイルも新しい名前を参照するように更新されます。

これにより、将来的なハードウェア変更があっても、NIC名が変動しなくなります。

まとめ

ESXiとProxmoxで基本的なネットワークの設定方法は異なりますが、ブログを見ていただければわかるように、慣れてしまえばそこまで難しいものではありません。また、基本的にはDebian Linux上でのネットワーク設定を実施していますので、Debian Linuxを使用したことがある人ならば、逆にわかりやすい方もいることでしょう。

ESXiからProxmoxの仮想マシンの移行する際、仮想マシンの移行は、WEB管理画面にインポート機能がありますので、設定さえできてしまえば簡単に移すことができます。しかしネットワークの部分は、設計の変更が必要になりますので、今回のブログを参考に構築の手助けになれば幸いです。

この記事に関連する記事