ESC

Start typing to search across invoices, services, domains, tickets, and more...

Search... Ctrl+K
Virtualización (Proxmox / KVM)

Cómo configurar NAT en Proxmox VE: vmbr1, MASQUERADE y port forwarding

6 pasos 16 min de lectura 6 vistas 0
Contenido

Cuando se queda sin IPs públicas en un servidor dedicado, o algunas máquinas virtuales (bases de datos, equipos de prueba internos, ejecutores de compilación) simplemente no necesitan una, la solución más limpia es una red NAT en Proxmox VE. Se crea un puente vmbr1 sin puerto físico como subred privada, el host enmascara el tráfico de las VMs tras su propia IP pública con iptables MASQUERADE y solo se publican los puertos necesarios mediante redirección de puertos con DNAT. Esta guía cubre Proxmox VE 7.x/8.x (basado en Debian), con ejemplos de invitados Debian/Ubuntu y CentOS/Rocky/AlmaLinux.

Suponemos que el puente público es vmbr0 (el predeterminado de Proxmox), que la subred privada es 10.10.10.0/24 y que la dirección privada del host es 10.10.10.1. Sustituya vmbr0 si su puente público tiene otro nombre. Para instalar Proxmox y asignar IPs públicas a las VMs, consulte las guías existentes del centro de ayuda «Instalar Proxmox VE» y «Asignar IPs a VMs de Proxmox».

Paso 1: Haga una copia de la configuración de red de Proxmox e identifique el puente público

Guarde una copia de /etc/network/interfaces y compruebe qué puente lleva la ruta predeterminada. Un error tipográfico en la configuración de red puede dejarle sin acceso remoto, así que tenga a mano el acceso por consola IPMI/KVM o pida ayuda al soporte.

cp /etc/network/interfaces /etc/network/interfaces.bak.$(date +%F)
ip -br addr
ip route | grep default

Paso 2: Cree el puente NAT vmbr1 con iptables MASQUERADE

Añada el bloque vmbr1 siguiente al final de /etc/network/interfaces. bridge-ports none lo convierte en un switch puramente interno; las líneas post-up activan el reenvío IPv4 y enmascaran el tráfico de 10.10.10.0/24 que sale por 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

Aplique la configuración y haga permanente el reenvío de IP mediante 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

También puede añadir vmbr1 en la interfaz web en Node → System → Network → Create → Linux Bridge, pero las reglas MASQUERADE se tienen que añadir igualmente a mano en el archivo.

Paso 3: Conecte las VMs a la red NAT y asigne IPs privadas

En Hardware → Network Device de la VM, cambie el puente a vmbr1 (o añada una segunda NIC en vmbr1). Dentro del invitado, configure una dirección estática 10.10.10.x con 10.10.10.1 como puerta de enlace:

# 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

Si 1.1.1.1 responde, el NAT de salida funciona. Si las IPs responden pero los nombres de host no se resuelven, revise la configuración DNS.

Paso 4: Redirección de puertos con DNAT para exponer servicios de la VM

Por defecto, los invitados en NAT no son accesibles desde el exterior. Para permitir SSH o publicar un sitio web, añada en el host reglas DNAT que redirijan un puerto de la IP pública a la 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
Nunca redirija puertos que use el propio host (22, 8006, etc.), o perderá el acceso al host o a la interfaz web de Proxmox. Si el host ejecuta un firewall, permita también allí los puertos redirigidos.

Paso 5: Haga persistentes las reglas de redirección de puertos de iptables

Las reglas introducidas en la línea de comandos desaparecen tras un reinicio. Elija un método: póngalas en las líneas post-up/post-down de vmbr1 (se crean y eliminan con el puente, que es lo más ordenado), o instale iptables-persistent y guarde las reglas en ejecución. Si el firewall de Proxmox está activado en estas VMs, añada también la regla de zona conntrack; de lo contrario, las respuestas NAT pueden descartarse.

# 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

Paso 6 (opcional): DHCP para la subred NAT con dnsmasq

Con muchas VMs, escribir IPs estáticas resulta tedioso. Instale dnsmasq en el host, vincúlelo solo a vmbr1 y fije direcciones con dhcp-host para las VMs que tengan redirecciones de puertos:

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
Como dnsmasq está vinculado solo a vmbr1, nunca responde a DHCP en el lado público y no interferirá con la red del centro de datos.

Preguntas frecuentes

La VM puede hacer ping a 10.10.10.1 pero no tiene acceso a internet

Compruebe que /proc/sys/net/ipv4/ip_forward vale 1, que iptables -t nat -S POSTROUTING muestra la regla MASQUERADE con la interfaz de salida correcta y que el propio host tiene acceso a internet.

La redirección de puertos no funciona desde fuera

Asegúrese de que la regla DNAT usa -i vmbr0, de que el servicio dentro de la VM escucha en 0.0.0.0 y no en 127.0.0.1, de que el firewall del invitado permite el puerto y, si el firewall de Proxmox está activado, de que existe la regla de zona conntrack de fwbr+.

¿Pueden convivir VMs con NAT y VMs con IP pública?

Sí. Las VMs con IP pública se quedan en vmbr0, las VMs con NAT usan vmbr1, e incluso una misma VM puede tener una NIC en cada uno. Si necesita más IPs públicas, contacte con el equipo de ventas de IMIDC para añadir un bloque de IPs.

¿Sigue con problemas? Abra un ticket con el soporte técnico 24/7 de IMIDC: https://www.imidc.com/submitticket.php

¿Fue útil la respuesta?

Tutoriales relacionados