Start typing to search across invoices, services, domains, tickets, and more...
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.
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
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.
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.
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
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
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
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.
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+.
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