Установка Proxmox VE 9 на Debian 13 у хостинг-провайдера
Ставим Proxmox VE 9 поверх образа Debian 13 от провайдера: репозиторий, ядро, мост vmbr0 с NAT на одном IP. Плюс проверки cloud-init и сети, чтобы сервер пережил перезагрузку.
Как установить Proxmox VE 9 на Debian 13: короткий ответ
Установка Proxmox VE 9 на Debian 13 «Trixie» состоит из шести шагов: правильная строка в /etc/hosts, репозиторий Proxmox, apt full-upgrade, ядро Proxmox с перезагрузкой, пакет proxmox-ve и удаление ядра Debian. Порядок шагов взят со страницы вики Proxmox «Install Proxmox VE on Debian 13 Trixie», прочитанной 5 октября 2026 года. На своём железе этого хватает. На арендованном сервере ломается другое: cloud-init переписывает /etc/hosts при загрузке, а сетью после установки управляет уже не та программа, что раньше.
Поэтому порядок в статье такой. Сначала проверки, которые вы делаете на чистом образе. Потом установка по вики. Потом сеть для виртуальных машин, когда у сервера один публичный IP.
Когда ставить Proxmox поверх Debian, а не с ISO
Proxmox рекомендует ставить систему с собственного ISO-образа. Многие провайдеры не дают загрузить свой ISO: вы получаете готовый образ Debian 13 и консоль в панели. Так бывает и с VPS, и с выделенными серверами. Тогда путь один: превратить этот Debian в Proxmox VE. Результат тот же Proxmox VE 9, с теми же пакетами из того же репозитория.
Если вы ещё выбираете между своим гипервизором и обычными виртуальными машинами у провайдера, сначала прочитайте, чем Proxmox на своём сервере отличается от обычного VPS. Эта статья для тех, кто уже решил.
Все команды ниже выполняются от root. В облачном образе Debian войдите своим пользователем и выполните sudo -i.
Перед началом: откройте консоль провайдера
Установка меняет ядро и сетевой стек, и сервер перезагружается минимум один раз. Если после перезагрузки сеть не поднимется, SSH пропадёт. Вернуть доступ можно только через внеполосную консоль: VNC-консоль в панели VPS, IPMI или iKVM на выделенном сервере. Перед каждой перезагрузкой откройте её в соседней вкладке и убедитесь, что видите приглашение входа.
В консоль входят по паролю, а в облачных образах Debian у root пароля часто нет. Проверьте:
passwd -S rootБуква L во втором поле означает, что пароль заблокирован. Буква P означает, что он задан. Если пароля нет, задайте его командой passwd root. Этот же пароль понадобится для входа в веб-интерфейс Proxmox.
Есть ли на сервере аппаратная виртуализация
Proxmox запускает гостей двух видов. Виртуальным машинам KVM (kernel-based virtual machine) нужна аппаратная виртуализация процессора: Intel VT-x или AMD-V. Контейнеры LXC (Linux Containers) используют ядро хоста и работают без неё.
На выделенном сервере эти расширения обычно есть, иногда их надо включить в BIOS. На VPS ваш сервер сам является виртуальной машиной. Расширения доходят до него, только если гипервизор провайдера их передаёт. Это называется вложенной виртуализацией. Проверьте:
systemd-detect-virt
grep -cE 'vmx|svm' /proc/cpuinfo
ls -l /dev/kvmsystemd-detect-virt печатает none на железе и kvm внутри виртуальной машины KVM. Если он печатает lxc или openvz, остановитесь. Это контейнер: своё ядро в нём поставить нельзя, поэтому Proxmox не установится. Разница между этими типами разобрана в статье чем KVM отличается от Xen и LXC на VPS.
Ненулевое число от grep означает, что процессор показывает флаг vmx (Intel) или svm (AMD). Файл /dev/kvm существует, когда загружен модуль kvm_intel или kvm_amd. Если grep печатает 0, виртуальные машины KVM не запустятся, а контейнеры LXC запустятся. Как устроена вложенная виртуализация на VPS и чего от неё ждать по скорости, разобрано отдельно. Включена ли она на вашем тарифе, решает провайдер, поэтому спросите его напрямую.
Проверка 1: переписывает ли cloud-init файл /etc/hosts
Proxmox требует, чтобы имя хоста разрешалось в настоящий IP-адрес сервера. Адрес 127.0.0.1 или 127.0.1.1 не подходит. От этого зависит служба pve-cluster, которая хранит конфигурацию Proxmox. Вики прямо связывает сообщение ipcc_send_rec[1] failed: Connection refused с неправильным /etc/hosts.
Многие провайдеры готовят образ через cloud-init. Это служба, которая при загрузке применяет настройки из панели провайдера: имя хоста, ключи SSH, пароль и сеть. Подробно о ней написано в статье как cloud-init настраивает новый VPS при первой загрузке. Если в её настройках включён manage_etc_hosts, она собирает /etc/hosts из шаблона при каждой загрузке. Ваша правка тогда живёт только до перезагрузки. Проверьте:
dpkg -l cloud-init | grep ^ii
head -n 5 /etc/hosts
grep -rn 'manage_etc_hosts\|preserve_hostname' /etc/cloud/Файл переписывается, если cloud-init установлен и /etc/hosts начинается с комментария про manage_etc_hosts. Значение manage_etc_hosts: localhost ещё хуже: оно привязывает имя хоста к 127.0.1.1, а это та самая запись, на которой падает pve-cluster. Отключите это поведение отдельным файлом:
cat > /etc/cloud/cloud.cfg.d/99-proxmox.cfg << EOL
manage_etc_hosts: false
preserve_hostname: true
EOLpreserve_hostname: true запрещает cloud-init менять имя хоста при загрузке. Учтите одну оговорку. Провайдер может передавать эти параметры в user-data, и тогда его значение может оказаться сильнее локального файла. Что именно он передаёт, покажет cloud-init query userdata. Надёжная проверка одна: после первой перезагрузки снова откройте /etc/hosts и убедитесь, что ваша строка на месте.
Проверка 2: какая программа управляет сетью
Proxmox читает и пишет сетевые настройки только в файле /etc/network/interfaces, а применяет их через ifupdown2. Пакет proxmox-ve подтягивает ifupdown2 как зависимость. Образы провайдеров настраивают сеть по-разному: классический ifupdown с файлами в /etc/network/interfaces.d/, netplan с systemd-networkd или NetworkManager. Узнайте, что стоит у вас:
systemctl is-active networking systemd-networkd NetworkManager
ls /etc/network/interfaces.d/ /etc/netplan/ 2>/dev/null
ip -br addr
ip route show default
cat /etc/resolv.confПервая команда печатает по строке на каждую службу: active или inactive. Сохраните вывод последних трёх команд у себя на компьютере. Там ваш адрес, маска, шлюз, имя интерфейса и DNS-серверы. Они понадобятся, если сеть придётся поднимать руками из консоли.
Как читать результат:
- Активна
networking, а/etc/netplan/пуст. Это классический ifupdown. ifupdown2 читает те же файлы, поэтому это самый спокойный случай. Проверьте только, что в/etc/network/interfacesесть строкаsource /etc/network/interfaces.d/*, иначе файл, который туда положил cloud-init, никто не прочитает. - Активна
systemd-networkd, а в/etc/netplan/лежат файлы.yaml. Сеть поднимает netplan. После установки она продолжит подниматься, но Proxmox её не видит, потому что настроек нет в/etc/network/interfaces. Если создать в веб-интерфейсе мост поверх того же сетевого адаптера, адаптер будут настраивать две программы сразу. Настройку надо перенести, как показано в разделе про сеть ниже. - Активна
NetworkManager. На серверных образах это редкость. Proxmox с ним не работает, поэтому настройки тоже переносятся в/etc/network/interfaces, а NetworkManager отключается.
Шаг 1: имя хоста и запись в /etc/hosts
Задайте короткое имя и впишите его в /etc/hosts вместе с публичным адресом. В примерах ниже адрес 203.0.113.10 и имя pve1.example.com. Это адреса из документации, подставьте свои из вывода ip -br addr. Нужен адрес, который реально стоит на сетевом интерфейсе.
hostnamectl set-hostname pve1Файл /etc/hosts должен выглядеть так:
127.0.0.1 localhost
203.0.113.10 pve1.example.com pve1
::1 localhost ip6-localhost ip6-loopbackСтроку с 127.0.1.1 из стандартного файла Debian удалите. Проверка:
hostname --ip-addressКоманда должна напечатать 203.0.113.10 и ничего больше. Если в выводе есть 127.0.1.1, эта строка всё ещё осталась в файле.
Шаг 2: репозиторий Proxmox VE 9 в формате deb822
Репозиторий описывается в формате deb822: файл .sources с блоком полей вместо одной строки deb .... Ключ подписи для Trixie скачивается отдельно, и его контрольную сумму надо сверить.
apt update && apt install -y wget
cat > /etc/apt/sources.list.d/pve-install-repo.sources << EOL
Types: deb
URIs: http://download.proxmox.com/debian/pve
Suites: trixie
Components: pve-no-subscription
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
EOL
wget https://enterprise.proxmox.com/debian/proxmox-archive-keyring-trixie.gpg -O /usr/share/keyrings/proxmox-archive-keyring.gpg
sha256sum /usr/share/keyrings/proxmox-archive-keyring.gpgСумма должна совпасть с той, что указана в вики на момент чтения:
136673be77aba35dcce385b28737689ad64fd785a797e57897589aed08db6e45 /usr/share/keyrings/proxmox-archive-keyring.gpgЕсли сумма другая, не продолжайте. Скачайте ключ заново и сверьте сумму с текущей версией вики.
Адрес репозитория начинается с http://, и это нормально. apt проверяет подпись списка пакетов ключом из Signed-By, а в подписанном списке есть хеш каждого пакета. Поэтому подменить пакет по дороге нельзя, даже без TLS (transport layer security).
Репозиторий pve-no-subscription бесплатный. Пакеты в него попадают раньше, чем в платный pve-enterprise, и проходят меньше проверки. Для домашней лаборатории и небольших проектов его используют чаще всего.
Шаг 3: full-upgrade и ядро Proxmox
apt update && apt full-upgrade
apt install proxmox-default-kernelВики объясняет, зачем ядро ставится первым: часть пакетов Proxmox рассчитывает на определённые параметры сборки ядра, например для AppArmor. Пакет proxmox-default-kernel приходит из репозитория Proxmox и тянет текущую ветку ядра Proxmox. Debian 13 работает на ядре 6.12. Proxmox VE 9.0 вышел с ядром 6.14, а поздние выпуски 9.x переходили на более новые ветки.
Перед перезагрузкой откройте консоль провайдера и ещё раз посмотрите на /etc/hosts. Затем:
systemctl rebootПосле загрузки проверьте три вещи:
uname -r
cat /etc/hosts
hostname --ip-addressuname -r должен заканчиваться на -pve. Если там осталось -amd64 или -cloud-amd64, загрузчик выбрал старое ядро. Посмотрите меню GRUB в консоли провайдера. /etc/hosts должен содержать вашу строку с публичным адресом. Если cloud-init его переписал, вернитесь к проверке 1.
Если ядро не грузится с ошибкой bad shim signature, на сервере включена Secure Boot. Вики советует её отключить. На выделенном сервере это делается в настройках UEFI, на VPS спросите провайдера.
Шаг 4: пакеты proxmox-ve, postfix, open-iscsi и chrony
Сначала посмотрите, что apt собирается удалить. Ключ -s только симулирует установку и ничего не меняет:
apt-get -s install proxmox-ve postfix open-iscsi chrony | grep '^Remv'Если в системе стоит systemd-timesyncd, он будет в списке, потому что chrony его заменяет. Если в списке есть ifupdown, его заменит ifupdown2. Из проверки 2 вы уже знаете, что это значит для вашего образа. Теперь установка:
apt install proxmox-ve postfix open-iscsi chronyПакеты приходят из двух мест. proxmox-ve и всё, что он тянет за собой (pve-manager, pve-cluster, qemu-server, pve-container), приходит из репозитория Proxmox. postfix, open-iscsi и chrony приходят из Debian. Происхождение любого пакета покажет apt-cache policy: например, apt-cache policy ifupdown2 печатает адрес репозитория рядом с установленной версией.
Установщик postfix задаст вопрос о типе почтовой системы. Если у вас есть свой почтовый сервер, выберите «Satellite system» и укажите его как relay host. Если не знаете, что выбрать, выберите «Local only» и оставьте имя системы как есть. Так советует вики.
Проверьте результат:
pveversion
systemctl is-active pve-cluster pvedaemon pveproxy
ss -tlnp | grep 8006
chronyc trackingpveversion печатает строку вида pve-manager/9.x.y/.... Все три службы должны быть active. ss должен показать процесс pveproxy на порту 8006. В выводе chronyc tracking строка Leap status должна быть Normal.
Шаг 5: удалить ядро Debian и os-prober
Сначала посмотрите, какие ядра установлены. В облачных образах ядро Debian часто называется linux-image-cloud-amd64, а не linux-image-amd64.
dpkg -l 'linux-image*' | grep ^ii
apt remove linux-image-amd64 'linux-image-6.12*'
update-grub
apt remove os-proberШаблон 'linux-image-6.12*' захватывает версионные пакеты ядра Debian, в том числе облачные. Перед тем как ответить Y, прочитайте список на удаление. В нём не должно быть пакетов с pve или proxmox-kernel в имени. update-grub не нужен, если сервер грузится через systemd-boot.
os-prober удаляется по конкретной причине. Он сканирует все разделы, чтобы добавить в GRUB другие операционные системы. Среди этих разделов окажутся диски ваших виртуальных машин, и их системы попадут в меню загрузки хоста.
Сеть для гостей: мост vmbr0 с NAT на одном публичном IP
Вики предлагает создать мост vmbr0 и добавить в него первый сетевой интерфейс. Тогда гости выходят прямо в сеть провайдера, и каждому нужен свой публичный адрес. На арендованном сервере это часто не работает. Провайдер выдал один IP, а коммутатор провайдера может пропускать кадры только с MAC-адреса вашего сервера. Есть ли у вас дополнительные адреса и как к ним привязаны MAC-адреса, спросите у провайдера.
С одним адресом используйте схему из документации Proxmox «Masquerading (NAT) with iptables». Мост vmbr0 не содержит физических портов. На нём частная сеть 10.10.10.0/24, сервер в ней работает шлюзом 10.10.10.1, а трафик гостей уходит наружу через NAT (network address translation) с адресом сервера.
Сначала проверьте, что iptables есть:
command -v iptables || apt install iptablesСохраните копию текущего файла /etc/network/interfaces:
cp /etc/network/interfaces /root/interfaces.bakЗатем запишите в него новую конфигурацию. Имя ens3, адрес и шлюз замените своими из сохранённого вывода ip -br addr и ip route show default:
auto lo
iface lo inet loopback
auto ens3
iface ens3 inet static
address 203.0.113.10/24
gateway 203.0.113.1
auto vmbr0
iface vmbr0 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 ens3 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '10.10.10.0/24' -o ens3 -j MASQUERADE
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Если провайдер раздаёт адрес по DHCP, замените блок ens3 на iface ens3 inet dhcp. Если шлюз из ip route show default лежит вне вашей подсети, у провайдера нестандартная маршрутизация. В этом случае перенесите его настройку как есть и не упрощайте её. Две строки с --zone 1 взяты из той же документации. Они нужны, когда включён файрвол Proxmox: без них файрвол может отбрасывать исходящие соединения гостей.
Теперь уберите старый источник настроек, иначе один интерфейс будут настраивать две программы:
- Если сеть поднимал netplan, перенесите его файлы из
/etc/netplan/в/root/и выполнитеsystemctl disable systemd-networkd.service systemd-networkd.socket. - Если настройки лежали в
/etc/network/interfaces.d/, перенесите оттуда файл cloud-init (например50-cloud-init), чтобы адрес не описывался дважды. - Если стоит cloud-init, запретите ему снова генерировать сеть. Создайте файл
/etc/cloud/cloud.cfg.d/99-disable-network-config.cfgс одной строкойnetwork: {config: disabled}.
Примените настройки и проверьте:
ifreload -a
ip -br addr show vmbr0
sysctl net.ipv4.ip_forward
iptables -t nat -S POSTROUTINGvmbr0 должен иметь адрес 10.10.10.1/24. net.ipv4.ip_forward должен быть равен 1. В выводе iptables должно быть правило с MASQUERADE и вашим интерфейсом. Затем откройте консоль провайдера и перезагрузите сервер. Только после перезагрузки вы знаете, что сеть поднимается без вас.
Гостю задайте адрес из 10.10.10.0/24, например 10.10.10.2/24, шлюз 10.10.10.1 и любой публичный DNS-сервер. В контейнере LXC это поля IPv4/CIDR и Gateway в настройках сети. Внутри гостя ping -c 3 1.1.1.1 должен получить ответы. Если ответов нет, а правило MASQUERADE есть, проверьте имя интерфейса после -o: правило с чужим именем не совпадает ни с одним пакетом.
Снаружи гость недоступен, потому что у него частный адрес. Чтобы открыть, например, SSH гостя на порту 2222 сервера, добавьте в блок vmbr0 пару строк DNAT:
post-up iptables -t nat -A PREROUTING -i ens3 -p tcp --dport 2222 -j DNAT --to-destination 10.10.10.2:22
post-down iptables -t nat -D PREROUTING -i ens3 -p tcp --dport 2222 -j DNAT --to-destination 10.10.10.2:22Если внутри гостей вы сами хотите запускать виртуальные машины, понадобится ещё один уровень. Как включить вложенную виртуализацию в самом Proxmox, описано отдельно.
Как закрыть веб-интерфейс Proxmox на порту 8006
Служба pveproxy слушает порт 8006 на всех адресах. На арендованном сервере это значит, что страница входа под root видна всему интернету. Держите её закрытой.
Самый простой способ: SSH-туннель. На своём компьютере выполните:
ssh -L 8006:127.0.0.1:8006 user@203.0.113.10Пока сессия открыта, адрес https://127.0.0.1:8006 в браузере ведёт на веб-интерфейс сервера. Браузер предупредит о самоподписанном сертификате, это ожидаемо. При первом входе выберите область «Linux PAM standard authentication» и пользователя root.
Затем разрешите pveproxy принимать запросы только с нужных адресов. Создайте файл /etc/default/pveproxy:
ALLOW_FROM="127.0.0.1,100.64.0.0/10"
DENY_FROM="all"
POLICY="allow"systemctl restart pveproxy127.0.0.1 пропускает SSH-туннель. Диапазон 100.64.0.0/10 нужен, только если вы заходите через tailnet (частную сеть Tailscale), потому что Tailscale выдаёт адреса из него. Если tailnet нет, уберите этот диапазон. Проверьте с другой машины: открытие https://203.0.113.10:8006 больше не должно показывать страницу входа. Учтите, что порт при этом остаётся открытым на уровне TCP. Чтобы закрыть его полностью, добавьте правило в файрвол Proxmox или в сетевой файрвол провайдера.
Окно «No valid subscription» и два репозитория
При входе в веб-интерфейс Proxmox показывает окно о том, что подписки нет. Это напоминание. Все функции работают и без подписки. Подписка даёт доступ к репозиторию pve-enterprise и техническую поддержку. Если вы купите подписку, вики советует загрузить ключ в веб-интерфейсе и удалить файл /etc/apt/sources.list.d/pve-install-repo.sources.
Если apt update печатает ошибку 401 Unauthorized для адреса enterprise.proxmox.com, в системе подключён платный репозиторий без ключа. Посмотрите ls /etc/apt/sources.list.d/ и отключите лишний файл.
Что ломается на арендованном сервере и как это выглядит
Сообщение ipcc_send_rec[1] failed: Connection refused. Команды pvesh и qm и сам веб-интерфейс не могут достучаться до pve-cluster. Проверьте hostname --ip-address и systemctl status pve-cluster. Почти всегда имя хоста снова указывает на 127.0.1.1, потому что cloud-init переписал /etc/hosts при загрузке.
После перезагрузки нет сети. Войдите через консоль провайдера. ip -br addr покажет, есть ли адрес на интерфейсе. journalctl -b -u networking покажет ошибки ifupdown2. Частая причина: интерфейс в /etc/network/interfaces назван не так, как в системе, или адрес описан дважды (в основном файле и в interfaces.d). Копия старого файла лежит в /root/interfaces.bak.
Виртуальная машина не стартует. Задача завершается с ошибкой KVM virtualisation configured, but not available. Значит, /dev/kvm нет, и до сервера не дошла аппаратная виртуализация. Можно выключить KVM для этой машины командой qm set 100 --kvm 0, но тогда процессор эмулируется программно и работает в разы медленнее. Обычно лучше перенести задачу в контейнер LXC.
Гости не выходят в интернет. Гость пингует 10.10.10.1, но не 1.1.1.1. Проверьте sysctl net.ipv4.ip_forward и счётчики iptables -t nat -L POSTROUTING -n -v во время пинга. Ноль пакетов на правиле MASQUERADE означает, что имя интерфейса после -o неверное.
Ядро не грузится. Ошибка bad shim signature означает, что включена Secure Boot. Отключите её или попросите провайдера.
FAQ
Можно ли поставить Proxmox VE 9 на VPS без вложенной виртуализации?
Да, если VPS работает на KVM, а не в контейнере. Без вложенной виртуализации на нём будут работать контейнеры LXC, потому что они используют ядро хоста. Виртуальные машины KVM без /dev/kvm не стартуют и пишут ошибку KVM virtualisation configured, but not available. Проверьте заранее командами systemd-detect-virt и grep -cE 'vmx|svm' /proc/cpuinfo.
Почему после перезагрузки Proxmox пишет ipcc_send_rec[1] failed?
Служба pve-cluster не запустилась, потому что имя хоста не разрешается в настоящий IP-адрес сервера. На арендованных серверах причина обычно в cloud-init: при загрузке он заново собирает /etc/hosts и может привязать имя к 127.0.1.1. Поставьте manage_etc_hosts: false в файле внутри /etc/cloud/cloud.cfg.d/, верните строку с публичным адресом и проверьте hostname --ip-address.
Почему нельзя просто добавить публичный интерфейс в мост vmbr0?
Тогда каждому гостю нужен свой публичный адрес, а провайдер часто выдаёт один. Кроме того, сеть провайдера может пропускать кадры только с MAC-адреса вашего сервера, и гости с другими MAC-адресами останутся без связи. С одним адресом используйте мост без физических портов и NAT через публичный интерфейс.
Нужна ли подписка, чтобы пользоваться Proxmox VE 9?
Нет. Все функции работают с бесплатным репозиторием pve-no-subscription. Без подписки при входе появляется окно «No valid subscription». Подписка даёт репозиторий pve-enterprise с более тщательно проверенными пакетами и техническую поддержку.