Как я использую VLAN для изоляции сервисов Docker и Proxmox (+ бесплатный рабочий лист)

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

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

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

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

Используя VLAN, вы сможете:

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

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

Моя схема VLAN

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

VLAN ID Название Назначение Подсеть
10 Management Интерфейсы Proxmox, SSH, мониторинг 10.0.10.0/24
20 Storage NFS, GlusterFS, CephFS, цели резервного копирования 10.0.20.0/24
30 Internal Docker Внутренние контейнеры 10.0.30.0/24
40 DMZ / Public Публичные сервисы (Traefik и др.) 10.0.40.0/24
50 Lab / IoT / Servers Тестовые ВМ, микросервисы, серверы 10.0.50.0/24
60 Cluster traffic Трафик кластера Proxmox 10.0.60.0/24
70 Live migration Изоляция трафика live-migration 10.0.70.0/24
80 Smart home Умные устройства 10.0.80.0/24
90 Wireless Беспроводная сеть 10.0.90.0/24
100 General LAN Основной LAN-трафик 10.0.100.0/24

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

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

В Proxmox работа с VLAN выполняется достаточно просто. Я использую trunk-порты на UniFi-коммутаторе, а все VLAN, кроме native VLAN 10 (Management), передаются с тегами. Proxmox обрабатывает тегирование через мостовой интерфейс.

Вот упрощенная конфигурация моего /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 через интерфейс Proxmox (GUI или CLI). Например, сервер резервного копирования будет на VLAN 20, а агенты мониторинга (Netdata) — на VLAN 10.

Важно: не забудьте включить опцию "VLAN Aware" в настройках моста. В поле VLAN IDs оставляем диапазон 2-4094, что по сути делает порт trunk и пропускает все тегированные VLAN.

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

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

Для standalone-хостов пример фрагмента 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-контроллера, phpIPAM и других сервисов, которые требуют изоляции.

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

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

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

Все меж-VLAN взаимодействия обрабатываются pfSense, который выступает в роли L3-шлюза. Для каждой подсети задаются строгие правила межсетевого экрана:

  • Storage VLAN (20) не может инициировать соединения с Management VLAN (10)
  • DMZ VLAN (40) изолирован от всех, кроме порта 443 для Traefik
  • Internal Docker VLAN (30) может общаться с Storage VLAN (20) для доступа к БД и метрикам Prometheus

Трафик мониторится через Netdata и Grafana, а arpwatch уведомляет о новых устройствах в сегментах.

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

В UniFi-коммутаторе порты Proxmox и Docker-хостов настроены как trunk:

  • Native VLAN: 10 (Management)
  • Tagged VLANs: 20, 30, 40, 50

Каждому VLAN соответствует интерфейс в pfSense с DHCP и правилами.

В UniFi это выглядит так:

  • Порт 1 (Proxmox): Native VLAN 10, Tagged 20/30/40/50
  • Порт 2 (Docker): Native VLAN 10, Tagged 30/40

Unifi switch uplinks

Проблемы и выводы

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

Итог

Использование VLAN в Proxmox и Docker значительно улучшит вашу сетевую инфраструктуру. Сначала это кажется сложным, но когда сервисов становится больше (особенно с публичным доступом, хранилищами и множеством ВМ), VLAN окажутся незаменимыми.

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

Удачных экспериментов!

Предыдущая Статья

Как я запускаю Docker на TrueNAS как профессионал

Следующая Статья

CoreControl — новая самообслуживаемая панель управления для домашних лабораторий

Написать комментарий

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *