January 30

Proxmox на Hetzner

Настройка сервера

Аренда сервера:

Для начала нужно арендовать Dedicated сервер, технические характеристики не имеют значения. После аренды на почту придет письмо с IP адресом и паролем от сервера.

На панеле управления переводим сервер в Rescue режим. После нажатия кнопки Activate rescue system будет тут же показан новый пароль для подключения - сохраняем его в блокноте.

Rescue Hetzner

Устанавливаем MobaXterm и подключаемся к серверу через ssh соединение и вводим команду:

installimage

далее выбираем вкладку Other => далее 1 пункт

RAID 0


Я смонтирую свои диски в RAID 0 (что это такое можно почитать тут). В данной конфигурации используется полный объем всех ваших дисков. По дефолту у Hetzner стоит RAID 1.

1) Меняем SWRAIDLEVEL 1 => SWRAIDLEVEL 0

2) Меняем эту часть распределение памяти, она не закомментирована была у меня перед скриншотом:

чтобы получилось так: (размер swap выбираете индивидуально, при необходимости можно будет его увеличить в дальнейшем, подробнее читаем тут)

3) Нажимаем F10 и подтверждаем все дальнейшие шаги:

4) После успешной установки операционной системы Proxmox делаем перезагрузку сервера:

reboot

Если остались вопросы или возникли ошибки - более подробно по монтированию дисков в RAID 0 читаем тут.


Проверка сервера (железо, место, интернет):

curl -sL yabs.sh | bash -s — -fg

Проверка износа дисков, работает только с дисками NVME:

# устанавливаем_программу_smartm

sudo apt-get install smartmontools

# узнаем имя дисков

fdisk --list

# проверяем по очереди каждый диск

smartctl -a /dev/nvme1_YOUR_DISK

Износ диска смотреть в строке Percentage Used

Если с сервером все в порядке продолжаем дальше, если параметры или диски не соответствуют описанию или технически неисправные - отказываемся от сервера и арендуем другой. Максимальный износ дисков Percentage Used 255%, но чем меньше износ тем дольше будут служить диски.

Настройка сетевой карты

1) Обязательно на хост системе вводим блокировку исходящих соединений для большинства подсетей в противном случае будем постоянно получать письма от hetzner за абуз подсетей, а если вовремя не среагировать то и блокировку сервера.

apt-get update && apt-get upgrade -y && apt full-upgrade -y && /

apt dist-upgrade -y

apt-get install iptables-persistent -y

curl -s https://gist.githubusercontent.com/c29r3/0b72e59e5b3169a03a727e75563fb332/raw/da2d91302378f0f2d3145ed0cf141ae11d7be615/hetz-private-ips.sh | bash

# оставляем только для своей подсети
iptables -I OUTPUT 1 -d 10.10.10.0/24 -j ACCEPT

2) Далее перепроверяем имя сетевой карты - ip a

3) Корректируем файл /etc/network/interfaces

nano /etc/network/interfaces

подменяем перепроверяем IP address и gateway на свои данные, так же netmask. Сравнить можно с данными тут .

ВАЖНО — в командах ниже все, что в <> меняем на свое значение и убираем сами <>

ВАРИАНТ файла /etc/network/interfaces: нас интересует нижняя часть данного примера до блока

iface <enp35s0> inet6 static, который остается дефолтным.

auto lo
iface lo inet loopback

iface lo inet6 loopback

auto <enp35s0>
iface <enp35s0> inet static
address <135.181.115.175/26> #IPv4
gateway <135.181.115.129>
up route add -net <135.181.115.128> netmask <255.255.255.192> gw <135.181.115.129> dev <enp35s0>
# route <135.181.115.128/26> via <135.181.114.129>

iface <enp35s0> inet6 static
address <2a01:4f9:181:31d4::2/64>
gateway fe80::1

auto vmbr0
iface vmbr0 inet static
address <135.181.115.175/26>
bridge-ports none
bridge-stp off
bridge-fd 0

iface vmbr0 inet6 static
address <2a01:4f9:181:31d4::2/64>

