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

  1. 在 Proxmox Web 管理界面,编辑虚拟机 → “硬件” → “网络设备” → 修改为连接到 vmbr1

  2. 启动虚拟机,配置 IP,例如:

    • IP: 192.168.100.10
    • Gateway: 192.168.100.1
    • DNS: 8.8.8.8

✅ 验证

虚拟机中:

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 保持生效。


🖥 第四步:虚拟机设置

  1. 虚拟机 → 网络 → 网卡连接到 vmbr1
  2. 虚拟机内部配置为 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。"

posted @ 2025-06-24 10:52  学不会xuebuhui  阅读(374)  评论(0)    收藏  举报
Language: javascript //图片预览