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



