Безопасная сеть Proxmox: Изолированные контейнеры и сервисы с использованием сегментации сети с VLAN

от virtualizationhowto
0 Комментарии 570 просмотров 6 мин на чтение

Одной из ключевых дисциплин в сетевых технологиях, которую вам стоит изучить, является сегментация. Мы можем извлечь выгоду из сегментации даже в домашней лабораторной среде. Вы можете организовать свою домашнюю сеть так же, как и производственную. Независимо от того, что вы используете — Proxmox, Docker Swarm, Kubernetes или просто несколько виртуальных машин — изоляция трафика является отличным способом улучшить ваш сетевой опыт и сделать его более мощным. Это позволяет масштабировать инфраструктуру, упрощает безопасность и способствует лучшей документации. Именно здесь в игру вступают VLAN. Я покажу вам свою стратегию использования VLAN для сегментации сервисов в Docker и Proxmox.

Зачем сегментировать трафик в домашней лаборатории с помощью VLAN?

Вы можете сказать: «Мне не нужны VLAN дома». И, возможно, вам действительно не нужны они по тем же причинам, что и в корпоративной среде. Однако есть значительные преимущества, которые вы можете получить. Кроме того, как я уже не раз упоминал, я являюсь большим сторонником обучения на основе проектов. Внедрение VLAN дома поднимет ваше понимание основных сетевых концепций на новый уровень и позволит применять эти знания в корпоративной среде.

Внедрение VLAN дома означает, что вы можете:

  • Изолировать интерфейсы управления от трафика контейнеров
  • Защитить протоколы хранения, такие как NFS или CephFS, с помощью брандмауэров
  • Избежать перекрестных помех между сервисами, если это явно не разрешено
  • Симулировать лучшие практики корпоративных сетей
  • Создать структуру, которую легче документировать
  • Проще настраивать правила брандмауэра для ограничения типов трафика и т.д.

Для меня VLAN также помогли устранить хаос в сети, когда я начал выводить сервисы в интернет через обратные прокси и экспериментировать со стеками AI, контейнерами, IoT-устройствами, умным домом и т.д.

Моя схема VLAN

Вот как я организую трафик в своей среде. Номера VLAN и подсети приведены в качестве примера. Вы можете заменить их своими VLAN и подсетями.

ID VLAN Название Назначение Подсеть
10 Управление Интерфейс Proxmox, SSH, агенты мониторинга 10.0.10.0/24
20 Хранение NFS, GlusterFS, CephFS, цели резервного копирования 10.0.20.0/24
30 Внутренний Docker Контейнеры только для внутреннего использования 10.0.30.0/24
40 DMZ / Публичный Открытые сервисы Docker (Traefik и т.д.) 10.0.40.0/24
50 Лаборатория / IoT / Серверный трафик Тестовые ВМ, микросервисы, серверы 10.0.50.0/24
60 Кластерный трафик Изоляция трафика кластера Proxmox 10.0.60.0/24
70 Живая миграция Изоляция трафика живой миграции 10.0.70.0/24
80 Умный дом Трафик умного дома и устройств 10.0.80.0/24
90 Беспроводная сеть Беспроводная сеть 10.0.90.0/24
100 Основная LAN Основной LAN-трафик 10.0.100.0/24

Это дает мне полный контроль над тем, как трафик перемещается между типами сервисов и как я могу его ограничить.

Настройка VLAN в Proxmox

Proxmox упрощает настройку VLAN. Я использую транковые порты на своем Unifi-коммутаторе, и все VLAN помечены, кроме родной VLAN 10 (управление). Хост Proxmox обрабатывает тегирование внутренне через интерфейс моста Linux.

Вот упрощенная версия моего файла конфигурации /etc/network/interfaces:

auto enp3s0
iface enp3s0 inet manual

auto vmbr0
iface vmbr0 inet manual
    bridge-ports enp3s0
    bridge-stp off
    bridge-fd 0
    bridge-vlan-aware yes

auto vmbr0.10
iface vmbr0.10 inet static
    address 10.0.10.2/24
    gateway 10.0.10.1

auto vmbr0.20
iface vmbr0.20 inet static
    address 10.0.20.2/24

Каждая ВМ или контейнер подключается к нужной VLAN через выпадающий список в GUI Proxmox или CLI. Например, я назначаю сервер резервного копирования VLAN 20, а агенты мониторинга, такие как Netdata, оставляю на VLAN 10.

Совет: Не забудьте включить «VLAN Aware» для моста в GUI, чтобы это работало правильно. Обратите внимание на галочку VLAN aware в конфигурации моста ниже. Также мы оставляем VLAN ID в диапазоне 2-4094, что по сути является транковым портом и пропускает весь помеченный трафик, который мы хотим передать через мост Linux. При необходимости это можно ограничить.

Proxmox мост с поддержкой VLAN
Proxmox мост с поддержкой VLAN

 

Сегментация сервисов Docker с помощью Macvlan

