Личное облако на Proxmox

В прошлой статье (https://habr.com/ru/articles/794508/) я писал как поставить Proxmox 8 на Orange Pi 5(b). Это даже получилось, но я уперся в то, что производитель железки не выпускает свежие ядра под нее. Для железки есть 5.10.160 и оно устарело для Proxmox 8. Виртуалки работают, но есть проблемы с фаерволом. Производитель обещает вот-вот выпустить новое, но ждать я не стал и решил сделать инфраструктуру по другому. О чем и напишу. Получается уже цикл статей. Эта будет описывать цель и первые шаги к ней.

Итак, на чем я решил строить инфраструктуру домашнего облака:

  1. Intel NUC. Это спека по которой выпускают компактные компьютеры. Купил Asus Mini PC.

  2. Док станция для двух 2.5–3.5 HDD, которая умеет работать со скоростью 10Gbps по USB 3.2

  3. Два HDD 3.5 на 8Тб. Что мелочиться.

  4. С Orange PI 5b снаял два SDD на 2Тб

  5. Докупил еще один NVME SDD на 2Тб что бы внутрь NUC-a воткнуть.

  6. Бесперебойник для этой всей красоты.

Идея такова:

  1. Поставить на NUC Proxmox 8, в нем сделать набор виртуалок и на них построить все свои сервисы.

  2. Приобрести за 4$ в месяц минимальный внешний сервер в облаке что бы через него выставить наружу свои сервисы.

Сетевая инфраструктура будет такова:

  1. Внешний сервер будет pfSense c Wireguard VPN. Я вообще имею статью (https://habr.com/ru/articles/756290/) о том как используя Ansible playbook сделать себе VPN, но это мне нужно было что бы Ansible и IPTables освоить ну и с сетями получше разобраться. Для реального же использования рекомендую pfSense. Он может все на свете, что можно придумать в области VPN, фаерволов и прочего. Плюс удобен и отлично документирован. Не говоря уже о высочайшем качестве.

  2. Внутри Proxmox из виртуалок будет сделано две изолированных локальных сети. Изолированных от всего на свете. Одна под личные, вторая под публичные сети. Это будут просто два сетевых моста, которые ни к чему не привязаны.

  3. Так же внутри будет виртуалка с pfSense, который будет видеть две эти локалки и WAN интерфейс (выход в интернет). Решено пока не морочить голову с VLAN так как сеть простая. Он будет гейтом и будет по VPN соединен с внешним pfSense для публикации сервисов.

  4. На внутреннем pfSense будет поднят HAProxy что бы публиковать сервисы из виртуалок на порту. На поддоменах.

  5. На внешнем pfSense будет проброшен порт HAProxy внутреннего (он виден в VPN) в интернет. Это позволит на внешнем сервере иметь только VPN и более ничего, а значит он будет копеечный.

  6. На начальном этапе на самом деле все pfSense будут подняты прямо в Proxmox, так как на самом деле VPN pfSense иметь в облаке или нет, не важно пока нет внешних коннектов. Это позволит в безопасной обстановке все протестить.

Такое решение с одной стороны не требует дорогого внешнего сервера. Тут нужно отметить, что трафик тарифицируется с определенного объема и надо это учитывать. С другой позволяет легко сносить поломанные в процессе экспериментов виртуалки, делать шаблоны и снапшеты с бэкапами, виртуалок я уже поломал с десяток и обычно вместо починки просто откатываю, что время экономит. Proxmox великолепен когда работает! При этом изоляция локалок, изоляция обоих pfSense внутри VPN и хост системы позволяет не особо беспокоится над тем, что внешние сервисы будут представлять опасность для моих домашних железок.

Итак, начнем. Первое это установка Proxmox VE. Тут сразу есть грабля. Их iso дистр самодельный на мой взгляд шлак. Там LVM не работает и при этом debian перелопачен так, что лучше не видеть. Так что попробовав его я поставил Debian Bookworm и уже в него накатил Proxmox. Процесс установки такой же как в моей прошлой статье (https://habr.com/ru/articles/794508/) За исключением того, что не надо прошивки ставить для ARM-а:

Редактируем как там описано /etc/hosts

127.0.0.1       localhost
192.168.1.230   pve-main.proxmox.com pve-main

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Добавляем репозитории Proxmox в /etc/apt/source.lists

deb http://ftp.debian.org/debian bookworm main contrib non-free non-free-firmware
deb http://ftp.debian.org/debian bookworm-updates main contrib non-free non-free-firmware
deb http://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware


# Proxmox Backup Server pbs-no-subscription repository provided by proxmox.com,
# NOT recommended for production use
deb http://download.proxmox.com/debian/pbs bookworm pbs-no-subscription
deb http://download.proxmox.com/debian/pbs-client bookworm main
deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription

Устанавливаем aptitude, что бы если будут проблемы с зависимостями она их нашла и решила. В репах Proxmox они бывают, так что рекомендую.

apt-get install aptitude

Отключаем NetworkManager так как PVE рулит сетью с помощью ifupdown2

systemctl stop NetworkManager.service
systemctl disable NetworkManager.service

Ставим Proxmox VE (PVE) причем обратите внимание, что ifupdown2 ставится первым. Думаю это может быть важно.

aptitude install ifupdown2 proxmox-ve open-iscasi

В итоге Proxmox установится и заработает. Можно зайти в консоль по https://${host-ip}:8006, но это еще не все. Хочется красивых бэкапов, так что ставим еще Proxmox Backup Server (PBS) эта штука умеет их сжимать и дедуплицировать и еще много чего. Очень хорошая. Я поставил его прямо на тот же хост, что и PVE.

aptitude install proxmox-backup-server proxmox-backup-client

Клиент ставится потому, что бэкапить сам Proxmox сервер тоже хочется и он, как ни странно, сам себя прекрасно бэкапит. Теперь PBS доступен по адресу https://${host-ip}:8007, можно зайти в консоль. Бэкап самого сервера пока сделать некуда, собственно и займемся тем что бы было куда, идея такова:

  1. Два HDD будут собраны в один LVM Stripe 2 том, то есть их скорость будет складываться практически при записи. Это не надежно, так как если помрет один, то помрет весь раздел, но скорость мне важнее. При этом расчет сделан на то, что либо помрут HDD с бэкапами, либо помрут SDD с данными и виртуалками, не одновременно и в этом дублирование. Я не бизнес и мне бэкапы в состоянии на пять лет назад не нужны. Либо из текущих данных восстановлю бэкапы, либо из бэкапов текущие данные.

  2. Раздел на внутреннем SDD и два внешних SDD будут слиты в один LVM Stripe 3 том для той же цели, скорость работы. Раздел и диски одинакового размера. Это так получилось потому, что два внешних SSD на деле на 2Гб, а маркетингово обрезаны до круглых чисел.

  3. Сделанный при установке PVE LVM том /dev/pve-main-vg/root будет как раз заменен на том из п.2 Так как если просто добавить в него два SSD, то Stripe 3 не будет.

Собственно собираем два HDD в том. Далее примерно по памяти, если что тут смотреть (https://access.redhat.com/documentation/ru-ru/red_hat_enterprise_linux/7/html/logical_volume_manager_administration/stripe_create_ex).

pvcreate /dev/sdX /dev/sdX
vgcreate backups /dev/sdX /dev/sdX
lvcreate -i 2 -I 4 -l 100%FREE -n backups_2_stripe backups
mkfs.ext4 /etc/backups/backups_2_stripe

У нас в итоге есть раздел для бэкапов, который пашет с практически их суммарной скоростью. Этим и многим другим LVM прекрасен. Я не стал мудрить с ZFS и Btrfs хоть они и имеют нечто похожее потому, что LVM проще, плюс у Proxmox есть интеграция с ним, хотя и с FS она есть, не пробовал.

Далее наступает момент преобразования /dev/pve-main-vg/root в Stripe 3 том. Это не обязательно, просто хочется. Сначала я сделал загрузочную флешку с Ubuntu 22.04 live и сделал все с нее (для справки отлично описано тут https://access.redhat.com/documentation/ru-ru/red_hat_enterprise_linux/7/html/logical_volume_manager_administration/stripe_create_ex):

  1. Монтируем /dev/pve-main-vg/root в /mnt/root

  2. Монитруем /dev/backups/backups_2_stripe в /mnt/backups

  3. Делаем в /mnt/backups папку /mnt/backups/root_copy

  4. Копируем весь рут в папку rsync -avh /mnt/root/ /mnt/backups/root_copy/ команда по памяти, гуглите.

  5. Отмонтируем все.

  6. Сносим /dev/pve-main-vg/root командой lvremove /dev/pve-main-vg/root он спросит в своем ли ты уме, отвечаем, что кажется да.

  7. Сносим так же /dev/pve-main-vg/swap_1 это просто подкачка и она потом все равно будет нужна, но для чистоты эксперимента.

  8. Добавляем SSD диски в volume group: vgextend pve-main-vg /dev/sdX && vgextend pve-main-vg /dev/sdX

  9. Делаем новый striped LVM logical volume: lvcreate -i 3 -I 4 -l 100%FREE -n rootpve-main-vg

  10. Далее уменьшаем этот root на 1Гб (так мне проще, отлично описано тут https://access.redhat.com/documentation/ru-ru/red_hat_enterprise_linux/8/html/configuring_and_managing_logical_volumes/modifying-the-size-of-a-logical-volume_configuring-and-managing-logical-volumes) что бы подкачку впихнуть: lvreduce --resizefs -L -1G pve-main-vg/root

  11. Создаем подкачку: lvcreate -i 3 -I 4 -l 100%FREE -n swap_1pve-main-vg

  12. Делаем раздел для будущей подкачки собственно подкачкой: mkswap /dev/pve-main-vg/swap_1

Без раздела подкачки не обойтись даже если памяти много. Раздел в скриптах PVE используется, так что сделал. В итоге у нас есть /dev/pve-main-vg/root, который работает со скоростью в гигабайты в секунду не напрягаясь. Диски подготовлены, пора переходить к настройке PVE. Первое, что можно сделать это настроить фаервол.

Фаервол устроен в PVE интеренсно. Есть настройки датацентра, настроки отдельных нод и настройки отдельных виртуалок. Что бы он заработал его надо на всех уровнях включить. Каждый следующий уровень наследует правила предыдущего. Важно сначала настроить правила, а потом включить фаервол, иначе он все зарежет. Правила на уровне датацентра такие как на картинке:

f86d0b79d44d54765afb1decc1ab4291.png

Тут открыты все порты, что использует для различных нужд PVE и порты по которым доступны разные виды консолей управления. После создания правил надо на всех уровнях разрешить фаервол, покажу уровень датацентра:

cc7a7a693aa865c3082d35a77570046f.png

Фаервойл настроен и включен, пора настроить PBS, что бы иметь много бэкапов! Для этого заходим в консоль управления PBS: https://${host-ip}:8007 жмем кнопку add datastore и добавляем наш том с двумя HDD: /dev/backups/backups_2_stripe как хранилище там ничего сложного нет, разберетесь. С момента добавления хранилища нужно сходить в PVE и добавить PBS в качестве storage для бэкапов. Немного странная конструкция на мой вкус, но у них так. Да, установка PVE и PBS на один физический сервер не рекомендована, но так как если все это накроется то настроить снова это много текста в статье, но немного команд, а бэкапы останутся, то я не стал усложнять. Собственно добавление PBS в PVE:

6e3ee16a8388bc1b18f553f2b1df013c.png

Fingerprint для того что бы добавить PBS как хранилище в PVE можно взять в PBS открыв сертификат, откуда и скопипастить, остальное разберетесь:

c17bcf3a957ae096cad9d2179e0ce274.png

Теперь мы можем нажать кнопку «бэкапь!»:

c4ff5c641c1dc499825de347cb201d15.png

Так же мы можем забэкапить сам PVE сервер. На деле от него нам надо только папку /etc и особенно /etc/pve. Но /etc/pve это точка монтирования fuse FS, так что команда на бэкап должна особо сказать, что ее надо тоже забрать. Но я для теста залил в бэкап вообще весь диск он точки монтирования пропускает если ему не сказать обратного:

proxmox-backup-client backup root.pxar:/ --repository ${host-ip}:proxmox-backup-server-data --include-dev /etc/pve

proxmox-backup-server-data это так называется HDD LVM том, добавленный в PBS в качестве хранилища. Люблю длинные самодокументирующие названия.

На пока все, эта конструкция позволит создавать виртуалки, бэкапить дедуплицированно-сжатые бэкапы и вообще куролесить. В следующий раз про сеть, если настроение будет.

© Habrahabr.ru