Start typing to search across invoices, services, domains, tickets, and more...
専用サーバーのパブリックIPが足りない場合や、データベース・社内検証用・ビルド用など外部公開が不要な仮想マシンには、Proxmox VE の NAT ネットワークが便利です。物理NICに接続しない vmbr1 ブリッジをプライベートサブネットとして作成し、ホスト側の iptables MASQUERADE でVMの通信をホストのパブリックIPに集約、必要なポートだけ DNAT のポートフォワードで公開します。対象は Proxmox VE 7.x / 8.x(Debian ベース)で、ゲストOSは Debian/Ubuntu と CentOS/Rocky/AlmaLinux の例を掲載しています。
/etc/network/interfaces をバックアップし、デフォルトルートがどのブリッジを通っているか確認します。設定ミスでリモート接続が切れることがあるため、IPMI/KVM コンソールを用意するか、サポートにご相談ください。
cp /etc/network/interfaces /etc/network/interfaces.bak.$(date +%F)
ip -br addr
ip route | grep default
/etc/network/interfaces の末尾に以下を追記します。bridge-ports none は物理NICに接続しない内部専用スイッチを意味し、post-up で IPv4 転送を有効にして 10.10.10.0/24 から vmbr0 へ出る通信をマスカレードします。
auto vmbr1
iface vmbr1 inet static
address 10.10.10.1/24
bridge-ports none
bridge-stp off
bridge-fd 0
post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up iptables -t nat -A POSTROUTING -s '10.10.10.0/24' -o vmbr0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '10.10.10.0/24' -o vmbr0 -j MASQUERADE
設定を反映し、再起動後もIP転送が有効になるよう sysctl に書き込みます。
ifreload -a
echo 'net.ipv4.ip_forward=1' > /etc/sysctl.d/99-ip-forward.conf
sysctl --system
ip addr show vmbr1
iptables -t nat -S POSTROUTING
Web 管理画面の「ノード → システム → ネットワーク → 作成 → Linux Bridge」からも vmbr1 を追加できますが、MASQUERADE ルールはファイルに手動で追記する必要があります。
VM の「ハードウェア → ネットワークデバイス」でブリッジを vmbr1 に変更(または vmbr1 のNICを追加)し、ゲストOS内で 10.10.10.x の固定IPとゲートウェイ 10.10.10.1 を設定します。
# Debian (/etc/network/interfaces inside the VM)
auto ens18
iface ens18 inet static
address 10.10.10.101/24
gateway 10.10.10.1
dns-nameservers 1.1.1.1 8.8.8.8
# Ubuntu (/etc/netplan/50-nat.yaml, then: netplan apply)
network:
version: 2
ethernets:
ens18:
addresses: [10.10.10.102/24]
routes:
- to: default
via: 10.10.10.1
nameservers:
addresses: [1.1.1.1, 8.8.8.8]
# CentOS / Rocky / AlmaLinux 8/9
nmcli con mod ens18 ipv4.method manual ipv4.addresses 10.10.10.103/24 \
ipv4.gateway 10.10.10.1 ipv4.dns "1.1.1.1 8.8.8.8"
nmcli con up ens18
# test from the VM
ping -c 3 10.10.10.1
ping -c 3 1.1.1.1
1.1.1.1 に ping が通れば NAT による外部接続は成功です。IPには届くのに名前解決できない場合は DNS 設定を確認してください。
NAT 配下のVMには外部から直接アクセスできません。SSH やWebサイトを公開したい場合は、ホストに DNAT ルールを追加してパブリックIPのポートをVMへ転送します。
# public port 2201 -> VM 10.10.10.101:22 (SSH)
iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 2201 -j DNAT --to-destination 10.10.10.101:22
# public port 8080 -> VM 10.10.10.102:80 (HTTP)
iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 8080 -j DNAT --to-destination 10.10.10.102:80
iptables -t nat -L PREROUTING -n --line-numbers
コマンドで追加したルールは再起動で消えます。vmbr1 の post-up/post-down に記述する方法(ブリッジと同時に適用され管理しやすい)か、iptables-persistent で保存する方法のどちらかを選びます。対象VMで PVE ファイアウォールを有効にしている場合は、conntrack zone のルールも追加しないと NAT の戻りパケットが破棄されることがあります。
# Option A: add to the vmbr1 block in /etc/network/interfaces
post-up iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 2201 -j DNAT --to-destination 10.10.10.101:22
post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport 2201 -j DNAT --to-destination 10.10.10.101:22
# only if the Proxmox firewall is enabled on these VMs:
post-up iptables -t raw -I PREROUTING -i fwbr+ -j CT --zone 1
post-down iptables -t raw -D PREROUTING -i fwbr+ -j CT --zone 1
# Option B: save the current rules with iptables-persistent
apt update && apt install -y iptables-persistent
netfilter-persistent save
cat /etc/iptables/rules.v4
VM が多いと固定IPの手入力は手間です。ホストに dnsmasq を入れて vmbr1 のみで待ち受けさせ、ポート転送先のVMは dhcp-host でアドレスを固定します。
apt install -y dnsmasq
cat > /etc/dnsmasq.d/vmbr1.conf <<'EOF'
interface=vmbr1
bind-interfaces
except-interface=lo
dhcp-range=10.10.10.100,10.10.10.200,255.255.255.0,12h
dhcp-option=option:router,10.10.10.1
dhcp-option=option:dns-server,1.1.1.1,8.8.8.8
# fixed lease for one VM (MAC from: qm config 101 | grep net0)
dhcp-host=BC:24:11:AA:BB:CC,10.10.10.101
EOF
systemctl restart dnsmasq
systemctl status dnsmasq --no-pager
/proc/sys/net/ipv4/ip_forward が 1 か、iptables -t nat -S POSTROUTING に正しい出力インターフェースの MASQUERADE があるか、ホスト自体が外部に接続できるかを順に確認してください。
DNAT ルールの -i が vmbr0 になっているか、VM内のサービスが 127.0.0.1 ではなく 0.0.0.0 で待ち受けているか、ゲストのファイアウォールで許可しているか、PVE ファイアウォール使用時に fwbr+ の conntrack zone ルールがあるかを確認します。
できます。パブリックIPのVMは vmbr0、NAT のVMは vmbr1 を使い、1台のVMに両方のNICを付けることも可能です。パブリックIPを追加したい場合は IMIDC までお問い合わせください。
解決しない場合は、チケットから IMIDC の 24 時間 365 日テクニカルサポートへご連絡ください:https://www.imidc.com/submitticket.php