Docker по умолчанию изолирует контейнеры в мостовой сети. Однако это не помогает, если вы хотите, чтобы сервисы находились в разных подсетях или VLAN. Для решения этой проблемы я использую сети macvlan с тегированием VLAN непосредственно в Docker.

Для автономных хостов Docker вот фрагмент из моего docker-compose.yml:

networks:
  internal_net:
    driver: macvlan
    driver_opts:
      parent: enp3s0.30
    ipam:
      config:
        - subnet: 10.0.30.0/24
          gateway: 10.0.30.1

Для Docker Swarm я предварительно создаю сеть:

docker network create -d macvlan \
  --subnet=10.0.30.0/24 \
  --gateway=10.0.30.1 \
  -o parent=enp3s0.30 \
  docker_internal_net

Это помещает контейнер непосредственно в подсеть VLAN с собственным MAC-адресом и IP. Это идеально подходит для таких задач, как Traefik, Unifi Controller, phpIPAM и всего, что требует сегментации или соответствует определенному типу трафика в стратегии VLAN.

Важно помнить: macvlan по умолчанию блокирует связь между хостом и контейнером. Вам потребуется специальный контейнер-мост или обходное решение, если вы хотите, чтобы контейнеры могли общаться с хостом (например, для сбора метрик или логов).

Примечание: Также очень важно, что сети macvlan не получают IP-адреса через DHCP, как стандартные сети. Вам нужно будет вручную назначать IP-адреса контейнерам, подключенным к сетям macvlan, например так:

services:
  nginx:
    image: nginx
    networks:
      dmz_net:
        ipv4_address: 10.0.40.10

Маршрутизация между VLAN

Вся маршрутизация между VLAN обрабатывается моим брандмауэром pfSense, который действует как шлюз уровня 3 для каждой подсети. Затем я применяю строгие правила брандмауэра, чтобы ограничить, кто с кем может общаться. Например:

  • VLAN хранения (20) не может инициировать соединения с VLAN управления (10)
  • DMZ VLAN (40) полностью изолирован от всех других VLAN, кроме порта 443 к backend-контейнерам Traefik
  • Внутренний Docker VLAN (30) может общаться с VLAN хранения (20) для доступа к базам данных, метрикам Prometheus и т.д.

Я также отслеживаю этот трафик с помощью Netdata и Prometheus + Grafana, чтобы выявлять неправильно настроенные сервисы, и использую arpwatch для оповещения о новых устройствах в различных сегментах сети.

Тегирование VLAN на коммутаторе

Я использую коммутатор Unifi, где каждый порт Proxmox или Docker-хоста настроен в режиме транка:

  • Родная VLAN: 10 (для управления)
  • Помеченные VLAN: 20, 30, 40, 50

Каждая VLAN также имеет соответствующий интерфейс на маршрутизаторе pfSense с резервированием DHCP и правилами брандмауэра.

В панели управления Unifi это выглядит так:

  • Порт 1 (узел Proxmox): Родная VLAN 10, помеченные 20/30/40/50
  • Порт 2 (Docker-хост): Родная VLAN 10, помеченные 30/40

Такая настройка гарантирует, что каждый хост видит все необходимые VLAN без непредвиденных ситуаций.

Uplink-порты коммутатора Unifi
Uplink-порты коммутатора Unifi

Подводные камни и извлеченные уроки

  1. Ограничения macvlan: Если вам нужно, чтобы контейнеры общались с хостом, macvlan может доставить хлопот. Обходные решения включают дополнительные интерфейсы или специальные контейнеры-мосты.
  2. Не забывайте настройки VLAN-aware в Proxmox: Если вы забудете включить эту опцию, тегирование не будет работать правильно.
  3. Несоответствие MTU может вызвать проблемы: Если вы используете Jumbo Frames в одной VLAN (например, для Ceph), убедитесь, что это согласовано на всех NIC и коммутаторах.
  4. Некоторые контейнеры не работают с тегированными интерфейсами: Старые или плохо поддерживаемые образы Docker могут некорректно работать при подключении к сетям macvlan.

Заключение

Если вы используете Proxmox и Docker в своей домашней лаборатории, а я подозреваю, что большинство читателей так или иначе с ними сталкивались, настройка VLAN станет лучшим, что вы можете сделать для своего сетевого опыта. Сначала это может показаться усложнением. Однако, как только у вас появится больше нескольких сервисов, особенно с хранилищами, публичными приложениями и множеством виртуальных машин, VLAN станут настоящим прорывом в лучшую сторону.

Начните с простой настройки с парой VLAN. Я рекомендую начать с разделения «основного LAN» трафика, который используют ваши домочадцы, и «серверного или домашней лаборатории» трафика. Таким образом, вы сможете вносить изменения на стороне серверов, не затрагивая основной LAN. По мере роста типов трафика добавляйте новые VLAN по одной.

Источник на английском языке

Даже просто подбор, перевод и оформление статей требуют времени. А самостоятельный обзор устройств требует еще и финансовых вложений. Если Вы хотите больше обзоров, Вы можете помочь автору.

Вам может понравиться

Оставить комментарий