Одним из ключевых аспектов сетевых технологий, который стоит изучить, является сегментация. Ее преимущества можно оценить даже в домашней лаборатории. Домашнюю сеть можно организовать так же, как и в производственной среде. Независимо от того, что вы используете — 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
Проблемы и выводы
- Ограничения macvlan: если контейнерам нужен доступ к хосту, придется использовать дополнительные интерфейсы или bridge-контейнеры.
- VLAN-aware в Proxmox: без этой настройки тегирование работать не будет.
- MTU: если на одном VLAN включены Jumbo Frames (например, для Ceph), проверьте согласованность на всех устройствах.
- Старые контейнеры: могут некорректно работать с тегированными интерфейсами.
Итог
Использование VLAN в Proxmox и Docker значительно улучшит вашу сетевую инфраструктуру. Сначала это кажется сложным, но когда сервисов становится больше (особенно с публичным доступом, хранилищами и множеством ВМ), VLAN окажутся незаменимыми.
Начните с нескольких VLAN, например, отделите "домашний" трафик от "лабораторного". Так изменения в серверной части не повлияют на обычные устройства. Постепенно добавляйте новые VLAN по мере роста потребностей.
Удачных экспериментов!