auto vmbr1
iface vmbr1 inet static
address 10.10.10.1/24
bridge-ports none
bridge-stp off
bridge-fd 0

auto vmbr2
iface vmbr2 inet static
bridge-ports none
bridge-stp off
bridge-fd 0

post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-down echo 0 > /proc/sys/net/ipv4/ip_forward
post-up iptables -t nat -A POSTROUTING -s '10.10.10.0/24' -o <enp35s0> -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '10.10.10.0/24' -o <enp35s0> -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

Сохраняем файл Ctrl +S и закрываем его Ctrl +X

ВАЖНО - ЕСЛИ ВЫ ДОПУСТИТЕ ОШИБКУ МОЖНО БУДЕТ ЧЕРЕЗ Rescue ИСПРАВИТЬ ДАННЫЙ ФАЙЛ ИЛИ СДЕЛАТЬ ВСЕ С НАЧАЛА, ТАК КАК МОЖНО ПОТЕРЯТЬ СВЯЗЬ С СЕРВЕРОМ

Перезапускаем сервисный файл сетевых настроек:

systemctl restart networking


Добавляем:

echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf

echo "net.ipv6.conf.all.forwarding=1" >> /etc/sysctl.conf

Эта настройка включает пересылку IP-пакетов (IP forwarding) на уровне ядра. Если говорить простым языком, то это позволяет вашему серверу работать как маршрутизатор (router).

Редактируем файл /etc/ssh/sshd_config, меняя стандартный ssh порт, разрешить/запретить подключение root пользователю, разрешить подключение по ssh-key:

sed -i 's/#Port 22/Port 2222/' /etc/ssh/sshd_config && \
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config && \
sed -i 's/#PubkeyAuthentication yes/PubkeyAuthentication yes/' /etc/ssh/sshd_config

либо отредактировать руками nano /etc/ssh/sshd_config

Открытый доступ по паролю и через root


ВАЖНО - если вы отключите доступ root пользователю необходимо создать нового пользователя для дальнейшего подключения

adduser user

usermod -aG sudo user

su - user

sudo whoami # сообщает имя пользователя

# sudo userdel user # удалить юзера


И самое главное меняем пароль

passwd

А лучше добавить ssh-key и убрать доступ по паролю, отредактировав файл /etc/ssh/sshd_config. Подробнее как добавить ssh-key читаем тут.
Делаем перезагрузку сервера, чтобы все изменения вступили в силу и убедится, что доступ к серверу есть.

reboot

Настройка Веб интерфейса Proxmox

1) Переходим по ссылке в браузере

https://<IP_address >:8006/

2) Скачиваем образ Ubuntu, можно сразу скачать несколько версий

Либо добавляем iso образ Windows или любой другой нужной вам для работы операционной системы:


3) Создаём контейнер

При создании контейнера сетевой мост (Linux Bridge) устанавливаем vmbr1

а так же присваиваем подсеть, проще будет управляться цифрами в диапазоне от 100 до 250. Полагаю 150 контейнеров хватит с головой ;)

Далее подтверждаем и VSЁ готово! Поздравляем вы молодец!

Маршрутизация портов

Подключение по ssh напрямую к контейнеру

Меняем в контейнере ssh порт, разрешаем/блокируем подключение root пользователю (для безопасности лучше менять, но не обязаловка, главное, чтобы он отличался от ssh порта на хосте):

sed -i 's/#Port 22/Port 2208/' /etc/ssh/sshd_config && \
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config && \
sed -i 's/#PubkeyAuthentication yes/PubkeyAuthentication yes/' /etc/ssh/sshd_config && \
systemctl restart ssh && \
systemctl status ssh

В статусе должен поменяться порт подключения ssh, если в статусе не меняется порт сделать reboot контейнера

Проверяем какой именно порт у нас прописан в контейнере:

cat /etc/ssh/sshd_config | grep Port

Должен изменится стандартный порт 22 на новый

Проброс портов на хост системе к контейнеру


На хосте пробрасываем порт ssh, в нашем случае это 2208:

iptables -t nat -I PREROUTING -p tcp --dport 2208 -j DNAT --to 10.10.10.100:2208

