最近、Proxmox VEのLXCの便利さに気づいた。LXCで手軽に環境を作成するにあたり、各環境にホストネットワークのIPアドレスが割り当てされることが気持ち悪く感じたため、NATネットワークを作成することにした。
公式ドキュメントに従って、Software Defined Netoworkの機能で自動DHCP機能付きのソースNATネットワークを作成してみた。
dnsmasqをインストール
自動DHCP機能を使うためにProxmox VEホストにdnsmasqをインストールする。インストール後、デフォルトのdnsmasqサービスを停止する。
apt install dnsmasq systemctl disable --now dnsmasq
SDNの設定
Proxmox VEのWeb UIで「データセンター > SDN > ゾーン」を選択する。
「追加」ボタンから「Simple」を選択する。

シンプルゾーンのIDを入力する。IDは任意(今回はdhcpsnat)。IPAMはIPアドレスを管理する機能、デフォルトのpveを選択。詳細設定で「自動DHCP」を有効化。

Web UIのメニューから「データセンター > SDN > Vnets」を選択する。
作成ボタンを押してVNetを作成する。IDは任意(今回はVNet0)。ゾーンは先ほど作成したシンプルゾーンを選択。

同じ画面で作成したVNetを選択し、サブネットを作成する。
サブネットの作成ボタンをクリック、「サブネット」にネットワークのアドレス範囲を指定(今回は10.0.0.0/24)。DHCPを動作させるためにゲートウェイを設定(今回は10.0.0.1)。SNATをONにしてソースNATを有効にする。

DHCPレンジパネルに移動して、DHCPで割り当てるIPアドレスの範囲を指定する。

Web UIの「データセンター > SDN」を選択、適用ボタンをクリックしてここまでの設定をホストに反映する。

Firewallの設定
VNetインターフェースでDHCPフォワーディングとDNSのトラフィックを許可するファイアウォールルールを設定する。
DHCP用のルール。通信方法はIN、動作はACCEPT。マクロでDHCPfwdを選択。

DNS用ノール。通信方法はIN、動作はACCEPT。マクロでDNSを選択。

動作確認
LXCコンテナ(または仮想マシン)のネットワークで今回作成したシンプルゾーンを選択、IPv4でDHCPを指定する。コンテナ起動後、ネットワーク設定画面でIPアドレスが割り当てられたことを確認できた。

コンソールにログインしてインターネット向けにpingを実行、疎通を確認できた。

SDNのIPAMでIPアドレスの割り当て状況を確認できた。

無事に意図したネットワークを構築できた。これで気兼ねなくLXCコンテナをスクラップ&ビルドできる気がする。Proxmox内のIPAM機能でIPアドレスの割り当て状況が見られるのは便利。