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.2 ネットワーク設定の違い
ESXiとProxmoxのネットワークの設定の違いを見ていきます。
①ESXiのネットワークの設定
仮想スイッチとポートグループで、基本的なネットワーク設定が行えます。
| 項番 |
設定箇所 |
設定内容 |
|---|---|---|
|
① |
仮想スイッチ |
・物理ポートとの接続を設定できる |
|
② |
ポートグループ |
・仮想スイッチとの接続構成を設定できる |
②Proxmoxのネットワークの設定
機能によってLinux Bridge、Linux VLAN、Linux Bondと設定項目がわかれています。
| 項番 |
設定箇所 |
設定内容 |
|---|---|---|
|
① |
Linux Bridge |
・NICまたはLinux Bondとの接続を設定できる |
|
② |
ポートグループ |
・仮想スイッチとの接続構成を設定できる |
|
③ |
Linux VLAN |
・物理NICまたはLinux bondに対しVLANの設定ができる |
|
④ |
物理NIC |
・IPアドレスが設定できる |
まとめると、大きく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@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] |
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
auto lo auto nic0 auto nic1 auto nic2 auto nic0.100 auto bond0 |
設定ファイルを書き換えた場合は、以下のコマンドで設定の有効化をします。
・すべての設定を有効化
|
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 |
6.2 ip –br link (省略系:ip –br l)
ネットワークインターフェースのリンク情報を取得するコマンドです。
|
root@Proxmox:~# ip -br link |
6.3 ethtool デバイス名
ネットワークインターフェースカードの設定の変更や、情報を取得するためのコマンドです。
|
root@Proxmox:~# ethtool nic0 |
(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 |
・正しい例
|
auto nic3 |
《原因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管理画面にインポート機能がありますので、設定さえできてしまえば簡単に移すことができます。しかしネットワークの部分は、設計の変更が必要になりますので、今回のブログを参考に構築の手助けになれば幸いです。

