proxmox 网络nat设置
在 Proxmox VE 中,如果你想给虚拟机配置 NAT 网络(即虚拟机能访问外网,但外网不能主动访问虚拟机),你需要:
✅ 两步完成 NAT 网络配置:
🧱 第一步:创建 NAT 用的 Linux Bridge(虚拟交换机)
假设你有主网卡是 eth0,你不希望直接桥接它,而是用主机做 SNAT。
编辑 Proxmox 主机的网络配置文件:
sudo nano /etc/network/interfaces
添加一个新的 NAT 网桥(示例中叫 vmbr1):
auto vmbr1
iface vmbr1 inet static
address 192.168.100.1
netmask 255.255.255.0
bridge_ports none
bridge_stp off
bridge_fd 0
这个桥不连接物理网卡,属于“孤岛网桥”,相当于 NAT 网络的内网网关。
然后重启网络:
ifreload -a # or systemctl restart networking
🌐 第二步:配置 NAT(使用 iptables)
执行以下命令将主机的网络 NAT 转发给 vmbr1:
# 启用 IP 转发
echo 1 > /proc/sys/net/ipv4/ip_forward
# 永久开启
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
# 设置 SNAT:让虚拟机访问外网通过主机地址转发
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o eth0 -j MASQUERADE
# 开启 FORWARD(确保转发生效)
iptables -A FORWARD -i vmbr1 -j ACCEPT
iptables -A FORWARD -o vmbr1 -j ACCEPT
💡
eth0是你的真实物理网卡名,请确认实际名称(ip a查看)
🖥 第三步:给虚拟机分配 IP,并连接 vmbr1
-
在 Proxmox Web 管理界面,编辑虚拟机 → “硬件” → “网络设备” → 修改为连接到
vmbr1 -
启动虚拟机,配置 IP,例如:
- IP:
192.168.100.10 - Gateway:
192.168.100.1 - DNS:
8.8.8.8
- IP:
✅ 验证
虚拟机中:
ping 8.8.8.8 # ✅ 通外网
ping www.google.com # ✅ 通 DNS
主机中:
iptables -t nat -L -n -v # 查看 NAT 规则是否生效
📦 可选:让 iptables 设置开机生效
使用 iptables-persistent:
sudo apt install iptables-persistent
sudo netfilter-persistent save
✅ 总结
| 步骤 | 操作 |
|---|---|
| 1️⃣ | 创建一个孤立虚拟桥 vmbr1,作为 NAT 子网 |
| 2️⃣ | 使用 iptables 做 SNAT 转发 |
| 3️⃣ | 虚拟机连接 vmbr1 并手动配置 IP、网关 |
| ✅ | 虚拟机能上网,但外部无法访问虚拟机(NAT) |
更新
是的,Proxmox 虚拟机使用 NAT 网络时,你完全可以在虚拟网桥上配置 DHCP 服务,让虚拟机自动获取 IP 地址(即 DHCP + NAT)。
✅ 实现目标:
让连接到 vmbr1 的虚拟机:
- 自动获取 IP(DHCP)
- 自动配置网关(Proxmox 主机 IP)
- 能访问互联网(通过主机 NAT)
✅ 步骤详解:
🧰 第一步:确保你已设置 vmbr1 网桥(孤立桥)
内容类似:
auto vmbr1
iface vmbr1 inet static
address 192.168.100.1
netmask 255.255.255.0
bridge_ports none
bridge_stp off
bridge_fd 0
🚀 第二步:安装并配置 dnsmasq 作为 DHCP 服务
Proxmox 主机上运行 DHCP 服务:
sudo apt update
sudo apt install dnsmasq
编辑配置文件(默认文件可能是空的):
sudo nano /etc/dnsmasq.d/vmbr1.conf
内容如下(请根据你的 vmbr1 地址修改):
interface=vmbr1 # 监听哪个接口
bind-interfaces
dhcp-range=192.168.100.100,192.168.100.200,12h
dhcp-option=3,192.168.100.1 # 网关 = Proxmox 主机地址
dhcp-option=6,8.8.8.8 # DNS
保存并重启:
sudo systemctl restart dnsmasq
🔥 第三步:确保 NAT 功能开启(iptables)
# 开启 IP 转发
echo 1 > /proc/sys/net/ipv4/ip_forward
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
# 添加 SNAT 规则(假设你的物理网卡是 eth0)
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o eth0 -j MASQUERADE
如前所述,可选使用 iptables-persistent 保持生效。
🖥 第四步:虚拟机设置
- 虚拟机 → 网络 → 网卡连接到
vmbr1 - 虚拟机内部配置为 DHCP 获取 IP(默认一般是 DHCP)
✅ 验证
在虚拟机中运行:
ip a # 查看是否拿到 192.168.100.X 的 IP
ip route # 网关应为 192.168.100.1
ping 8.8.8.8 # 测试外网连接
在主机中:
sudo tail -f /var/log/syslog | grep dnsmasq
# 查看是否有虚拟机 DHCP 请求记录
🎯 补充:你可以支持多个子网
你也可以配置多个 vmbr(如 vmbr2/vmbr3),给不同用途的 VM 分配不同的虚拟网络和 DHCP 池。
✅ 总结
| 功能 | 实现方式 |
|---|---|
| DHCP 自动分配 IP | dnsmasq + vmbr1 |
| NAT 转发外网 | iptables SNAT |
| 默认网关设置 | dhcp-option=3,... |
| DNS 设置 | dhcp-option=6,... |
一键脚本 proxmox主机端
#!/bin/bash
set -e
# === 基本配置 ===
VM_BRIDGE="vmbr1"
BRIDGE_IP="192.168.100.1"
BRIDGE_NET="192.168.100.0"
BRIDGE_MASK="255.255.255.0"
OUT_IFACE=$(ip route get 1 | awk '{print $5; exit}') # 自动识别出网网卡
echo "==> 使用出网网卡: $OUT_IFACE"
# === 1. 配置 vmbr1 网桥 ===
echo "==> 配置 vmbr1 网桥..."
cat <<EOF >> /etc/network/interfaces
auto $VM_BRIDGE
iface $VM_BRIDGE inet static
address $BRIDGE_IP
netmask $BRIDGE_MASK
bridge_ports none
bridge_stp off
bridge_fd 0
EOF
# === 2. 启用 IP 转发 ===
echo "==> 启用 IP 转发..."
sysctl -w net.ipv4.ip_forward=1
sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/' /etc/sysctl.conf
# === 3. 添加 iptables SNAT 规则 ===
echo "==> 添加 iptables SNAT 转换..."
iptables -t nat -A POSTROUTING -s ${BRIDGE_NET}/24 -o $OUT_IFACE -j MASQUERADE
# 永久保存规则(如果支持)
if command -v iptables-save &>/dev/null; then
iptables-save > /etc/iptables.rules
echo -e "\npre-up iptables-restore < /etc/iptables.rules" >> /etc/network/interfaces
fi
# === 4. 安装 dnsmasq ===
echo "==> 安装 dnsmasq DHCP 服务器..."
apt update
apt install -y dnsmasq
# === 5. 配置 dnsmasq ===
echo "==> 写入 dnsmasq 配置..."
mkdir -p /etc/dnsmasq.d
# 5.1 确保主配置启用了 conf-dir
if ! grep -q '^conf-dir=/etc/dnsmasq.d/' /etc/dnsmasq.conf; then
echo 'conf-dir=/etc/dnsmasq.d/,*.conf' >> /etc/dnsmasq.conf
fi
# 5.2 写入网桥专用配置
cat <<EOF > /etc/dnsmasq.d/$VM_BRIDGE.conf
interface=$VM_BRIDGE
bind-interfaces
dhcp-range=192.168.100.100,192.168.100.200,12h
dhcp-option=3,192.168.100.1
dhcp-option=6,8.8.8.8
EOF
# === 6. 重启网络和 dnsmasq ===
echo "==> 重启网络与 dnsmasq 服务..."
ifdown $VM_BRIDGE || true
ifup $VM_BRIDGE
systemctl restart dnsmasq
echo "✅ NAT + DHCP 配置完成!请将虚拟机网卡桥接到 $VM_BRIDGE 并启用 DHCP 获取 IP。"

浙公网安备 33010602011771号