Столкнувшись с вопросом и перерыв большое количество документации постарайся систематизировать и записать то, что ты узнал, чтобы запомнить лучше. А так же сделай инструкцию по этому вопросу, чтобы не проходить весь путь повторно.


Исходная документация находится в большом количестве на 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-адреса на интерфейсах, которые вы затем будете включать в бридж, как это будет работать и будет ли вообще никому неизвестно.


Далее создаем бридж vmbr0 – и вешаем на него первый адрес самого сервера, выданный нам провайдеров Hetzner, указываем порт бриджа – первый физический интерфейс без VLAN, а так же указываем дополнительной командой добавление маршрута на нашу дополнительную сеть, заказанную в 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 и для открытия и проброса портов будет необходимо открывать еще и в веб-интерфейсе провайдера.

Комментарии (5)


  1. Wexter
    20.12.2019 13:06

    Странность в том, что гейтом предлагается использовать собственный адрес физического сервера.

    Не предлагается, а сеть будет маршрутизироваться через этот адрес, т.е у хецнера будет маршрут в вашу /29 через сервер. А дальше уже ваше дело как вы будете раскидывать адреса


    1. dmbarsukov Автор
      20.12.2019 13:28

      Как с их стороны это выглядит я понимаю, странно это выглядит в предлагаемых клиенту настройках.


      1. Wexter
        20.12.2019 15:51

        А у вас точно скриншоты винбокса и админки хецнера не перепутаны?


        1. dmbarsukov Автор
          20.12.2019 16:28

          спасибо за замечание! Вообще все поехали, потому что хабрасторадж выдавал в обратном порядке, а глаз замылен в процессе написания. Исправлено.


  1. Lelik13a
    21.12.2019 12:59

    Вы какую-то не ту документацию смотрели по настройке адресов.
    How-to — есть там оба варианты с описанием.

    Как сеть отвалится, посмотрите, какие интерфейсы соединены в бридж и входят ли туда интерфейсы виртуалок. Можно добавить недостающие вручную.
    Чтобы бридж не пересоздавался каждый при изменении сетевых настроек, можно сетевые параметны вынести на интерфейс, который затем включить в бридж.