Start typing to search across invoices, services, domains, tickets, and more...
Если на выделенном сервере не хватает публичных IP или некоторым виртуальным машинам (БД, тестовые стенды, сборочные агенты) внешний адрес вообще не нужен, удобнее всего настроить NAT-сеть в Proxmox VE. Создаём мост vmbr1 без физического порта как приватную подсеть, хост маскирует трафик ВМ за своим публичным IP через iptables MASQUERADE, а нужные порты публикуем пробросом DNAT. Инструкция для Proxmox VE 7.x/8.x (на базе Debian), примеры для гостевых 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
Добавьте блок vmbr1 в конец /etc/network/interfaces. bridge-ports none делает его чисто внутренним коммутатором; строки 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
Примените настройки и закрепите пересылку пакетов через 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
Мост vmbr1 можно создать и в веб-интерфейсе (Узел → Система → Сеть → Создать → Linux Bridge), но правила MASQUERADE всё равно придётся дописать в файл вручную.
В разделе «Оборудование → Сетевое устройство» смените мост на vmbr1 (или добавьте вторую карту на vmbr1). В гостевой системе задайте статический адрес 10.10.10.x и шлюз 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 отвечает, исходящий NAT работает. Если IP пингуются, а имена не резолвятся — проверьте DNS.
Снаружи ВМ за NAT недоступны. Чтобы открыть SSH или сайт, добавьте на хосте правила DNAT, перенаправляющие порт публичного IP на ВМ:
# 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
Правила, введённые в консоли, пропадают после перезагрузки. Выберите один способ: прописать их в post-up/post-down моста vmbr1 (самый аккуратный вариант) или установить iptables-persistent и сохранить текущие правила. Если для этих ВМ включён файрвол Proxmox, добавьте правило 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
Когда ВМ много, прописывать статические адреса утомительно. Установите на хост dnsmasq, привяжите его только к vmbr1 и закрепите адреса через 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, сервис в ВМ слушает 0.0.0.0, а не 127.0.0.1, гостевой файрвол пропускает порт, а при включённом файрволе Proxmox добавлено правило conntrack zone для fwbr+.
Да. ВМ с публичными адресами остаются на vmbr0, NAT-ВМ — на vmbr1, а одной ВМ можно дать по карте в каждой сети. Если нужны дополнительные публичные IP, обратитесь в IMIDC.
Если проблема не решена, создайте тикет в круглосуточную техподдержку IMIDC: https://www.imidc.com/submitticket.php