#--dport 2208 внешний порт подключения
# 10.10.10.100:2208 подсеть контейнера и порт, который изменили внутри контейнера (они могут быть разными - как настроите)

Подключаемся через MobaXterm по ssh соединению к своему контейнеру

#ssh root@<IP_address> -p 2208

Проброс других портов под различные ноды делается идентично

iptables -t nat -I PREROUTING -p tcp --dport 8080 -j DNAT --to 10.10.10.100:8080

где dport 8080 это внешний порт, входящий в хост систему и 10.10.10.100:8080 этот порт внутри контейнера 10.10.10.100/24, который открывать внутри контейнера дополнительно не надо.

Бекап файлов из контейнера на хост систему без подключения по ssh к контейнеру

Подключаемся по ssh соединению к хост системе через MobaXterm

Чтобы скачать бекап файл из своего контейнера на хост

pct pull 100 /root/.side/gentx-Lapatylin.json /root/gentx-Lapatylin.json

Где 100 это номер контейнера, далее путь к файлу в контейнере, который делаем бекап (/root/.side/gentx-Lapatylin.json) и путь куда сохранить на хост системе (/root/gentx-Lapatylin.json).

Загрузить бекап из хост системы в контейнер

pct push 101 /home/user/nodekey /root/autonity-chaindata/autonity/nodekey

Где 101 - номер контейнера, потом путь бекап файла на хосте (/home/user/nodekey) и полный путь файла в контейнере (/root/autonity-chaindata/autonity/nodekey). Папки так копировать нельзя только отдельный файл либо архив.

Переезд на другой сервер

Останавливаем контейнер, делаем бекап контейнера

и отправляем контейнер на новый сервер

scp -P 22 /var/lib/vz/dump/vzdump-lxc-201-2025_02_02-20_49_52.tar.zst root@IP_address_New_server:/var/lib/vz/dump/vzdump-lxc-201-2025_02_02-20_49_52.tar.zst

Далее на новом сервере восстанавливаем бекап и запускаем

Также можно для быстрого переезда и обмена информации создать кластер, будет время дополню гайд.

Полезные команды:

# вывод всех текущие правила брандмауэра
iptables -L

# вывод всех правил в таблице NAT (network address translation)
iptables -t nat -v -L -n --line-number

iptables -L FORWARD --line-numbers

# сохранить текущие правила
# iptables-save > /etc/iptables.rules.v4
# восстановить правила
# iptables-restore < /etc/iptables.rules.v4

# команда для удаления правилa, где "1" - это порядковый номер в таблице NAT, является последним правилом, a PREROUTING - это столбец, отвечающий за входящий трафик:
iptables -t nat -D PREROUTING 1

# если забыл пароль от контейнера можно в него попасть через хост командой и поменять пароль:
pct enter 101
101 - номер контейнера

iptables -t nat -I PREROUTING -p tcp --dport (твой порт с мира) -j DNAT --to 10.10.100.XXX:(локальный порт на виртуалке)

iptables -I FORWARD -o virbr0 -d 10.10.10.XXX -j ACCEPT

#пример
iptables -t nat -I PREROUTING -p tcp --dport 53589 -j DNAT --to 10.10.10.100:22
iptables -I FORWARD -o virbr1 -d 10.10.10.100 -j ACCEPT

Основы iptables для начинающих читаем тут.
Внутренних цепочек NAT пять:
  • PREROUTING - используется для всего входящего трафика до принятия первого решения о маршрутизации
  • INPUT - применяется для входящего трафика текущего узла
  • FORWARD - через нее проходит транзитный трафик узла
  • OUTPUT - применятся для исходящего трафика текущего узла
  • POSTROUTING - используется для всего исходящего трафика после принятия всех решений о маршрутизации

Можно задонатить автору за потраченное время:

Sol 4JiMCDYEY4ieYaHrtgworot4GZSikkwQ69AAu9q25Tdn
EVM 0x333C39382661166EB1965Ca57d5167743c5b1152
USDT Trc-20 TKCrAHAdGUgy7ope2rvgd2WqN85MVtvuLV