Большинство проблем с VPS на хост-ноде Proxmox VE — сетевые: виртуальные машины не видят шлюз, дополнительная /24 работает на хосте, но не в VM, или IPv6 так и не отвечает. Решение зависит от того, как провайдер выдаёт IP-адреса. В статье разобраны две распространённые схемы — мост (bridged, on-link) и маршрутизация (routed), для каждой приведён соответствующий /etc/network/interfaces, а также рассмотрены IP с привязкой к MAC, дополнительные блоки /24, подсети IPv6, проверка и диагностика.
/etc/network/interfaces перед правкой и применяйте изменения командой ifreload -a, пока у вас есть доступ к консоли.| Схема выдачи | Как это выглядит | Как подключаются VM |
|---|---|---|
| Мост / on-link | У блока есть собственный шлюз внутри блока (например, 203.0.113.1 для 203.0.113.0/24) в той же сети, что и ваш сервер | VM на vmbr0 используют шлюз провайдера напрямую |
| Маршрутизация (routed) | Провайдер маршрутизирует блок на основной IP вашего сервера; шлюза внутри блока нет | Хост становится маршрутизатором; VM используют хост как шлюз |
| Привязка к MAC | Отправлять трафик с этих IP может только собственный MAC сервера (или зарегистрированные виртуальные MAC) | Маршрутизируемая схема на хосте или по одному зарегистрированному виртуальному MAC на каждую VM |
В данных о выдаче сервера указан каждый блок IP со шлюзом и маской. Если там не сказано, маршрутизируется блок или выдан on-link, уточните у поддержки до начала настройки: попытки угадать стоят часов работы.
Физическая сетевая карта становится портом vmbr0, а собственный IP хоста переносится на мост. VM, подключённые к vmbr0, находятся в сети провайдера как отдельные серверы.
# /etc/network/interfaces (main IP 198.51.100.10/24, gateway 198.51.100.1)
auto lo
iface lo inet loopback
iface eno1 inet manual
auto vmbr0
iface vmbr0 inet static
address 198.51.100.10/24
gateway 198.51.100.1
bridge-ports eno1
bridge-stp off
bridge-fd 0
Дополнительный блок, выданный on-link (например, 203.0.113.0/24 со шлюзом 203.0.113.1), не требует изменений на хосте: настройте VM на vmbr0 с адресом из блока и шлюзом этого блока, например ip=203.0.113.11/24,gw=203.0.113.1.
Когда провайдер маршрутизирует 203.0.113.0/24 на ваш основной IP, поместите блок на внутренний мост, не подключённый ни к одной физической сетевой карте, назначьте хосту первый адрес блока в качестве шлюза для VM и включите форвардинг.
# /etc/network/interfaces (vmbr0 as in Step 2, plus:)
auto vmbr1
iface vmbr1 inet static
address 203.0.113.1/24
bridge-ports none
bridge-stp off
bridge-fd 0
echo 'net.ipv4.ip_forward = 1' > /etc/sysctl.d/80-forward.conf
sysctl --system
ifreload -a
VM подключаются к vmbr1 и используют адреса 203.0.113.2–254 со шлюзом 203.0.113.1. Поскольку хост занимает .1, а адреса сети и broadcast остаются зарезервированными, маршрутизируемая /24 даёт 253 адреса для VM. Трафик уходит через основной интерфейс хоста с собственными IP виртуальных машин в качестве адреса источника; NAT не используется.
Некоторые сети принимают трафик для ваших IP только с собственного MAC-адреса сервера. У каждой VM в режиме моста свой MAC, поэтому её пакеты отбрасываются, и кажется, что у неё «нет сети», хотя конфигурация выглядит правильной. Есть два решения:
qm set 101 --net0 virtio=02:00:00:AA:BB:CC,bridge=vmbr0.Если подсеть IPv6 (например, /64 или /56) маршрутизируется на ваш хост, работайте с ней так же, как с маршрутизируемым блоком IPv4 из шага 3: назначьте адрес из подсети на vmbr1, включите форвардинг IPv6 и используйте этот адрес как шлюз для VM.
# /etc/network/interfaces: add an IPv6 stanza to vmbr1
iface vmbr1 inet6 static
address 2001:db8:200::1/64
echo 'net.ipv6.conf.all.forwarding = 1' > /etc/sysctl.d/81-ipv6-forward.conf
sysctl --system
ifreload -a
# VM configuration (cloud-init)
qm set 101 --ipconfig0 ip=203.0.113.11/24,gw=203.0.113.1,ip6=2001:db8:200::11/64,gw6=2001:db8:200::1
Учтите, что при включённом форвардинге Linux игнорирует router advertisements на аплинке, поэтому собственный маршрут IPv6 по умолчанию для хоста нужно задать статически на vmbr0 (секция iface vmbr0 inet6 static с address и gateway).
Если же ваша единственная /64 выдана on-link на аплинке (маршрутизатор провайдера ожидает найти каждый адрес напрямую через neighbour discovery), VM на отдельном мосту будут недоступны, пока хост не начнёт отвечать на neighbour discovery вместо них (NDP proxy, например с помощью ndppd) и маршрутизация не будет аккуратно скорректирована. Проще и надёжнее попросить у провайдера подсеть, маршрутизируемую на ваш хост; поддержка IMIDC подскажет, какой вариант доступен для вашего сервера.
cp /etc/network/interfaces /root/interfaces.bak.$(date +%F)
ifreload -a
ip -br addr # addresses on vmbr0 / vmbr1
ip route # default route via the provider's gateway
bridge link # which ports and VM taps belong to which bridge
# Watch ARP and traffic for one VM address while it pings out
tcpdump -ni vmbr0 host 203.0.113.11
# From inside the VM
ping -c3 203.0.113.1 # gateway
ping -c3 1.1.1.1 # internet
ping -c3 google.com # DNS
Если VM видит шлюз, но не выходит в интернет, её трафик отбрасывается выше по сети (привязка к MAC, отсутствующий маршрут или неверная маска). Если VM не видит даже шлюз, проверьте мост, IP и префикс VM, а также разрешает ли этот адрес IP filter файрвола Proxmox.
То, что соответствует схеме выдачи у провайдера. Мост проще всего, когда у блока есть собственный шлюз on-link. Маршрутизация обязательна, когда блок маршрутизируется на ваш основной IP, и это надёжный выбор, когда IP привязаны к MAC.
Да. Держите VM с публичными IP на vmbr0 или vmbr1, а VM за NAT — на отдельном приватном мосту, как описано в статье NAT-сеть в Proxmox VE.
Это зависит от локации и сервера. Шлюз и маска указаны в данных о выдаче; если что-то неясно, создайте тикет — мы подтвердим схему и поможем с настройкой.
Если проблема не решена, создайте тикет — техническая поддержка IMIDC работает 24/7. Укажите IP хост-сервера, ваши блоки IP, содержимое /etc/network/interfaces и вывод ip -br addr и ip route, чтобы мы быстрее нашли причину.