Столкнувшись с вопросом и перерыв большое количество документации постарайся систематизировать и записать то, что ты узнал, чтобы запомнить лучше. А так же сделай инструкцию по этому вопросу, чтобы не проходить весь путь повторно.
Исходная документация находится в большом количестве на https://forum.proxmox.com https://wiki.hetzner.de
Постановка задачи
Клиент хочет объединить несколько арендуемых серверов в одну сеть, чтобы избавиться от необходимости платить за несколько дополнительных подсетей, повесить все свое хозяйство за роутер, назначить им внутри локальные адреса, и защититься файрволом. Дабы весь служебный трафик бегал внутри VLAN. Плюс перевезти виртуалочки с одного старого сервера на новый и от того отказаться, проапгрейдить используемое старое железо и заодно переехать на свежий Proxmox.
Изначально у клиента 5 серверов, на каждом по дополнительной подсети, первый адрес из выделенной подсети назначен на дополнительный бридж на Proxmox
При этом VM работают на Windows и у них настроен адрес 85.x.x.177/29 с гейтом 85.x.x.176
И в похожем ключе настроены все 5 серверов со своими виртуальными машинами.
Забавно, что данная конфигурация ошибочна в настройке сети в принципе, использовать адрес сети для первого узла и он же для шлюза. Если такую конфигурацию попробовать завести на виртуальной машине в Ubuntu – сеть не работает.
Реализация
- Создаем vSwitch в интерфейсе, назначаем на него VlanID, добавляем этот vSwitch ко всем нужным нам серверам.
- Делаем тестовый сервер, чтобы можно было настраивать и переезжать без проблем.
Поднимаем первой виртуалкой chr по инструкции для proxmox.
Если пользуетесь приведенным скриптом, обратите внимание, что проверяется в начале наличие каталога -d /root/temp, а если его нет, создается каталог /home/root/temp, однако работа дальше ведется все равно с каталогом /root/temp. Скрипт необходимо исправить для создания соответствующего каталога.
- Настраиваем сеть для Proxmox.
Добавляем сабинтерфейс с номером VLAN, указываем, что настройка адресов будет происходить на бриджах используя inet manual. ВАЖНО. Нельзя настраивать IP-адреса на интерфейсах, которые вы затем будете включать в бридж, как это будет работать и будет ли вообще никому неизвестно.
После переписки со службой поддержки Hetzner стало ясно, что добавить дополнительный мак для подсети так же, как и для выделенного адреса они не смогут. То есть нельзя включать в бридж локальный интерфейс на сервере и интерфейс нашей виртуальной машины CHR. Hetzner присылает уведомление с требованием убрать лишний мак. Убираем бридж vmbr0 и назначаем адрес напрямую на интерфейс eno1.
Далее создаем бридж vmbr1 – и вешаем на него произвольный адрес, который будет конечной точкой наших маршрутов из CHR, а так же указываем дополнительной командой добавление маршрута на нашу дополнительную сеть, заказанную в Hetzner для этого сервера через этот бридж. Добавление маршрута сработает, когда интерфейс поднимается.
Вторым бриджом будет у нас интерфейс для локального трафика, добавляем на него адрес для получения связности между разными серверами Proxmox по локальной сети без выхода в интернет и указываем портом сабинтерфейс eno1.4000, который выделен для нашего VlanID.
При начальной настройке попадаются советы, что можно поставить для Proxmox дополнительно пакет ifupdown2 и можно при изменениях в сетевых интерфейсах сервер целиком не перезагружать. Однако это характерно только для первичной настройки, и при использовании бриджей и настройке уже виртуальных машин сталкиваешься с проблемами отвала сети в виртуалках. При том, что вы правили, например, интерфейс vmbr2, а при применении конфигурации сеть отваливается уже на всех внутренних интерфейсах и не поднимается до полного перезапуска сервера. ifdown&&ifup не помогают. Если у кого-то есть решение – буду благодарен.
Сам первый настроенный интерфейс на сервере остается рабочим и доступным.
Выделение адреса для CHR чтобы не потерять адреса из пула
Пул адресов, который выдает Hetzner выглядит для сетевика весьма странно, примерно так:
Странность в том, что гейтом предлагается использовать собственный адрес физического сервера.
Классический вариант, предлагаемый самим Hetzner указан в постановке задачи и был реализован клиентом самостоятельно. В этом варианте клиент теряет первый адрес на адрес сети, второй адрес на бридже proxmox и он же будет шлюзом, и последний адрес для бродкаста. Адреса IPv4 лишними не бывают. Если же вы впрямую попробуете прописать на CHR IP адрес 136.х.х.177/29 и шлюз для 0.0.0.0/0 148.х.х.165 то сделать это сможете, однако шлюз не будет Direct Connected и поэтому будет unreachable.
Выйти из положения можно, если использовать 32 сеть на каждый адрес и в качестве имени сети указав нужный нам адрес, который может быть любым. Получается аналог point-to-point соединения.
В этом случае шлюз разумеется будет доступен, и все будет работать так, как нам нужно.
Учитывайте, что в подобной конфигурации не рекомендуется использовать правило SRC-NAT masquerade, потому что выходной адрес будет неопределенно различным, а правильнее указать action: src-NAT и конкретный адрес, из которого вы будете выпускать клиента.
- Ну и напоследок.
Для блокировки доступа к самому Proxmox из интернета используйте встроенные средства: есть отличный firewall.
Не стоит использовать firewall, предлагаемый hetzner, чтобы не запутаться в месторасположении настроек. Так же hetzner будет действовать на все сети, в том числе на те, которые заведены на CHR и для открытия и проброса портов будет необходимо открывать еще и в веб-интерфейсе провайдера.