"Быстрый
</p>
<ul>
<li>Создай bridge, добавь порты с нужным pvid (pvid = ID VLAN для нетегированных устройств)</li>
<li>Заполни /interface bridge vlan: tagged=bridge1,trunk-port и untagged=access-port для каждого VLAN</li>
<li>Создай VLAN-интерфейсы поверх bridge1 (не поверх ether!) — назначь IP</li>
<li>Включи vlan-filtering=yes только в самом конце, после заполнения таблицы</li>
<li>Проверь: /interface bridge vlan print detail — у каждого VLAN с IP должен быть tagged=bridge1</li>
</ul>
<p>
<h2>Диагноз: ты настраивал VLAN, но что-то пошло не так</h2>
<p>Настройка VLAN на <a class="wpil_keyword_link" href="https://it-apteka.com/tag/mikrotik/" target="_blank" rel="noopener" title="mikrotik" data-wpil-keyword-link="linked" data-wpil-monitor-id="2321">MikroTik</a> — это один из тех случаев, когда кажется понятно, но не работает. Включил vlan-filtering — пропал WinBox. Назначил IP на VLAN-интерфейс — пинг не идёт. DHCP молчит. Trunk пропускает только один VLAN вместо трёх.</p>
<p>Каждая из этих <a href="https://it-apteka.com/troubleshooting-setevyh-problem-15-komand-dlja-diagnostiki-v-windows-i-linux/" title="Troubleshooting сетевых проблем: 15 команд для диагностики в Windows и Linux" target="_blank" rel="noopener" data-wpil-monitor-id="2465">проблем решается за одну команду</a>. Но только если понимаешь почему она возникла.</p>
<p>Статья закрывает тему полностью: от первого bridge до production-конфига с management VLAN, изоляцией Wi-Fi и защитой от VLAN hopping. Конкретные команды, таблицы с объяснениями, 13 типичных ошибок с решениями.</p>
<p>Что нужно для повторения:</p>
<ul>
<li>MikroTik с RouterOS 7.x (команды для ROS 6 там где отличаются — отмечены отдельно)</li>
<li>Доступ через WinBox или SSH с правами full</li>
<li>Serial console под рукой — пригодится если vlan-filtering включишь раньше времени</li>
<li>15-40 минут в зависимости от сложности топологии</li>
</ul>
<h2>Системные требования</h2>
<table>
<thead>
<tr>
<th>Компонент</th>
<th>Требование</th>
<th>Примечание</th>
</tr>
</thead>
<tbody>
<tr>
<td>RouterOS</td>
<td>7.x (рекомендуется 7.14+)</td>
<td>Bridge VLAN Filtering — только ROS 7. В ROS 6 синтаксис другой</td>
</tr>
<tr>
<td>RouterOS 6.x</td>
<td>6.49.x — ограниченная поддержка</td>
<td>Часть команд отличается, hardware offload настраивается иначе</td>
</tr>
<tr>
<td>Оборудование</td>
<td>Любой MikroTik с bridge-портами</td>
<td>Для hardware offload нужен switch chip: CRS3xx, RB5009, hEX</td>
</tr>
<tr>
<td>Доступ</td>
<td>Full или Write через WinBox/SSH</td>
<td>—</td>
</tr>
<tr>
<td>Резервный доступ</td>
<td>Serial console или физический доступ</td>
<td>Обязателен перед включением vlan-filtering</td>
</tr>
</tbody>
</table>
<p>На момент публикации актуальна RouterOS 7.18. Перед настройкой проверь свежие релизы на <a href="https://mikrotik.com/download" target="_blank" rel="noopener">mikrotik.com/download</a>.</p>
<h2>Зачем вообще нужны VLAN на MikroTik</h2>
<p>VLAN (Virtual LAN) делит одну физическую сеть на несколько изолированных логических сегментов. Трафик между ними идёт только через маршрутизатор — и только если ты это явно разрешил.</p>
<p>Типичный сценарий: один роутер, один коммутатор, три задачи — офисная сеть, гостевой Wi-Fi и управление оборудованием. Без VLAN все три сегмента видят друг друга. Гость подключился к Wi-Fi — и теоретически достучится до принтера в офисе или до интерфейса управления роутером. С VLAN каждый сегмент живёт в своей изоляции.</p>
<p>Ещё три практических кейса:</p>
<p><strong>Офис + гости + IoT.</strong> Умные лампочки и камеры в VLAN 30 не видят рабочие машины в VLAN 10. Взлом термостата не даёт доступа к файловому серверу.</p>
<p><strong>VoIP-телефония.</strong> Голосовой трафик в отдельном VLAN с QoS. Никакой деградации качества от файловых копирований в офисной <a class="wpil_keyword_link" href="https://it-apteka.com/category/networks/" target="_blank" rel="noopener" title="Сети" data-wpil-keyword-link="linked" data-wpil-monitor-id="2320">сети</a>.</p>
<p><strong>Разделение сред.</strong> Dev, staging и production в разных VLAN на одном железе. Разработчик не попадёт в продакшн случайно.</p>
<h2>Архитектура: как выглядит сеть с несколькими VLAN</h2>
<p>Сначала схема — потом команды. Понять топологию сейчас значит не тратить час на отладку потом.</p>
<pre class="mermaid">%%{init: {
'theme': 'base',
'themeVariables': {
'primaryColor': '#ffffff',
'primaryTextColor': '#1e293b',
'primaryBorderColor': '#94a3b8',
'lineColor': '#64748b',
'fontSize': '15px',
'fontFamily': 'ui-sans-serif, system-ui, sans-serif'
},
'flowchart': {'curve': 'linear', 'nodeSpacing': 50, 'rankSpacing': 50}
}}%%
flowchart TD
INET["Интернет (WAN)"]
MT["MikroTik RouterOS 7"]
SW["Управляемый коммутатор"]
AP["Точка доступа Wi-Fi"]
V10["VLAN 10 - Офис"]
V20["VLAN 20 - Гости"]
V30["VLAN 30 - IoT"]
V99["VLAN 99 - Management"]
PC["ПК офиса"]
GUEST["Ноутбук гостя"]
IOT["Камера / умный дом"]
ADMIN["Ноутбук администратора"]
INET -->|"ether1 - WAN"| MT
MT -->|"ether2 - trunk tagged 10,20,30,99"| SW
SW -->|"trunk tagged 10,20"| AP
SW -->|"access untagged pvid=10"| PC
SW -->|"access untagged pvid=30"| IOT
AP -->|"SSID Office - VLAN 10"| V10
AP -->|"SSID Guest - VLAN 20"| V20
SW -->|"access untagged pvid=99"| ADMIN
MT --> V10
MT --> V20
MT --> V30
MT --> V99
V10 --- PC
V20 --- GUEST
V30 --- IOT
V99 --- ADMIN
style MT fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
style V99 fill:#f8fafc,stroke:#22c55e,stroke-width:2px,color:#15803d
style V10 fill:#f8fafc,stroke:#3b82f6,stroke-width:1px,color:#1e293b
style V20 fill:#f8fafc,stroke:#94a3b8,stroke-width:1px,color:#1e293b
style V30 fill:#f8fafc,stroke:#94a3b8,stroke-width:1px,color:#1e293b
style ADMIN fill:#f8fafc,stroke:#22c55e,stroke-width:2px,color:#15803d
style INET fill:#f8fafc,stroke:#94a3b8,stroke-width:1px,color:#1e293b
style SW fill:#f8fafc,stroke:#94a3b8,stroke-width:1px,color:#1e293b
style AP fill:#f8fafc,stroke:#94a3b8,stroke-width:1px,color:#1e293b
style PC fill:#f8fafc,stroke:#94a3b8,stroke-width:1px,color:#1e293b
style GUEST fill:#f8fafc,stroke:#94a3b8,stroke-width:1px,color:#1e293b
style IOT fill:#f8fafc,stroke:#f97316,stroke-width:1px,color:#9a3412
</pre>
<p>Ключевое из схемы: MikroTik видит все VLAN через один trunk-порт. Каждый VLAN — это отдельный VLAN-интерфейс поверх bridge1 с собственным IP-адресом (gateway). Маршрутизация между VLAN идёт через RouterOS и контролируется firewall-правилами.</p>
<h2>Три термина которые надо понять до начала</h2>
<p><strong>Tagged (trunk) порт</strong> — пропускает трафик нескольких VLAN с тегами 802.1Q. Используется между коммутаторами, между коммутатором и роутером, между коммутатором и точкой доступа. Устройство на другом конце обязано понимать теги.</p>
<p><strong>Untagged (access) порт</strong> — пропускает трафик одного VLAN без тега. Используется для подключения конечных устройств: ПК, камер, телефонов. Устройство не знает про VLAN — получает обычный Ethernet-фрейм.</p>
<p><strong>PVID (Port VLAN ID)</strong> — VLAN ID, в который попадает нетегированный трафик входящий на порт. Если ПК подключён к порту с pvid=10, его трафик попадает в VLAN 10. Это и есть «access VLAN».</p>
<table>
<thead>
<tr>
<th>Тип порта</th>
<th>Тег на входе</th>
<th>Тег на выходе</th>
<th>Применение</th>
</tr>
</thead>
<tbody>
<tr>
<td>Trunk (tagged)</td>
<td>Несколько VLAN ID</td>
<td>Сохраняет теги</td>
<td>Коммутатор-роутер, коммутатор-AP</td>
</tr>
<tr>
<td>Access (untagged)</td>
<td>Нетегированный</td>
<td>Снимает тег</td>
<td>ПК, камера, IoT, телефон</td>
</tr>
<tr>
<td>Hybrid</td>
<td>Нетегированный + теги</td>
<td>Native без тега, остальные с тегом</td>
<td>IP-телефон с ПК на одном порту</td>
</tr>
</tbody>
</table>
<h2>Рецепт: настройка VLAN на MikroTik RouterOS 7 — пошагово</h2>
<h3>Подготовка: сначала бэкап</h3>
<p>Не пропускай этот шаг. Включение vlan-filtering без правильно заполненной таблицы моментально режет доступ. С бэкапом это исправляется за минуту. Без бэкапа — за час через serial console.</p>
<pre><code class="language-bash">
# Экспорт текущего конфига
/export file=backup-before-vlan
# Скачать с устройства через SCP (с Linux/Mac)
scp admin@192.168.88.1:backup-before-vlan.rsc ./
</code></pre>
<p>Скачай файл на локальную машину. Файл в памяти роутера — не бэкап, а иллюзия бэкапа.</p>
<h3>Шаг 1. Создай bridge</h3>
<p>Bridge — это виртуальный коммутатор внутри RouterOS. Физические порты добавляются в него как участники. vlan-filtering=no пока — включим в самом конце, когда таблица будет готова.</p>
<pre><code class="language-bash">
# Создаём bridge без vlan-filtering (принципиально!)
/interface bridge
add name=bridge1 vlan-filtering=no comment="Main bridge"
</code></pre>
<h3>Шаг 2. Добавь порты в bridge с правильным pvid</h3>
<p>pvid определяет в какой VLAN попадает нетегированный трафик. Для trunk-порта pvid=1 (он принимает только тегированный трафик). Для access-портов pvid = ID нужного VLAN.</p>
<pre><code class="language-bash">
# Trunk-порт к коммутатору (или WAN если нужен тегированный uplink)
/interface bridge port
add bridge=bridge1 interface=ether1 pvid=1 comment="Trunk to switch"
# Access-порты для конечных устройств
add bridge=bridge1 interface=ether2 pvid=99 comment="Management admin port"
add bridge=bridge1 interface=ether3 pvid=10 comment="Office VLAN 10"
add bridge=bridge1 interface=ether4 pvid=20 comment="Guest VLAN 20"
add bridge=bridge1 interface=ether5 pvid=30 comment="IoT VLAN 30"
</code></pre>
<h3>Шаг 3. Заполни VLAN-таблицу bridge</h3>
"tagged=bridge1
<br />
bridge1 — это CPU port RouterOS. Если не добавить bridge1 в tagged, сам роутер не увидит тегированный трафик этого VLAN. IP будет назначен, пинг не пойдёт, DHCP не ответит. Самая частая ошибка в <a href="https://it-apteka.com/nastrojka-ntp-na-mikrotik-klient-i-server-shpargalka-dlja-ros-6-i-7/" title="Настройка NTP MikroTik: клиент, сервер и всё что ломается без него" target="_blank" rel="noopener" data-wpil-monitor-id="2548">настройке VLAN на MikroTik</a>.<br />
<pre><code class="language-bash">
/interface bridge vlan
# VLAN 99 - Management
# tagged=bridge1 - CPU RouterOS получает тегированный трафик
# tagged=ether1 - trunk пропускает VLAN 99 с тегом
# untagged=ether2 - admin-порт получает трафик без тега
add bridge=bridge1 vlan-ids=99 tagged=bridge1,ether1 untagged=ether2 comment="Management"
# VLAN 10 - Офис
add bridge=bridge1 vlan-ids=10 tagged=bridge1,ether1 untagged=ether3 comment="Office"
# VLAN 20 - Гости
add bridge=bridge1 vlan-ids=20 tagged=bridge1,ether1 untagged=ether4 comment="Guest"
# VLAN 30 - IoT
add bridge=bridge1 vlan-ids=30 tagged=bridge1,ether1 untagged=ether5 comment="IoT"
</code></pre>
<p>Если точка доступа подключена к trunk-порту и должна получать несколько VLAN — добавь её как tagged в нужные VLAN:</p>
<pre><code class="language-bash">
# AP подключена к ether6 - пропускаем VLAN 10 и 20 тегированно
/interface bridge vlan
set [find vlan-ids=10] tagged=bridge1,ether1,ether6
set [find vlan-ids=20] tagged=bridge1,ether1,ether6
</code></pre>
<h3>Шаг 4. Создай VLAN-интерфейсы поверх bridge1</h3>
<p>Важно: поверх bridge1, не поверх ether1. Интерфейс на физическом порту обходит bridge и ломает hardware offload. Это не рекомендация — это правило.</p>
<pre><code class="language-bash">
/interface vlan
add interface=bridge1 vlan-id=99 name=vlan99-mgmt comment="Management VLAN 99"
add interface=bridge1 vlan-id=10 name=vlan10-office comment="Office VLAN 10"
add interface=bridge1 vlan-id=20 name=vlan20-guest comment="Guest VLAN 20"
add interface=bridge1 vlan-id=30 name=vlan30-iot comment="IoT VLAN 30"
</code></pre>
<h3>Шаг 5. Назначь IP-адреса на VLAN-интерфейсы</h3>
<pre><code class="language-bash">
/ip address
add address=192.168.99.1/24 interface=vlan99-mgmt comment="Management gateway"
add address=192.168.10.1/24 interface=vlan10-office comment="Office gateway"
add address=192.168.20.1/24 interface=vlan20-guest comment="Guest gateway"
add address=192.168.30.1/24 interface=vlan30-iot comment="IoT gateway"
</code></pre>
<h3>Шаг 6. Настрой DHCP-серверы</h3>
<p>DHCP привязывается к VLAN-интерфейсам, не к физическим портам. Иначе клиент получает IP из чужого пула — или не получает вообще.</p>
<pre><code class="language-bash">
# Пулы адресов
/ip pool
add name=pool-mgmt ranges=192.168.99.10-192.168.99.20
add name=pool-office ranges=192.168.10.10-192.168.10.254
add name=pool-guest ranges=192.168.20.10-192.168.20.254
add name=pool-iot ranges=192.168.30.10-192.168.30.254
# DHCP-серверы — на VLAN-интерфейсах
/ip dhcp-server
add name=dhcp-mgmt interface=vlan99-mgmt address-pool=pool-mgmt disabled=no
add name=dhcp-office interface=vlan10-office address-pool=pool-office disabled=no
add name=dhcp-guest interface=vlan20-guest address-pool=pool-guest disabled=no
add name=dhcp-iot interface=vlan30-iot address-pool=pool-iot disabled=no
# Сети DHCP
/ip dhcp-server network
add address=192.168.99.0/24 gateway=192.168.99.1 dns-server=192.168.99.1
add address=192.168.10.0/24 gateway=192.168.10.1 dns-server=8.8.8.8
add address=192.168.20.0/24 gateway=192.168.20.1 dns-server=8.8.8.8
add address=192.168.30.0/24 gateway=192.168.30.1 dns-server=8.8.8.8
</code></pre>
<h3>Шаг 7. Настрой ingress-filtering и frame-types</h3>
<p>Без этого возможен VLAN hopping: атакующий с access-порта отправляет двойной тег и попадает в чужой VLAN. frame-types закрывает эту дыру на уровне L2 — физически. Access-порт просто не пропустит тегированный кадр.</p>
<table>
<thead>
<tr>
<th>Тип порта</th>
<th>ingress-filtering</th>
<th>frame-types</th>
<th>pvid</th>
</tr>
</thead>
<tbody>
<tr>
<td>Trunk (uplink, к коммутатору)</td>
<td>yes</td>
<td>admit-only-vlan-tagged</td>
<td>1</td>
</tr>
<tr>
<td>Access (ПК, камера, IoT)</td>
<td>yes</td>
<td>admit-only-untagged-and-priority-tagged</td>
<td>= ID нужного VLAN</td>
</tr>
<tr>
<td>Management (ноутбук администратора)</td>
<td>yes</td>
<td>admit-only-untagged-and-priority-tagged</td>
<td>99</td>
</tr>
<tr>
<td>Trunk к AP (Wi-Fi)</td>
<td>yes</td>
<td>admit-only-vlan-tagged</td>
<td>1</td>
</tr>
<tr>
<td>Hybrid (IP-телефон + ПК)</td>
<td>yes</td>
<td>admit-all</td>
<td>= native VLAN телефона</td>
</tr>
</tbody>
</table>
<pre><code class="language-bash">
# Trunk-порт: только тегированный трафик
/interface bridge port
set [find interface=ether1] ingress-filtering=yes \
frame-types=admit-only-vlan-tagged
# Access-порты: только нетегированный трафик
set [find interface=ether2] ingress-filtering=yes \
frame-types=admit-only-untagged-and-priority-tagged
set [find interface=ether3] ingress-filtering=yes \
frame-types=admit-only-untagged-and-priority-tagged
set [find interface=ether4] ingress-filtering=yes \
frame-types=admit-only-untagged-and-priority-tagged
set [find interface=ether5] ingress-filtering=yes \
frame-types=admit-only-untagged-and-priority-tagged
</code></pre>
<h3>Шаг 8. Закрой управление через firewall</h3>
"Порядок
<br />
В MikroTik firewall filter применяется сверху вниз — первое совпавшее правило выигрывает. Правило разрешения для VLAN 99 должно стоять выше правила запрета. Ставь его place-before=0.<br />
<pre><code class="language-bash">
# Interface list для management VLAN
/interface list
add name=management comment="Management VLAN interfaces"
/interface list member
add interface=vlan99-mgmt list=management
# Разрешаем управление ТОЛЬКО с management VLAN
/ip firewall filter
add chain=input in-interface-list=management protocol=tcp \
dst-port=22,80,443,8291,8728,8729 action=accept \
comment="Allow management from VLAN99" place-before=0
# Блокируем управление отовсюду ещё
add chain=input in-interface-list=!management protocol=tcp \
dst-port=22,80,443,8291,8728,8729 action=drop \
comment="Block management from all other VLANs"
# Изоляция между VLAN: гости не видят офис
add chain=forward in-interface=vlan20-guest \
out-interface=vlan10-office action=drop \
comment="Block Guest -> Office"
# IoT не лезет никуда кроме интернета
add chain=forward in-interface=vlan30-iot \
out-interface=!ether1 action=drop \
comment="IoT -> Internet only"
# Никто не лезет в management
add chain=forward out-interface=vlan99-mgmt action=drop \
comment="Block all -> Management"
# NAT для выхода в интернет
/ip firewall nat
add chain=srcnat out-interface=ether1 action=masquerade
</code></pre>
<h3>Шаг 9. Включи vlan-filtering — последний шаг</h3>
"Критически
<br />
Если включить vlan-filtering до заполнения VLAN-таблицы — bridge начнёт дропать весь трафик непрописанных VLAN. WinBox пропадёт мгновенно. Все шаги 1-8 должны быть выполнены до этой команды.<br />
<pre><code class="language-bash">
# Последняя проверка перед включением
/interface bridge vlan print detail
# Убедись: везде tagged=bridge1
# Убедись: management-порт прописан как untagged в VLAN 99
# Убедись: ты подключён через management-порт (ether2)
# Включаем
/interface bridge set bridge1 vlan-filtering=yes
</code></pre>
<p>WinBox должен остаться живым — если всё настроено правильно. Если пропал — смотри раздел «Осложнения».</p>
<h2>Таблица портов: что открыто и куда</h2>
<table>
<thead>
<tr>
<th>Порт</th>
<th>Протокол</th>
<th>Назначение</th>
<th>Доступен снаружи</th>
</tr>
</thead>
<tbody>
<tr>
<td>8291/TCP</td>
<td>WinBox</td>
<td>Графический клиент управления MikroTik</td>
<td>Нет — только VLAN 99</td>
</tr>
<tr>
<td>22/TCP</td>
<td>SSH</td>
<td>CLI-доступ к RouterOS</td>
<td>Нет — только VLAN 99</td>
</tr>
<tr>
<td>80/TCP</td>
<td>HTTP</td>
<td>WebFig (отключить если не нужен)</td>
<td>Нет — только VLAN 99</td>
</tr>
<tr>
<td>443/TCP</td>
<td>HTTPS</td>
<td>WebFig HTTPS</td>
<td>Нет — только VLAN 99</td>
</tr>
<tr>
<td>8728/TCP</td>
<td>API</td>
<td>RouterOS API</td>
<td>Нет — только VLAN 99</td>
</tr>
<tr>
<td>53/UDP</td>
<td>DNS</td>
<td>DNS-сервер для клиентов VLAN</td>
<td>Только из разрешённых VLAN</td>
</tr>
<tr>
<td>67/UDP</td>
<td>DHCP</td>
<td>DHCP-сервер для клиентов</td>
<td>Только из соответствующего VLAN</td>
</tr>
</tbody>
</table>
<h2>CPU Port и tagged=bridge1: почему без этого ничего не работает</h2>
<h3>Что такое CPU port в RouterOS</h3>
<p>Bridge-интерфейс в MikroTik — это не просто логический объект. Это ещё и CPU port: виртуальный порт, через который сам RouterOS участвует в работе bridge как отдельный участник коммутации.</p>
<p>Когда создаёшь bridge и добавляешь физические порты — RouterOS видит такую картину:</p>
<table>
<thead>
<tr>
<th>Порт</th>
<th>Тип</th>
<th>Кто использует</th>
</tr>
</thead>
<tbody>
<tr>
<td>ether1</td>
<td>Физический</td>
<td>Внешний трафик</td>
</tr>
<tr>
<td>ether2, ether3…</td>
<td>Физический</td>
<td>Клиентские устройства</td>
</tr>
<tr>
<td><strong>bridge1</strong></td>
<td><strong>CPU port (виртуальный)</strong></td>
<td><strong>Сам RouterOS: IP-стек, DHCP, firewall, routing</strong></td>
</tr>
</tbody>
</table>
<p>Когда создаёшь /interface vlan vlan-id=10 interface=bridge1 и назначаешь IP — этот адрес принадлежит CPU. Чтобы CPU мог получать тегированный трафик VLAN 10, bridge1 должен стоять в VLAN-таблице как tagged.</p>
<pre class="mermaid">%%{init: {
'theme': 'base',
'themeVariables': {
'primaryColor': '#ffffff',
'primaryTextColor': '#1e293b',
'primaryBorderColor': '#94a3b8',
'lineColor': '#64748b',
'fontSize': '15px',
'fontFamily': 'ui-sans-serif, system-ui, sans-serif'
},
'flowchart': {'curve': 'linear', 'nodeSpacing': 50, 'rankSpacing': 50}
}}%%
flowchart LR
TRUNK["ether1 (trunk)"]
BRIDGE["bridge1 (CPU port)"]
VLAN10["vlan10 interface"]
DHCP["DHCP server"]
FW["Firewall"]
IP["IP 192.168.10.1"]
TRUNK -->|"VLAN 10 tagged"| BRIDGE
BRIDGE -->|"tagged=bridge1 обязателен"| VLAN10
VLAN10 --> DHCP
VLAN10 --> FW
VLAN10 --> IP
style BRIDGE fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
style VLAN10 fill:#f8fafc,stroke:#22c55e,stroke-width:2px,color:#15803d
style TRUNK fill:#f8fafc,stroke:#94a3b8,stroke-width:1px,color:#1e293b
style DHCP fill:#f8fafc,stroke:#94a3b8,stroke-width:1px,color:#1e293b
style FW fill:#f8fafc,stroke:#f97316,stroke-width:1px,color:#9a3412
style IP fill:#f8fafc,stroke:#94a3b8,stroke-width:1px,color:#1e293b
</pre>
<h3>Что сломается без tagged=bridge1</h3>
<table>
<thead>
<tr>
<th>Ситуация</th>
<th>Без tagged=bridge1</th>
<th>С tagged=bridge1</th>
</tr>
</thead>
<tbody>
<tr>
<td>VLAN-интерфейс создан, IP назначен</td>
<td>IP есть, пинг не идёт</td>
<td>Всё работает</td>
</tr>
<tr>
<td>DHCP-сервер на VLAN-интерфейсе</td>
<td>DHCP не отвечает клиентам</td>
<td>DHCP работает</td>
</tr>
<tr>
<td>Firewall-правила на VLAN-интерфейсе</td>
<td>Правила не применяются</td>
<td>Правила работают</td>
</tr>
<tr>
<td>Inter-VLAN routing</td>
<td>Маршрутизация не работает</td>
<td>Маршрутизация работает</td>
</tr>
<tr>
<td>WinBox / SSH через VLAN</td>
<td>Нет доступа</td>
<td>Доступ есть</td>
</tr>
</tbody>
</table>
<pre><code class="language-bash">
# Неправильно: bridge1 не в tagged
/interface bridge vlan
add bridge=bridge1 vlan-ids=10 tagged=ether1 untagged=ether3
# Результат: IP есть, пинг не идёт
# Правильно: bridge1 в tagged
/interface bridge vlan
add bridge=bridge1 vlan-ids=10 tagged=bridge1,ether1 untagged=ether3
# Результат: всё работает
</code></pre>
<p>Правило одно: если на VLAN есть VLAN-интерфейс с IP, DHCP-сервер или любой сервис RouterOS — bridge1 обязан быть в tagged. Исключение — чистый L2-коммутатор без IP на VLAN.</p>
<h2>Hardware Offload: производительность без нагрузки на CPU</h2>
<h3>Зачем это нужно</h3>
<p>Hardware offload — режим, при котором коммутация VLAN-трафика выполняется аппаратным switch chip, а не процессором RouterOS. Трафик не проходит через CPU вообще — обрабатывается на железе со скоростью линии.</p>
<table>
<thead>
<tr>
<th>Режим</th>
<th>Кто обрабатывает</th>
<th>Производительность</th>
<th>Нагрузка на CPU</th>
</tr>
</thead>
<tbody>
<tr>
<td>Hardware offload</td>
<td>Switch chip</td>
<td>Line rate (wire speed)</td>
<td>Минимальная</td>
</tr>
<tr>
<td>CPU forwarding</td>
<td>Процессор RouterOS</td>
<td>Ограничена мощностью CPU</td>
<td>Высокая при нагрузке</td>
</tr>
</tbody>
</table>
<p>На RB951 без offload CPU упирается при 200-300 Мбит/с коммутации. На CRS326 с offload — линейные 10 Гбит/с без нагрузки. Разница принципиальная если гоняешь много L2-трафика.</p>
<h3>Какие устройства поддерживают hardware offload</h3>
<table>
<thead>
<tr>
<th>Устройство</th>
<th>Hardware Offload VLAN</th>
<th>Особенности</th>
</tr>
</thead>
<tbody>
<tr>
<td>CRS3xx (CRS326, CRS317)</td>
<td>Да, полный</td>
<td>Marvell switch chip, wire speed 1G/10G. Лучший вариант для VLAN-коммутации</td>
</tr>
<tr>
<td>RB5009UG+S+IN</td>
<td>Да, полный</td>
<td>Marvell Amethyst. Хорошо справляется с Bridge VLAN Filtering</td>
</tr>
<tr>
<td>hEX (RB750Gr3)</td>
<td>Да, с ограничениями</td>
<td>MT7621 switch chip. Offload работает, но часть функций его отключает</td>
</tr>
<tr>
<td>hAP ax3 / ax2</td>
<td>Частично</td>
<td>IPQ-6010. Проводные порты — offload, Wi-Fi трафик — через CPU</td>
</tr>
<tr>
<td>CCR2004, CCR2116</td>
<td>Обычно CPU forwarding</td>
<td>Маршрутизаторы без switch chip. Высокий CPU компенсирует</td>
</tr>
<tr>
<td>RB951, hAP lite, hAP mini</td>
<td>Нет</td>
<td>Нет switch chip. Весь трафик через CPU. Всегда</td>
</tr>
</tbody>
</table>
<h3>Что отключает hardware offload</h3>
<table>
<thead>
<tr>
<th>Функция</th>
<th>Влияние на offload</th>
</tr>
</thead>
<tbody>
<tr>
<td>Firewall на bridge (use-ip-firewall=yes)</td>
<td>Отключает полностью</td>
</tr>
<tr>
<td>Bridge filter rules</td>
<td>Отключает полностью</td>
</tr>
<tr>
<td>Порты из разных switch chip в одном bridge</td>
<td>Отключает полностью</td>
</tr>
<tr>
<td>Mirror на порту</td>
<td>Отключает на этом порту</td>
</tr>
<tr>
<td>Horizon на порту</td>
<td>Отключает на этом порту</td>
</tr>
<tr>
<td>VLAN-интерфейс на ether вместо bridge</td>
<td>Обходит bridge — offload не задействован</td>
</tr>
</tbody>
</table>
<h3>Как проверить hardware offload</h3>
<pre><code class="language-bash">
# Флаг H на портах = hardware offload активен
/interface bridge port print
# Детальная проверка
/interface bridge port print detail where bridge=bridge1
# Ищем: hw: yes
</code></pre>
<p>Типичный вывод с включённым offload:</p>
<pre><code class="language-bash">
Flags: X - disabled, I - inactive, D - dynamic, H - hw-offload
# INTERFACE BRIDGE HW PVID
0 H ether1 bridge1 yes 1
1 H ether2 bridge1 yes 99
2 H ether3 bridge1 yes 10
3 H ether4 bridge1 yes 20
</code></pre>
<p>Нет флага H — смотри таблицу выше. Чаще всего причина: bridge filter rules или Firewall Bridge включены.</p>
<h2>Проверка: убедись что VLAN работает</h2>
<pre><code class="language-bash">
# 1. VLAN-таблица - bridge1 везде в tagged?
/interface bridge vlan print detail
# 2. PVID на портах корректный?
/interface bridge port print
# 3. MAC клиента в нужном VLAN?
/interface bridge host print where vlan-id=10
# 4. IP на VLAN-интерфейсах назначен?
/ip address print where interface~"vlan"
# 5. DHCP-серверы запущены?
/ip dhcp-server print
# 6. Пинг с gateway VLAN 10 до клиента
/ping 192.168.10.100 src-address=192.168.10.1 count=5
# 7. Живой трафик на trunk - видны VLAN ID?
/tool torch interface=ether1
# 8. Hardware offload активен?
/interface bridge port print
# Ищи флаг H на портах
</code></pre>
<h2>VLAN для Wi-Fi на MikroTik</h2>
<h3>Как работает VLAN на точке доступа</h3>
<p>Точка доступа подключается к trunk-порту коммутатора. Каждый SSID маппируется в свой VLAN. Трафик от клиентов Wi-Fi приходит на MikroTik с тегами — как обычный trunk-трафик.</p>
<p>Ключевой параметр: local-forwarding=no в datapath CAPsMAN. При local-forwarding=yes трафик коммутируется прямо на AP без тегов — VLAN не применяется. Это самая частая ошибка при настройке Wi-Fi VLAN.</p>
<h3>Настройка CAPsMAN с VLAN (RouterOS 7, WiFiWave2)</h3>
<pre><code class="language-bash">
# Создаём datapath для офисного SSID
# local-forwarding=no - трафик идёт через роутер с тегом
/interface wifi datapath
add name=dp-office vlan-id=10 vlan-mode=use-tag local-forwarding=no \
comment="Office SSID -> VLAN 10"
add name=dp-guest vlan-id=20 vlan-mode=use-tag local-forwarding=no \
comment="Guest SSID -> VLAN 20"
# Конфигурации SSID
/interface wifi configuration
add name=cfg-office ssid="Office" datapath=dp-office \
security.authentication-types=wpa2-psk security.passphrase="office-pass"
add name=cfg-guest ssid="Guest" datapath=dp-guest \
security.authentication-types=wpa2-psk security.passphrase="guest-pass"
# Применяем к точкам доступа
/interface wifi
set [find name=wifi1] configuration=cfg-office
set [find name=wifi2] configuration=cfg-guest
</code></pre>
<p>После этого убедись что в VLAN-таблице bridge порт к AP добавлен как tagged для VLAN 10 и 20:</p>
<pre><code class="language-bash">
# ether6 - порт к которому подключена AP
/interface bridge vlan
set [find vlan-ids=10] tagged=bridge1,ether1,ether6
set [find vlan-ids=20] tagged=bridge1,ether1,ether6
</code></pre>
<h2>Management VLAN на MikroTik: управление в изоляции</h2>
<p>Management VLAN — отдельный сегмент для доступа к управлению оборудованием. WinBox, SSH, WebFig — только из VLAN 99. Компрометация офисного или гостевого VLAN не даёт доступа к управлению роутером.</p>
<h3>Что выносить в management VLAN</h3>
<table>
<thead>
<tr>
<th>Оборудование</th>
<th>Интерфейс управления</th>
<th>Порт/протокол</th>
</tr>
</thead>
<tbody>
<tr>
<td>MikroTik RouterOS</td>
<td>WinBox, WebFig, SSH, API</td>
<td>8291, 80, 443, 22</td>
</tr>
<tr>
<td>Управляемый коммутатор</td>
<td>Web-интерфейс, SSH, Telnet</td>
<td>80, 443, 22, 23</td>
</tr>
<tr>
<td>Точка доступа (AP)</td>
<td>Web-интерфейс, CAPsMAN</td>
<td>80, 443</td>
</tr>
<tr>
<td>Гипервизор (<a class="wpil_keyword_link" href="https://it-apteka.com/category/virtualise/" target="_blank" rel="noopener" title="Виртуализация" data-wpil-keyword-link="linked" data-wpil-monitor-id="2322">Proxmox</a>, ESXi)</td>
<td>Web-интерфейс, SSH</td>
<td>8006, 443, 22</td>
</tr>
<tr>
<td>Сервер (IPMI, iDRAC, iLO)</td>
<td>Out-of-band management</td>
<td>80, 443, 623</td>
</tr>
</tbody>
</table>
<p>Конфигурация Management VLAN уже описана в шагах выше: VLAN 99, pvid=99 на управляющем порту, tagged=bridge1,ether1 untagged=ether2, firewall блокирует управление отовсюду кроме vlan99-mgmt.</p>
<h3>Как не потерять доступ после vlan-filtering=yes</h3>
<table>
<thead>
<tr>
<th>Шаг</th>
<th>Что проверить до включения vlan-filtering=yes</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>Порт через который ты управляешь добавлен в bridge с правильным pvid</td>
</tr>
<tr>
<td>2</td>
<td>Этот VLAN прописан в /interface bridge vlan с untagged=твой порт</td>
</tr>
<tr>
<td>3</td>
<td>tagged=bridge1 указан для этого VLAN</td>
</tr>
<tr>
<td>4</td>
<td>VLAN-интерфейс создан поверх bridge1 и имеет IP-адрес</td>
</tr>
<tr>
<td>5</td>
<td>Сделан /export file=backup-before-vlan</td>
</tr>
</tbody>
</table>
<p>Если всё же потерял доступ — serial console и откат:</p>
<pre><code class="language-bash">
# Откат через serial console (115200 baud, 8N1)
/interface bridge set bridge1 vlan-filtering=no
# Доступ вернётся. Исправляй VLAN-таблицу и включай снова.
</code></pre>
<h2>Безопасность: полный периметр</h2>
<h3>SSH hardening</h3>
<pre><code class="language-bash">
# Ограничиваем сервисы управления только management-подсетью
/ip service
set ssh address=192.168.99.0/24 port=22
set winbox address=192.168.99.0/24
set www address=192.168.99.0/24
set www-ssl address=192.168.99.0/24
set api address=192.168.99.0/24
set api-ssl address=192.168.99.0/24
# Отключаем небезопасные сервисы
set telnet disabled=yes
set ftp disabled=yes
</code></pre>
<h3>Защита от брутфорса (аналог fail2ban)</h3>
<pre><code class="language-bash">
# Блокируем на 10 минут тех кто попробовал подключиться 5+ раз
/ip firewall filter
add chain=input protocol=tcp dst-port=22,8291 \
src-address-list=blocked-mgmt action=drop \
comment="Block brute force"
add chain=input protocol=tcp dst-port=22,8291 \
connection-state=new src-address-list=mgmt-bf-2 \
action=add-src-to-address-list address-list=blocked-mgmt \
address-list-timeout=10m
add chain=input protocol=tcp dst-port=22,8291 \
connection-state=new src-address-list=mgmt-bf-1 \
action=add-src-to-address-list address-list=mgmt-bf-2 \
address-list-timeout=1m
add chain=input protocol=tcp dst-port=22,8291 \
connection-state=new \
action=add-src-to-address-list address-list=mgmt-bf-1 \
address-list-timeout=1m
</code></pre>
<h3>Логирование попыток доступа к управлению</h3>
<pre><code class="language-bash">
# Логировать отклонённые попытки управления
/ip firewall filter
set [find comment="Block management from all other VLANs"] \
log=yes log-prefix="MGMT-BLOCK:"
# Смотреть логи
/log print where message~"MGMT-BLOCK"
</code></pre>
<h3>Резервное копирование конфига</h3>
<pre><code class="language-bash">
# Ручной экспорт (текстовый, можно редактировать)
/export file=vlan-config-$(date)
# Бинарный бэкап (включает пароли)
/system backup save name=vlan-backup
# Автобэкап раз в неделю
/system scheduler
add name=weekly-backup interval=7d \
on-event="/export file=auto-backup; /system backup save name=auto-backup-bin" \
comment="Weekly config backup"
</code></pre>
<p>Где хранить: скачивай через WinBox (Files) или SCP на отдельный сервер в management VLAN. Три копии: две локально, одна офлайн — минимальный стандарт.</p>
<h3>Безопасное обновление RouterOS</h3>
<pre><code class="language-bash">
# Проверить версию
/system resource print
# Проверить доступные обновления
/system package update check-for-updates
# Сделать бэкап перед обновлением
/export file=pre-update-backup
/system backup save name=pre-update-bin
# Обновить (роутер перезагрузится)
/system package update install
</code></pre>
<p>Перед обновлением читай changelog на <a href="https://mikrotik.com/download/changelogs/" target="_blank" rel="noopener">mikrotik.com/download/changelogs</a>. Изменения в bridge и vlan-filtering были в нескольких релизах — важно знать что поменялось.</p>
<h2>Диагностика VLAN на MikroTik: полная таблица команд</h2>
<table>
<thead>
<tr>
<th>Команда</th>
<th>Что показывает</th>
<th>Когда использовать</th>
</tr>
</thead>
<tbody>
<tr>
<td>/interface bridge vlan print</td>
<td>VLAN-таблица bridge: tagged/untagged порты, VLAN ID</td>
<td>Первый шаг любой диагностики VLAN</td>
</tr>
<tr>
<td>/interface bridge vlan print detail</td>
<td>То же, с полным списком портов и флагами</td>
<td>Проверить tagged=bridge1, найти дублирование</td>
</tr>
<tr>
<td>/interface bridge port print</td>
<td>Порты bridge: pvid, hw-offload (флаг H), состояние</td>
<td>Проверить PVID, убедиться что offload активен</td>
</tr>
<tr>
<td>/interface bridge host print</td>
<td>MAC-адреса: на каком порту изучены, в каком VLAN</td>
<td>Убедиться что клиент попал в нужный VLAN</td>
</tr>
<tr>
<td>/interface bridge monitor bridge1</td>
<td>Состояние bridge: активные порты, STP root, offload</td>
<td>Проблемы с STP, проверка общего состояния</td>
</tr>
<tr>
<td>/ip address print</td>
<td>IP-адреса на VLAN-интерфейсах</td>
<td>Убедиться что IP назначен на vlan10, а не ether1</td>
</tr>
<tr>
<td>/ip route print</td>
<td>Таблица маршрутизации</td>
<td>Проверить наличие маршрутов до всех VLAN-сетей</td>
</tr>
<tr>
<td>/ip <a class="wpil_keyword_link" href="https://it-apteka.com/tag/arp/" target="_blank" rel="noopener" title="arp" data-wpil-keyword-link="linked" data-wpil-monitor-id="2323">arp</a> print</td>
<td>ARP-таблица: IP + MAC + интерфейс</td>
<td>Проблемы inter-VLAN routing, пропавшие хосты</td>
</tr>
<tr>
<td>/tool torch interface=ether1</td>
<td>Трафик в реальном времени: VLAN ID, src/dst, протоколы</td>
<td>Проверить что теги реально присутствуют на trunk</td>
</tr>
<tr>
<td>/tool torch interface=vlan10</td>
<td>Трафик через конкретный VLAN-интерфейс</td>
<td>Убедиться что трафик идёт в нужный VLAN</td>
</tr>
<tr>
<td>/tool sniffer quick vlan-id=10</td>
<td>Захват пакетов с VLAN ID 10 (raw 802.1Q)</td>
<td>Глубокая диагностика, когда torch недостаточно</td>
</tr>
<tr>
<td>/ping X src-address=Y count=5</td>
<td>Пинг с указанием source-IP</td>
<td>Проверить inter-VLAN routing на уровне роутера</td>
</tr>
<tr>
<td>/log print where topics~»bridge»</td>
<td>События bridge: STP, изучение MAC, ошибки</td>
<td>Неожиданные изменения топологии, STP-флапы</td>
</tr>
</tbody>
</table>
<h3>Алгоритм диагностики «VLAN не работает»</h3>
<pre><code class="language-bash">
# Шаг 1. VLAN-таблица — есть bridge1 в tagged?
/interface bridge vlan print detail
# Шаг 2. PVID на проблемном порту
/interface bridge port print where interface=ether3
# Шаг 3. Видит ли bridge MAC клиента? В каком VLAN?
/interface bridge host print
# Шаг 4. IP на VLAN-интерфейсе есть?
/ip address print where interface~"vlan"
# Шаг 5. Маршруты до всех VLAN-сетей?
/ip route print where dst-address~"192.168"
# Шаг 6. Пинг с gateway VLAN 10 до клиента
/ping 192.168.10.100 src-address=192.168.10.1 count=5
# Шаг 7. Живой трафик на trunk
/tool torch interface=ether1
</code></pre>
<h2>Troubleshooting: 13 частых проблем с VLAN на MikroTik</h2>
<table>
<thead>
<tr>
<th>#</th>
<th>Проблема</th>
<th>Симптом</th>
<th>Решение</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>VLAN не пингуется</td>
<td>IP назначен, <a href="https://it-apteka.com/kakoj-vpn-server-ustanovit-na-ubuntu-dlja-nativnogo-podkljuchenija/" title="Настройка IKEv2 VPN сервера на Ubuntu 24.04: StrongSwan без лишних клиентов" target="_blank" rel="noopener" data-wpil-monitor-id="2755">клиент в сети</a>, пинг до gateway не идёт</td>
<td>Проверить tagged=bridge1 в VLAN-таблице. Без него CPU не видит трафик VLAN.</td>
</tr>
<tr>
<td>2</td>
<td>После vlan-filtering=yes пропал доступ</td>
<td>WinBox и SSH перестали отвечать сразу после команды</td>
<td>Serial console -> /interface bridge set bridge1 vlan-filtering=no -> добавить management VLAN в таблицу -> включить снова</td>
</tr>
<tr>
<td>3</td>
<td>VLAN работает только на одном порту</td>
<td>Клиент на ether3 получает IP, на ether4 нет — хотя оба в одном VLAN</td>
<td>Проверить pvid на ether4. Порт должен быть прописан как untagged в VLAN-таблице с нужным VLAN ID</td>
</tr>
<tr>
<td>4</td>
<td>Устройство не получает DHCP</td>
<td>Клиент подключён, DHCP не отвечает</td>
<td>1) Проверить pvid порта. 2) Проверить tagged=bridge1. 3) Убедиться что DHCP-сервер привязан к правильному VLAN-интерфейсу</td>
</tr>
<tr>
<td>5</td>
<td>Wi-Fi SSID не попадает в нужный VLAN</td>
<td>Все SSID в одном VLAN независимо от настроек CAPsMAN</td>
<td>Проверить local-forwarding=no в datapath. При local-forwarding=yes VLAN-тег не применяется</td>
</tr>
<tr>
<td>6</td>
<td>Trunk не пропускает несколько VLAN</td>
<td>Через trunk проходит только один VLAN</td>
<td>Проверить что trunk-порт добавлен как tagged для всех нужных VLAN в /interface bridge vlan</td>
</tr>
<tr>
<td>7</td>
<td>bridge1 не добавлен в tagged</td>
<td>DHCP и пинг не работают, хотя VLAN-интерфейс создан</td>
<td>/interface bridge vlan set [find vlan-ids=10] tagged=bridge1,ether1</td>
</tr>
<tr>
<td>8</td>
<td>PVID не совпадает с VLAN ID</td>
<td>Клиент получает IP из чужого пула или не получает вообще</td>
<td>/interface bridge port set [find interface=ether3] pvid=10 — pvid должен совпадать с ID нужного VLAN</td>
</tr>
<tr>
<td>9</td>
<td>Hardware offload исчез</td>
<td>Флаг H пропал, CPU под нагрузкой на простом L2-трафике</td>
<td>Проверить: включён ли Firewall Bridge, есть ли bridge filter rules, не смешаны ли порты из разных switch chip</td>
</tr>
<tr>
<td>10</td>
<td>Trunk и access порты перепутаны</td>
<td>Конечное устройство не работает, хотя порт добавлен в bridge</td>
<td>Access: pvid = нужный VLAN, запись как untagged. Trunk: pvid=1, запись как tagged во всех VLAN</td>
</tr>
<tr>
<td>11</td>
<td>VLAN-интерфейс создан на ether вместо bridge1</td>
<td>Нестабильная работа, нет hardware offload, трафик мимо bridge</td>
<td>Пересоздать: /interface vlan add interface=bridge1 vlan-id=10 name=vlan10</td>
</tr>
<tr>
<td>12</td>
<td>ingress-filtering блокирует трафик</td>
<td>После включения ingress-filtering трафик пропал на некоторых портах</td>
<td>Проверить что VLAN прописан в таблице для данного порта. ingress-filtering дропает кадры с VLAN ID не прописанными в таблице</td>
</tr>
<tr>
<td>13</td>
<td>Native VLAN конфликтует с management VLAN</td>
<td>Management-трафик появляется в пользовательских VLAN</td>
<td>Не использовать VLAN 1 для management. Явно задать native VLAN на обоих концах trunk-линка и убедиться в совпадении pvid</td>
</tr>
</tbody>
</table>
<h2>Альтернативы: другие подходы к настройке VLAN</h2>
<h3>RouterOS 6: свич-группы вместо Bridge VLAN Filtering</h3>
<p>В RouterOS 6 VLAN настраивается через /interface ethernet switch — отдельный механизм. Bridge VLAN Filtering там либо отсутствует, либо работает иначе. Если ты на ROS 6 и обновляться нельзя — настройка через switch-группы и /interface vlan на физических портах. Это рабочий вариант, но hardware offload там тоже настраивается по-другому.</p>
<h3>IP Services + address binding (без отдельного VLAN)</h3>
<p>Быстрый вариант ограничить доступ к управлению без отдельного management VLAN:</p>
<pre><code class="language-bash">
/ip service
set winbox address=192.168.99.0/24
set ssh address=192.168.99.0/24
</code></pre>
<p>Минус: трафик управления ходит внутри существующих VLAN, только фильтруется по IP. VLAN hopping и компрометация подсети всё ещё угрожают. Для малых установок сойдёт, для продакшна — нет.</p>
<h3>VPN-туннель для удалённого управления</h3>
<p>WireGuard или IPsec туннель в management-подсеть. Никакого открытого WinBox наружу — только через VPN. Хорошо для удалённых объектов, требует дополнительной инфраструктуры.</p>
<p><strong>Почему выбрали Bridge VLAN Filtering.</strong> Это нативный механизм RouterOS 7, работает без дополнительного ПО, поддерживает hardware offload на CRS и RB5009. Изоляция на уровне L2 — до IP-стека. Конфигурация читается в одном месте. В отличие от IP Services — VLAN hopping физически невозможен при правильных frame-types.</p>
<h2>Профилактика: чеклист перед запуском в продакшн</h2>
<table>
<thead>
<tr>
<th>#</th>
<th>Проверка</th>
<th>Команда</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>Конфиг экспортирован до начала работы</td>
<td>/export file=backup-before-vlan</td>
</tr>
<tr>
<td>2</td>
<td>Все нужные VLAN прописаны в таблице bridge</td>
<td>/interface bridge vlan print</td>
</tr>
<tr>
<td>3</td>
<td>Для каждого VLAN с IP указан tagged=bridge1</td>
<td>/interface bridge vlan print detail</td>
</tr>
<tr>
<td>4</td>
<td>PVID на всех access-портах совпадает с нужным VLAN ID</td>
<td>/interface bridge port print</td>
</tr>
<tr>
<td>5</td>
<td>Management VLAN настроен до включения vlan-filtering</td>
<td>—</td>
</tr>
<tr>
<td>6</td>
<td>На trunk-портах frame-types=admit-only-vlan-tagged</td>
<td>/interface bridge port print detail</td>
</tr>
<tr>
<td>7</td>
<td>На access-портах frame-types=admit-only-untagged-and-priority-tagged</td>
<td>/interface bridge port print detail</td>
</tr>
<tr>
<td>8</td>
<td>Hardware offload активен — флаг H на нужных портах</td>
<td>/interface bridge port print</td>
</tr>
<tr>
<td>9</td>
<td>Firewall блокирует управление из не-management VLAN</td>
<td>/ip firewall filter print</td>
</tr>
<tr>
<td>10</td>
<td>DHCP-серверы привязаны к VLAN-интерфейсам, не к ether</td>
<td>/ip dhcp-server print</td>
</tr>
<tr>
<td>11</td>
<td>IP Services ограничены подсетью management VLAN</td>
<td>/ip service print</td>
</tr>
<tr>
<td>12</td>
<td>Serial console доступен как запасной вариант</td>
<td>Физическая проверка</td>
</tr>
</tbody>
</table>
<h2>FAQ: часто задаваемые вопросы о настройке VLAN на MikroTik</h2>
<h3>Почему VLAN на MikroTik не работает после настройки?</h3>
<p>Первым делом: /interface bridge vlan print detail. Проверь что для проблемного VLAN есть tagged=bridge1. Без него CPU RouterOS не получает тегированный трафик — IP назначен, пинг не идёт. Вторая причина: PVID на порту не совпадает с VLAN ID. Третья: vlan-filtering=no забыли включить в конце, или включили раньше времени.</p>
<h3>Как проверить что настройка VLAN работает правильно?</h3>
<p>Четыре проверки: 1) /interface bridge host print — MAC клиента должен быть в нужном VLAN ID. 2) /ping 192.168.10.1 с клиента — пинг до gateway должен проходить. 3) /tool torch interface=ether1 — на trunk должны быть видны нужные VLAN ID. 4) Попробуй подключиться к управлению из не-management VLAN — должен получить отказ.</p>
<h3>Что делать если пропал WinBox после vlan-filtering yes?</h3>
<p>Serial console, 115200 baud, 8N1. Команда: /interface bridge set bridge1 vlan-filtering=no — доступ вернётся. Потом проверяй VLAN-таблицу: management VLAN должен быть с tagged=bridge1 и untagged для твоего порта. И только потом снова vlan-filtering=yes.</p>
<h3>Чем отличается Bridge VLAN Filtering от настройки через switch в RouterOS 6?</h3>
<p>RouterOS 6 использовал /interface ethernet switch для hardware-based VLAN — отдельный механизм с другим синтаксисом. RouterOS 7 Bridge VLAN Filtering — единый унифицированный подход: одна таблица /interface bridge vlan управляет и software и hardware обработкой. Плюс нормальный hardware offload через тот же механизм. Мигрировать конфиг с ROS 6 на ROS 7 напрямую нельзя — нужно переписывать.</p>
<h3>Почему нельзя создавать VLAN-интерфейс на ether вместо bridge1?</h3>
<p>VLAN-интерфейс на физическом порту (ether1) обходит bridge. Трафик не проходит через bridge-механизм, не участвует в VLAN-таблице, hardware offload не задействован. Плюс это создаёт нестабильную конфигурацию — bridge и VLAN-интерфейс на одном физическом порту конфликтуют. Всегда: /interface vlan add interface=bridge1.</p>
<h3>Как работает hardware offload и почему флаг H не появляется?</h3>
<p>Hardware offload включается автоматически когда: Bridge VLAN Filtering включён, все порты bridge на одном switch chip, не используются функции требующие CPU (Firewall Bridge, bridge filter rules, mirror). Чаще всего флага H нет из-за bridge filter rules или use-ip-firewall=yes. Проверь: /interface bridge port print detail — поле hw покажет yes или no с причиной отсутствия offload.</p>
<h3>Как настроить VLAN для гостевого Wi-Fi на MikroTik?</h3>
<p>Создай datapath в CAPsMAN с vlan-id=20 vlan-mode=use-tag local-forwarding=no. Привяжи к SSID. В VLAN-таблице bridge добавь порт к AP как tagged для VLAN 20. В firewall добавь правило запрещающее трафик из VLAN 20 в VLAN 10 (офис). Ключевой момент: local-forwarding=no обязателен — без него VLAN-тег не применяется и весь трафик идёт в один сегмент.</p>
<h2>Итог</h2>
<p>Настройка VLAN на MikroTik по этой схеме даёт: изолированные сегменты для офиса, гостей, IoT и управления; management VLAN с firewall-периметром; hardware offload на поддерживаемых устройствах; защиту от VLAN hopping через ingress-filtering и frame-types.</p>
<p>Три вещи которые ломают VLAN чаще всего: нет tagged=bridge1, vlan-filtering включили раньше времени, VLAN-интерфейс создали на ether вместо bridge1. Все три — в troubleshooting выше с командами исправления.</p>
"Не
<br />
Опиши: версию RouterOS (/system resource print), топологию (какой порт куда подключён), вывод /interface bridge vlan print detail и /interface bridge port print. С этим набором данных проблема решается за один-два ответа.<br />
Быстрый ответ
- Создай bridge, добавь порты с нужным pvid (pvid = ID VLAN для нетегированных устройств)
- Заполни /interface bridge vlan: tagged=bridge1,trunk-port и untagged=access-port для каждого VLAN
- Создай VLAN-интерфейсы поверх bridge1 (не поверх ether!) — назначь IP
- Включи vlan-filtering=yes только в самом конце, после заполнения таблицы
- Проверь: /interface bridge vlan print detail — у каждого VLAN с IP должен быть tagged=bridge1
Диагноз: ты настраивал VLAN, но что-то пошло не так
Настройка VLAN на MikroTik — это один из тех случаев, когда кажется понятно, но не работает. Включил vlan-filtering — пропал WinBox. Назначил IP на VLAN-интерфейс — пинг не идёт. DHCP молчит. Trunk пропускает только один VLAN вместо трёх.
Каждая из этих проблем решается за одну команду. Но только если понимаешь почему она возникла.
Статья закрывает тему полностью: от первого bridge до production-конфига с management VLAN, изоляцией Wi-Fi и защитой от VLAN hopping. Конкретные команды, таблицы с объяснениями, 13 типичных ошибок с решениями.
Что нужно для повторения:
- MikroTik с RouterOS 7.x (команды для ROS 6 там где отличаются — отмечены отдельно)
- Доступ через WinBox или SSH с правами full
- Serial console под рукой — пригодится если vlan-filtering включишь раньше времени
- 15-40 минут в зависимости от сложности топологии
Системные требования
| Компонент |
Требование |
Примечание |
| RouterOS |
7.x (рекомендуется 7.14+) |
Bridge VLAN Filtering — только ROS 7. В ROS 6 синтаксис другой |
| RouterOS 6.x |
6.49.x — ограниченная поддержка |
Часть команд отличается, hardware offload настраивается иначе |
| Оборудование |
Любой MikroTik с bridge-портами |
Для hardware offload нужен switch chip: CRS3xx, RB5009, hEX |
| Доступ |
Full или Write через WinBox/SSH |
— |
| Резервный доступ |
Serial console или физический доступ |
Обязателен перед включением vlan-filtering |
На момент публикации актуальна RouterOS 7.18. Перед настройкой проверь свежие релизы на mikrotik.com/download.
Зачем вообще нужны VLAN на MikroTik
VLAN (Virtual LAN) делит одну физическую сеть на несколько изолированных логических сегментов. Трафик между ними идёт только через маршрутизатор — и только если ты это явно разрешил.
Типичный сценарий: один роутер, один коммутатор, три задачи — офисная сеть, гостевой Wi-Fi и управление оборудованием. Без VLAN все три сегмента видят друг друга. Гость подключился к Wi-Fi — и теоретически достучится до принтера в офисе или до интерфейса управления роутером. С VLAN каждый сегмент живёт в своей изоляции.
Ещё три практических кейса:
Офис + гости + IoT. Умные лампочки и камеры в VLAN 30 не видят рабочие машины в VLAN 10. Взлом термостата не даёт доступа к файловому серверу.
VoIP-телефония. Голосовой трафик в отдельном VLAN с QoS. Никакой деградации качества от файловых копирований в офисной сети.
Разделение сред. Dev, staging и production в разных VLAN на одном железе. Разработчик не попадёт в продакшн случайно.
Архитектура: как выглядит сеть с несколькими VLAN
Сначала схема — потом команды. Понять топологию сейчас значит не тратить час на отладку потом.
%%{init: {
'theme': 'base',
'themeVariables': {
'primaryColor': '#ffffff',
'primaryTextColor': '#1e293b',
'primaryBorderColor': '#94a3b8',
'lineColor': '#64748b',
'fontSize': '15px',
'fontFamily': 'ui-sans-serif, system-ui, sans-serif'
},
'flowchart': {'curve': 'linear', 'nodeSpacing': 50, 'rankSpacing': 50}
}}%%
flowchart TD
INET["Интернет (WAN)"]
MT["MikroTik RouterOS 7"]
SW["Управляемый коммутатор"]
AP["Точка доступа Wi-Fi"]
V10["VLAN 10 - Офис"]
V20["VLAN 20 - Гости"]
V30["VLAN 30 - IoT"]
V99["VLAN 99 - Management"]
PC["ПК офиса"]
GUEST["Ноутбук гостя"]
IOT["Камера / умный дом"]
ADMIN["Ноутбук администратора"]
INET -->|"ether1 - WAN"| MT
MT -->|"ether2 - trunk tagged 10,20,30,99"| SW
SW -->|"trunk tagged 10,20"| AP
SW -->|"access untagged pvid=10"| PC
SW -->|"access untagged pvid=30"| IOT
AP -->|"SSID Office - VLAN 10"| V10
AP -->|"SSID Guest - VLAN 20"| V20
SW -->|"access untagged pvid=99"| ADMIN
MT --> V10
MT --> V20
MT --> V30
MT --> V99
V10 --- PC
V20 --- GUEST
V30 --- IOT
V99 --- ADMIN
style MT fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
style V99 fill:#f8fafc,stroke:#22c55e,stroke-width:2px,color:#15803d
style V10 fill:#f8fafc,stroke:#3b82f6,stroke-width:1px,color:#1e293b
style V20 fill:#f8fafc,stroke:#94a3b8,stroke-width:1px,color:#1e293b
style V30 fill:#f8fafc,stroke:#94a3b8,stroke-width:1px,color:#1e293b
style ADMIN fill:#f8fafc,stroke:#22c55e,stroke-width:2px,color:#15803d
style INET fill:#f8fafc,stroke:#94a3b8,stroke-width:1px,color:#1e293b
style SW fill:#f8fafc,stroke:#94a3b8,stroke-width:1px,color:#1e293b
style AP fill:#f8fafc,stroke:#94a3b8,stroke-width:1px,color:#1e293b
style PC fill:#f8fafc,stroke:#94a3b8,stroke-width:1px,color:#1e293b
style GUEST fill:#f8fafc,stroke:#94a3b8,stroke-width:1px,color:#1e293b
style IOT fill:#f8fafc,stroke:#f97316,stroke-width:1px,color:#9a3412
Ключевое из схемы: MikroTik видит все VLAN через один trunk-порт. Каждый VLAN — это отдельный VLAN-интерфейс поверх bridge1 с собственным IP-адресом (gateway). Маршрутизация между VLAN идёт через RouterOS и контролируется firewall-правилами.
Три термина которые надо понять до начала
Tagged (trunk) порт — пропускает трафик нескольких VLAN с тегами 802.1Q. Используется между коммутаторами, между коммутатором и роутером, между коммутатором и точкой доступа. Устройство на другом конце обязано понимать теги.
Untagged (access) порт — пропускает трафик одного VLAN без тега. Используется для подключения конечных устройств: ПК, камер, телефонов. Устройство не знает про VLAN — получает обычный Ethernet-фрейм.
PVID (Port VLAN ID) — VLAN ID, в который попадает нетегированный трафик входящий на порт. Если ПК подключён к порту с pvid=10, его трафик попадает в VLAN 10. Это и есть «access VLAN».
| Тип порта |
Тег на входе |
Тег на выходе |
Применение |
| Trunk (tagged) |
Несколько VLAN ID |
Сохраняет теги |
Коммутатор-роутер, коммутатор-AP |
| Access (untagged) |
Нетегированный |
Снимает тег |
ПК, камера, IoT, телефон |
| Hybrid |
Нетегированный + теги |
Native без тега, остальные с тегом |
IP-телефон с ПК на одном порту |
Рецепт: настройка VLAN на MikroTik RouterOS 7 — пошагово
Подготовка: сначала бэкап
Не пропускай этот шаг. Включение vlan-filtering без правильно заполненной таблицы моментально режет доступ. С бэкапом это исправляется за минуту. Без бэкапа — за час через serial console.
# Экспорт текущего конфига
/export file=backup-before-vlan
# Скачать с устройства через SCP (с Linux/Mac)
scp admin@192.168.88.1:backup-before-vlan.rsc ./
Скачай файл на локальную машину. Файл в памяти роутера — не бэкап, а иллюзия бэкапа.
Шаг 1. Создай bridge
Bridge — это виртуальный коммутатор внутри RouterOS. Физические порты добавляются в него как участники. vlan-filtering=no пока — включим в самом конце, когда таблица будет готова.
# Создаём bridge без vlan-filtering (принципиально!)
/interface bridge
add name=bridge1 vlan-filtering=no comment="Main bridge"
Шаг 2. Добавь порты в bridge с правильным pvid
pvid определяет в какой VLAN попадает нетегированный трафик. Для trunk-порта pvid=1 (он принимает только тегированный трафик). Для access-портов pvid = ID нужного VLAN.
# Trunk-порт к коммутатору (или WAN если нужен тегированный uplink)
/interface bridge port
add bridge=bridge1 interface=ether1 pvid=1 comment="Trunk to switch"
# Access-порты для конечных устройств
add bridge=bridge1 interface=ether2 pvid=99 comment="Management admin port"
add bridge=bridge1 interface=ether3 pvid=10 comment="Office VLAN 10"
add bridge=bridge1 interface=ether4 pvid=20 comment="Guest VLAN 20"
add bridge=bridge1 interface=ether5 pvid=30 comment="IoT VLAN 30"
Шаг 3. Заполни VLAN-таблицу bridge
tagged=bridge1 — обязателен для каждого VLAN с IP
bridge1 — это CPU port RouterOS. Если не добавить bridge1 в tagged, сам роутер не увидит тегированный трафик этого VLAN. IP будет назначен, пинг не пойдёт, DHCP не ответит. Самая частая ошибка в
настройке VLAN на MikroTik.
/interface bridge vlan
# VLAN 99 - Management
# tagged=bridge1 - CPU RouterOS получает тегированный трафик
# tagged=ether1 - trunk пропускает VLAN 99 с тегом
# untagged=ether2 - admin-порт получает трафик без тега
add bridge=bridge1 vlan-ids=99 tagged=bridge1,ether1 untagged=ether2 comment="Management"
# VLAN 10 - Офис
add bridge=bridge1 vlan-ids=10 tagged=bridge1,ether1 untagged=ether3 comment="Office"
# VLAN 20 - Гости
add bridge=bridge1 vlan-ids=20 tagged=bridge1,ether1 untagged=ether4 comment="Guest"
# VLAN 30 - IoT
add bridge=bridge1 vlan-ids=30 tagged=bridge1,ether1 untagged=ether5 comment="IoT"
Если точка доступа подключена к trunk-порту и должна получать несколько VLAN — добавь её как tagged в нужные VLAN:
# AP подключена к ether6 - пропускаем VLAN 10 и 20 тегированно
/interface bridge vlan
set [find vlan-ids=10] tagged=bridge1,ether1,ether6
set [find vlan-ids=20] tagged=bridge1,ether1,ether6
Шаг 4. Создай VLAN-интерфейсы поверх bridge1
Важно: поверх bridge1, не поверх ether1. Интерфейс на физическом порту обходит bridge и ломает hardware offload. Это не рекомендация — это правило.
/interface vlan
add interface=bridge1 vlan-id=99 name=vlan99-mgmt comment="Management VLAN 99"
add interface=bridge1 vlan-id=10 name=vlan10-office comment="Office VLAN 10"
add interface=bridge1 vlan-id=20 name=vlan20-guest comment="Guest VLAN 20"
add interface=bridge1 vlan-id=30 name=vlan30-iot comment="IoT VLAN 30"
Шаг 5. Назначь IP-адреса на VLAN-интерфейсы
/ip address
add address=192.168.99.1/24 interface=vlan99-mgmt comment="Management gateway"
add address=192.168.10.1/24 interface=vlan10-office comment="Office gateway"
add address=192.168.20.1/24 interface=vlan20-guest comment="Guest gateway"
add address=192.168.30.1/24 interface=vlan30-iot comment="IoT gateway"
Шаг 6. Настрой DHCP-серверы
DHCP привязывается к VLAN-интерфейсам, не к физическим портам. Иначе клиент получает IP из чужого пула — или не получает вообще.
# Пулы адресов
/ip pool
add name=pool-mgmt ranges=192.168.99.10-192.168.99.20
add name=pool-office ranges=192.168.10.10-192.168.10.254
add name=pool-guest ranges=192.168.20.10-192.168.20.254
add name=pool-iot ranges=192.168.30.10-192.168.30.254
# DHCP-серверы — на VLAN-интерфейсах
/ip dhcp-server
add name=dhcp-mgmt interface=vlan99-mgmt address-pool=pool-mgmt disabled=no
add name=dhcp-office interface=vlan10-office address-pool=pool-office disabled=no
add name=dhcp-guest interface=vlan20-guest address-pool=pool-guest disabled=no
add name=dhcp-iot interface=vlan30-iot address-pool=pool-iot disabled=no
# Сети DHCP
/ip dhcp-server network
add address=192.168.99.0/24 gateway=192.168.99.1 dns-server=192.168.99.1
add address=192.168.10.0/24 gateway=192.168.10.1 dns-server=8.8.8.8
add address=192.168.20.0/24 gateway=192.168.20.1 dns-server=8.8.8.8
add address=192.168.30.0/24 gateway=192.168.30.1 dns-server=8.8.8.8
Шаг 7. Настрой ingress-filtering и frame-types
Без этого возможен VLAN hopping: атакующий с access-порта отправляет двойной тег и попадает в чужой VLAN. frame-types закрывает эту дыру на уровне L2 — физически. Access-порт просто не пропустит тегированный кадр.
| Тип порта |
ingress-filtering |
frame-types |
pvid |
| Trunk (uplink, к коммутатору) |
yes |
admit-only-vlan-tagged |
1 |
| Access (ПК, камера, IoT) |
yes |
admit-only-untagged-and-priority-tagged |
= ID нужного VLAN |
| Management (ноутбук администратора) |
yes |
admit-only-untagged-and-priority-tagged |
99 |
| Trunk к AP (Wi-Fi) |
yes |
admit-only-vlan-tagged |
1 |
| Hybrid (IP-телефон + ПК) |
yes |
admit-all |
= native VLAN телефона |
# Trunk-порт: только тегированный трафик
/interface bridge port
set [find interface=ether1] ingress-filtering=yes \
frame-types=admit-only-vlan-tagged
# Access-порты: только нетегированный трафик
set [find interface=ether2] ingress-filtering=yes \
frame-types=admit-only-untagged-and-priority-tagged
set [find interface=ether3] ingress-filtering=yes \
frame-types=admit-only-untagged-and-priority-tagged
set [find interface=ether4] ingress-filtering=yes \
frame-types=admit-only-untagged-and-priority-tagged
set [find interface=ether5] ingress-filtering=yes \
frame-types=admit-only-untagged-and-priority-tagged
Шаг 8. Закрой управление через firewall
Порядок правил firewall критичен
В MikroTik firewall filter применяется сверху вниз — первое совпавшее правило выигрывает. Правило разрешения для VLAN 99 должно стоять выше правила запрета. Ставь его place-before=0.
# Interface list для management VLAN
/interface list
add name=management comment="Management VLAN interfaces"
/interface list member
add interface=vlan99-mgmt list=management
# Разрешаем управление ТОЛЬКО с management VLAN
/ip firewall filter
add chain=input in-interface-list=management protocol=tcp \
dst-port=22,80,443,8291,8728,8729 action=accept \
comment="Allow management from VLAN99" place-before=0
# Блокируем управление отовсюду ещё
add chain=input in-interface-list=!management protocol=tcp \
dst-port=22,80,443,8291,8728,8729 action=drop \
comment="Block management from all other VLANs"
# Изоляция между VLAN: гости не видят офис
add chain=forward in-interface=vlan20-guest \
out-interface=vlan10-office action=drop \
comment="Block Guest -> Office"
# IoT не лезет никуда кроме интернета
add chain=forward in-interface=vlan30-iot \
out-interface=!ether1 action=drop \
comment="IoT -> Internet only"
# Никто не лезет в management
add chain=forward out-interface=vlan99-mgmt action=drop \
comment="Block all -> Management"
# NAT для выхода в интернет
/ip firewall nat
add chain=srcnat out-interface=ether1 action=masquerade
Шаг 9. Включи vlan-filtering — последний шаг
Критически важно: включай только сейчас
Если включить vlan-filtering до заполнения VLAN-таблицы — bridge начнёт дропать весь трафик непрописанных VLAN. WinBox пропадёт мгновенно. Все шаги 1-8 должны быть выполнены до этой команды.
# Последняя проверка перед включением
/interface bridge vlan print detail
# Убедись: везде tagged=bridge1
# Убедись: management-порт прописан как untagged в VLAN 99
# Убедись: ты подключён через management-порт (ether2)
# Включаем
/interface bridge set bridge1 vlan-filtering=yes
WinBox должен остаться живым — если всё настроено правильно. Если пропал — смотри раздел «Осложнения».
Таблица портов: что открыто и куда
| Порт |
Протокол |
Назначение |
Доступен снаружи |
| 8291/TCP |
WinBox |
Графический клиент управления MikroTik |
Нет — только VLAN 99 |
| 22/TCP |
SSH |
CLI-доступ к RouterOS |
Нет — только VLAN 99 |
| 80/TCP |
HTTP |
WebFig (отключить если не нужен) |
Нет — только VLAN 99 |
| 443/TCP |
HTTPS |
WebFig HTTPS |
Нет — только VLAN 99 |
| 8728/TCP |
API |
RouterOS API |
Нет — только VLAN 99 |
| 53/UDP |
DNS |
DNS-сервер для клиентов VLAN |
Только из разрешённых VLAN |
| 67/UDP |
DHCP |
DHCP-сервер для клиентов |
Только из соответствующего VLAN |
CPU Port и tagged=bridge1: почему без этого ничего не работает
Что такое CPU port в RouterOS
Bridge-интерфейс в MikroTik — это не просто логический объект. Это ещё и CPU port: виртуальный порт, через который сам RouterOS участвует в работе bridge как отдельный участник коммутации.
Когда создаёшь bridge и добавляешь физические порты — RouterOS видит такую картину:
| Порт |
Тип |
Кто использует |
| ether1 |
Физический |
Внешний трафик |
| ether2, ether3… |
Физический |
Клиентские устройства |
| bridge1 |
CPU port (виртуальный) |
Сам RouterOS: IP-стек, DHCP, firewall, routing |
Когда создаёшь /interface vlan vlan-id=10 interface=bridge1 и назначаешь IP — этот адрес принадлежит CPU. Чтобы CPU мог получать тегированный трафик VLAN 10, bridge1 должен стоять в VLAN-таблице как tagged.
%%{init: {
'theme': 'base',
'themeVariables': {
'primaryColor': '#ffffff',
'primaryTextColor': '#1e293b',
'primaryBorderColor': '#94a3b8',
'lineColor': '#64748b',
'fontSize': '15px',
'fontFamily': 'ui-sans-serif, system-ui, sans-serif'
},
'flowchart': {'curve': 'linear', 'nodeSpacing': 50, 'rankSpacing': 50}
}}%%
flowchart LR
TRUNK["ether1 (trunk)"]
BRIDGE["bridge1 (CPU port)"]
VLAN10["vlan10 interface"]
DHCP["DHCP server"]
FW["Firewall"]
IP["IP 192.168.10.1"]
TRUNK -->|"VLAN 10 tagged"| BRIDGE
BRIDGE -->|"tagged=bridge1 обязателен"| VLAN10
VLAN10 --> DHCP
VLAN10 --> FW
VLAN10 --> IP
style BRIDGE fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
style VLAN10 fill:#f8fafc,stroke:#22c55e,stroke-width:2px,color:#15803d
style TRUNK fill:#f8fafc,stroke:#94a3b8,stroke-width:1px,color:#1e293b
style DHCP fill:#f8fafc,stroke:#94a3b8,stroke-width:1px,color:#1e293b
style FW fill:#f8fafc,stroke:#f97316,stroke-width:1px,color:#9a3412
style IP fill:#f8fafc,stroke:#94a3b8,stroke-width:1px,color:#1e293b
Что сломается без tagged=bridge1
| Ситуация |
Без tagged=bridge1 |
С tagged=bridge1 |
| VLAN-интерфейс создан, IP назначен |
IP есть, пинг не идёт |
Всё работает |
| DHCP-сервер на VLAN-интерфейсе |
DHCP не отвечает клиентам |
DHCP работает |
| Firewall-правила на VLAN-интерфейсе |
Правила не применяются |
Правила работают |
| Inter-VLAN routing |
Маршрутизация не работает |
Маршрутизация работает |
| WinBox / SSH через VLAN |
Нет доступа |
Доступ есть |
# Неправильно: bridge1 не в tagged
/interface bridge vlan
add bridge=bridge1 vlan-ids=10 tagged=ether1 untagged=ether3
# Результат: IP есть, пинг не идёт
# Правильно: bridge1 в tagged
/interface bridge vlan
add bridge=bridge1 vlan-ids=10 tagged=bridge1,ether1 untagged=ether3
# Результат: всё работает
Правило одно: если на VLAN есть VLAN-интерфейс с IP, DHCP-сервер или любой сервис RouterOS — bridge1 обязан быть в tagged. Исключение — чистый L2-коммутатор без IP на VLAN.
Hardware Offload: производительность без нагрузки на CPU
Зачем это нужно
Hardware offload — режим, при котором коммутация VLAN-трафика выполняется аппаратным switch chip, а не процессором RouterOS. Трафик не проходит через CPU вообще — обрабатывается на железе со скоростью линии.
| Режим |
Кто обрабатывает |
Производительность |
Нагрузка на CPU |
| Hardware offload |
Switch chip |
Line rate (wire speed) |
Минимальная |
| CPU forwarding |
Процессор RouterOS |
Ограничена мощностью CPU |
Высокая при нагрузке |
На RB951 без offload CPU упирается при 200-300 Мбит/с коммутации. На CRS326 с offload — линейные 10 Гбит/с без нагрузки. Разница принципиальная если гоняешь много L2-трафика.
Какие устройства поддерживают hardware offload
| Устройство |
Hardware Offload VLAN |
Особенности |
| CRS3xx (CRS326, CRS317) |
Да, полный |
Marvell switch chip, wire speed 1G/10G. Лучший вариант для VLAN-коммутации |
| RB5009UG+S+IN |
Да, полный |
Marvell Amethyst. Хорошо справляется с Bridge VLAN Filtering |
| hEX (RB750Gr3) |
Да, с ограничениями |
MT7621 switch chip. Offload работает, но часть функций его отключает |
| hAP ax3 / ax2 |
Частично |
IPQ-6010. Проводные порты — offload, Wi-Fi трафик — через CPU |
| CCR2004, CCR2116 |
Обычно CPU forwarding |
Маршрутизаторы без switch chip. Высокий CPU компенсирует |
| RB951, hAP lite, hAP mini |
Нет |
Нет switch chip. Весь трафик через CPU. Всегда |
Что отключает hardware offload
| Функция |
Влияние на offload |
| Firewall на bridge (use-ip-firewall=yes) |
Отключает полностью |
| Bridge filter rules |
Отключает полностью |
| Порты из разных switch chip в одном bridge |
Отключает полностью |
| Mirror на порту |
Отключает на этом порту |
| Horizon на порту |
Отключает на этом порту |
| VLAN-интерфейс на ether вместо bridge |
Обходит bridge — offload не задействован |
Как проверить hardware offload
# Флаг H на портах = hardware offload активен
/interface bridge port print
# Детальная проверка
/interface bridge port print detail where bridge=bridge1
# Ищем: hw: yes
Типичный вывод с включённым offload:
Flags: X - disabled, I - inactive, D - dynamic, H - hw-offload
# INTERFACE BRIDGE HW PVID
0 H ether1 bridge1 yes 1
1 H ether2 bridge1 yes 99
2 H ether3 bridge1 yes 10
3 H ether4 bridge1 yes 20
Нет флага H — смотри таблицу выше. Чаще всего причина: bridge filter rules или Firewall Bridge включены.
Проверка: убедись что VLAN работает
# 1. VLAN-таблица - bridge1 везде в tagged?
/interface bridge vlan print detail
# 2. PVID на портах корректный?
/interface bridge port print
# 3. MAC клиента в нужном VLAN?
/interface bridge host print where vlan-id=10
# 4. IP на VLAN-интерфейсах назначен?
/ip address print where interface~"vlan"
# 5. DHCP-серверы запущены?
/ip dhcp-server print
# 6. Пинг с gateway VLAN 10 до клиента
/ping 192.168.10.100 src-address=192.168.10.1 count=5
# 7. Живой трафик на trunk - видны VLAN ID?
/tool torch interface=ether1
# 8. Hardware offload активен?
/interface bridge port print
# Ищи флаг H на портах
VLAN для Wi-Fi на MikroTik
Как работает VLAN на точке доступа
Точка доступа подключается к trunk-порту коммутатора. Каждый SSID маппируется в свой VLAN. Трафик от клиентов Wi-Fi приходит на MikroTik с тегами — как обычный trunk-трафик.
Ключевой параметр: local-forwarding=no в datapath CAPsMAN. При local-forwarding=yes трафик коммутируется прямо на AP без тегов — VLAN не применяется. Это самая частая ошибка при настройке Wi-Fi VLAN.
Настройка CAPsMAN с VLAN (RouterOS 7, WiFiWave2)
# Создаём datapath для офисного SSID
# local-forwarding=no - трафик идёт через роутер с тегом
/interface wifi datapath
add name=dp-office vlan-id=10 vlan-mode=use-tag local-forwarding=no \
comment="Office SSID -> VLAN 10"
add name=dp-guest vlan-id=20 vlan-mode=use-tag local-forwarding=no \
comment="Guest SSID -> VLAN 20"
# Конфигурации SSID
/interface wifi configuration
add name=cfg-office ssid="Office" datapath=dp-office \
security.authentication-types=wpa2-psk security.passphrase="office-pass"
add name=cfg-guest ssid="Guest" datapath=dp-guest \
security.authentication-types=wpa2-psk security.passphrase="guest-pass"
# Применяем к точкам доступа
/interface wifi
set [find name=wifi1] configuration=cfg-office
set [find name=wifi2] configuration=cfg-guest
После этого убедись что в VLAN-таблице bridge порт к AP добавлен как tagged для VLAN 10 и 20:
# ether6 - порт к которому подключена AP
/interface bridge vlan
set [find vlan-ids=10] tagged=bridge1,ether1,ether6
set [find vlan-ids=20] tagged=bridge1,ether1,ether6
Management VLAN на MikroTik: управление в изоляции
Management VLAN — отдельный сегмент для доступа к управлению оборудованием. WinBox, SSH, WebFig — только из VLAN 99. Компрометация офисного или гостевого VLAN не даёт доступа к управлению роутером.
Что выносить в management VLAN
| Оборудование |
Интерфейс управления |
Порт/протокол |
| MikroTik RouterOS |
WinBox, WebFig, SSH, API |
8291, 80, 443, 22 |
| Управляемый коммутатор |
Web-интерфейс, SSH, Telnet |
80, 443, 22, 23 |
| Точка доступа (AP) |
Web-интерфейс, CAPsMAN |
80, 443 |
| Гипервизор (Proxmox, ESXi) |
Web-интерфейс, SSH |
8006, 443, 22 |
| Сервер (IPMI, iDRAC, iLO) |
Out-of-band management |
80, 443, 623 |
Конфигурация Management VLAN уже описана в шагах выше: VLAN 99, pvid=99 на управляющем порту, tagged=bridge1,ether1 untagged=ether2, firewall блокирует управление отовсюду кроме vlan99-mgmt.
Как не потерять доступ после vlan-filtering=yes
| Шаг |
Что проверить до включения vlan-filtering=yes |
| 1 |
Порт через который ты управляешь добавлен в bridge с правильным pvid |
| 2 |
Этот VLAN прописан в /interface bridge vlan с untagged=твой порт |
| 3 |
tagged=bridge1 указан для этого VLAN |
| 4 |
VLAN-интерфейс создан поверх bridge1 и имеет IP-адрес |
| 5 |
Сделан /export file=backup-before-vlan |
Если всё же потерял доступ — serial console и откат:
# Откат через serial console (115200 baud, 8N1)
/interface bridge set bridge1 vlan-filtering=no
# Доступ вернётся. Исправляй VLAN-таблицу и включай снова.
Безопасность: полный периметр
SSH hardening
# Ограничиваем сервисы управления только management-подсетью
/ip service
set ssh address=192.168.99.0/24 port=22
set winbox address=192.168.99.0/24
set www address=192.168.99.0/24
set www-ssl address=192.168.99.0/24
set api address=192.168.99.0/24
set api-ssl address=192.168.99.0/24
# Отключаем небезопасные сервисы
set telnet disabled=yes
set ftp disabled=yes
Защита от брутфорса (аналог fail2ban)
# Блокируем на 10 минут тех кто попробовал подключиться 5+ раз
/ip firewall filter
add chain=input protocol=tcp dst-port=22,8291 \
src-address-list=blocked-mgmt action=drop \
comment="Block brute force"
add chain=input protocol=tcp dst-port=22,8291 \
connection-state=new src-address-list=mgmt-bf-2 \
action=add-src-to-address-list address-list=blocked-mgmt \
address-list-timeout=10m
add chain=input protocol=tcp dst-port=22,8291 \
connection-state=new src-address-list=mgmt-bf-1 \
action=add-src-to-address-list address-list=mgmt-bf-2 \
address-list-timeout=1m
add chain=input protocol=tcp dst-port=22,8291 \
connection-state=new \
action=add-src-to-address-list address-list=mgmt-bf-1 \
address-list-timeout=1m
Логирование попыток доступа к управлению
# Логировать отклонённые попытки управления
/ip firewall filter
set [find comment="Block management from all other VLANs"] \
log=yes log-prefix="MGMT-BLOCK:"
# Смотреть логи
/log print where message~"MGMT-BLOCK"
Резервное копирование конфига
# Ручной экспорт (текстовый, можно редактировать)
/export file=vlan-config-$(date)
# Бинарный бэкап (включает пароли)
/system backup save name=vlan-backup
# Автобэкап раз в неделю
/system scheduler
add name=weekly-backup interval=7d \
on-event="/export file=auto-backup; /system backup save name=auto-backup-bin" \
comment="Weekly config backup"
Где хранить: скачивай через WinBox (Files) или SCP на отдельный сервер в management VLAN. Три копии: две локально, одна офлайн — минимальный стандарт.
Безопасное обновление RouterOS
# Проверить версию
/system resource print
# Проверить доступные обновления
/system package update check-for-updates
# Сделать бэкап перед обновлением
/export file=pre-update-backup
/system backup save name=pre-update-bin
# Обновить (роутер перезагрузится)
/system package update install
Перед обновлением читай changelog на mikrotik.com/download/changelogs. Изменения в bridge и vlan-filtering были в нескольких релизах — важно знать что поменялось.
Диагностика VLAN на MikroTik: полная таблица команд
| Команда |
Что показывает |
Когда использовать |
| /interface bridge vlan print |
VLAN-таблица bridge: tagged/untagged порты, VLAN ID |
Первый шаг любой диагностики VLAN |
| /interface bridge vlan print detail |
То же, с полным списком портов и флагами |
Проверить tagged=bridge1, найти дублирование |
| /interface bridge port print |
Порты bridge: pvid, hw-offload (флаг H), состояние |
Проверить PVID, убедиться что offload активен |
| /interface bridge host print |
MAC-адреса: на каком порту изучены, в каком VLAN |
Убедиться что клиент попал в нужный VLAN |
| /interface bridge monitor bridge1 |
Состояние bridge: активные порты, STP root, offload |
Проблемы с STP, проверка общего состояния |
| /ip address print |
IP-адреса на VLAN-интерфейсах |
Убедиться что IP назначен на vlan10, а не ether1 |
| /ip route print |
Таблица маршрутизации |
Проверить наличие маршрутов до всех VLAN-сетей |
| /ip arp print |
ARP-таблица: IP + MAC + интерфейс |
Проблемы inter-VLAN routing, пропавшие хосты |
| /tool torch interface=ether1 |
Трафик в реальном времени: VLAN ID, src/dst, протоколы |
Проверить что теги реально присутствуют на trunk |
| /tool torch interface=vlan10 |
Трафик через конкретный VLAN-интерфейс |
Убедиться что трафик идёт в нужный VLAN |
| /tool sniffer quick vlan-id=10 |
Захват пакетов с VLAN ID 10 (raw 802.1Q) |
Глубокая диагностика, когда torch недостаточно |
| /ping X src-address=Y count=5 |
Пинг с указанием source-IP |
Проверить inter-VLAN routing на уровне роутера |
| /log print where topics~»bridge» |
События bridge: STP, изучение MAC, ошибки |
Неожиданные изменения топологии, STP-флапы |
Алгоритм диагностики «VLAN не работает»
# Шаг 1. VLAN-таблица — есть bridge1 в tagged?
/interface bridge vlan print detail
# Шаг 2. PVID на проблемном порту
/interface bridge port print where interface=ether3
# Шаг 3. Видит ли bridge MAC клиента? В каком VLAN?
/interface bridge host print
# Шаг 4. IP на VLAN-интерфейсе есть?
/ip address print where interface~"vlan"
# Шаг 5. Маршруты до всех VLAN-сетей?
/ip route print where dst-address~"192.168"
# Шаг 6. Пинг с gateway VLAN 10 до клиента
/ping 192.168.10.100 src-address=192.168.10.1 count=5
# Шаг 7. Живой трафик на trunk
/tool torch interface=ether1
Troubleshooting: 13 частых проблем с VLAN на MikroTik
| # |
Проблема |
Симптом |
Решение |
| 1 |
VLAN не пингуется |
IP назначен, клиент в сети, пинг до gateway не идёт |
Проверить tagged=bridge1 в VLAN-таблице. Без него CPU не видит трафик VLAN. |
| 2 |
После vlan-filtering=yes пропал доступ |
WinBox и SSH перестали отвечать сразу после команды |
Serial console -> /interface bridge set bridge1 vlan-filtering=no -> добавить management VLAN в таблицу -> включить снова |
| 3 |
VLAN работает только на одном порту |
Клиент на ether3 получает IP, на ether4 нет — хотя оба в одном VLAN |
Проверить pvid на ether4. Порт должен быть прописан как untagged в VLAN-таблице с нужным VLAN ID |
| 4 |
Устройство не получает DHCP |
Клиент подключён, DHCP не отвечает |
1) Проверить pvid порта. 2) Проверить tagged=bridge1. 3) Убедиться что DHCP-сервер привязан к правильному VLAN-интерфейсу |
| 5 |
Wi-Fi SSID не попадает в нужный VLAN |
Все SSID в одном VLAN независимо от настроек CAPsMAN |
Проверить local-forwarding=no в datapath. При local-forwarding=yes VLAN-тег не применяется |
| 6 |
Trunk не пропускает несколько VLAN |
Через trunk проходит только один VLAN |
Проверить что trunk-порт добавлен как tagged для всех нужных VLAN в /interface bridge vlan |
| 7 |
bridge1 не добавлен в tagged |
DHCP и пинг не работают, хотя VLAN-интерфейс создан |
/interface bridge vlan set [find vlan-ids=10] tagged=bridge1,ether1 |
| 8 |
PVID не совпадает с VLAN ID |
Клиент получает IP из чужого пула или не получает вообще |
/interface bridge port set [find interface=ether3] pvid=10 — pvid должен совпадать с ID нужного VLAN |
| 9 |
Hardware offload исчез |
Флаг H пропал, CPU под нагрузкой на простом L2-трафике |
Проверить: включён ли Firewall Bridge, есть ли bridge filter rules, не смешаны ли порты из разных switch chip |
| 10 |
Trunk и access порты перепутаны |
Конечное устройство не работает, хотя порт добавлен в bridge |
Access: pvid = нужный VLAN, запись как untagged. Trunk: pvid=1, запись как tagged во всех VLAN |
| 11 |
VLAN-интерфейс создан на ether вместо bridge1 |
Нестабильная работа, нет hardware offload, трафик мимо bridge |
Пересоздать: /interface vlan add interface=bridge1 vlan-id=10 name=vlan10 |
| 12 |
ingress-filtering блокирует трафик |
После включения ingress-filtering трафик пропал на некоторых портах |
Проверить что VLAN прописан в таблице для данного порта. ingress-filtering дропает кадры с VLAN ID не прописанными в таблице |
| 13 |
Native VLAN конфликтует с management VLAN |
Management-трафик появляется в пользовательских VLAN |
Не использовать VLAN 1 для management. Явно задать native VLAN на обоих концах trunk-линка и убедиться в совпадении pvid |
Альтернативы: другие подходы к настройке VLAN
RouterOS 6: свич-группы вместо Bridge VLAN Filtering
В RouterOS 6 VLAN настраивается через /interface ethernet switch — отдельный механизм. Bridge VLAN Filtering там либо отсутствует, либо работает иначе. Если ты на ROS 6 и обновляться нельзя — настройка через switch-группы и /interface vlan на физических портах. Это рабочий вариант, но hardware offload там тоже настраивается по-другому.
IP Services + address binding (без отдельного VLAN)
Быстрый вариант ограничить доступ к управлению без отдельного management VLAN:
/ip service
set winbox address=192.168.99.0/24
set ssh address=192.168.99.0/24
Минус: трафик управления ходит внутри существующих VLAN, только фильтруется по IP. VLAN hopping и компрометация подсети всё ещё угрожают. Для малых установок сойдёт, для продакшна — нет.
VPN-туннель для удалённого управления
WireGuard или IPsec туннель в management-подсеть. Никакого открытого WinBox наружу — только через VPN. Хорошо для удалённых объектов, требует дополнительной инфраструктуры.
Почему выбрали Bridge VLAN Filtering. Это нативный механизм RouterOS 7, работает без дополнительного ПО, поддерживает hardware offload на CRS и RB5009. Изоляция на уровне L2 — до IP-стека. Конфигурация читается в одном месте. В отличие от IP Services — VLAN hopping физически невозможен при правильных frame-types.
Профилактика: чеклист перед запуском в продакшн
| # |
Проверка |
Команда |
| 1 |
Конфиг экспортирован до начала работы |
/export file=backup-before-vlan |
| 2 |
Все нужные VLAN прописаны в таблице bridge |
/interface bridge vlan print |
| 3 |
Для каждого VLAN с IP указан tagged=bridge1 |
/interface bridge vlan print detail |
| 4 |
PVID на всех access-портах совпадает с нужным VLAN ID |
/interface bridge port print |
| 5 |
Management VLAN настроен до включения vlan-filtering |
— |
| 6 |
На trunk-портах frame-types=admit-only-vlan-tagged |
/interface bridge port print detail |
| 7 |
На access-портах frame-types=admit-only-untagged-and-priority-tagged |
/interface bridge port print detail |
| 8 |
Hardware offload активен — флаг H на нужных портах |
/interface bridge port print |
| 9 |
Firewall блокирует управление из не-management VLAN |
/ip firewall filter print |
| 10 |
DHCP-серверы привязаны к VLAN-интерфейсам, не к ether |
/ip dhcp-server print |
| 11 |
IP Services ограничены подсетью management VLAN |
/ip service print |
| 12 |
Serial console доступен как запасной вариант |
Физическая проверка |
FAQ: часто задаваемые вопросы о настройке VLAN на MikroTik
Почему VLAN на MikroTik не работает после настройки?
Первым делом: /interface bridge vlan print detail. Проверь что для проблемного VLAN есть tagged=bridge1. Без него CPU RouterOS не получает тегированный трафик — IP назначен, пинг не идёт. Вторая причина: PVID на порту не совпадает с VLAN ID. Третья: vlan-filtering=no забыли включить в конце, или включили раньше времени.
Как проверить что настройка VLAN работает правильно?
Четыре проверки: 1) /interface bridge host print — MAC клиента должен быть в нужном VLAN ID. 2) /ping 192.168.10.1 с клиента — пинг до gateway должен проходить. 3) /tool torch interface=ether1 — на trunk должны быть видны нужные VLAN ID. 4) Попробуй подключиться к управлению из не-management VLAN — должен получить отказ.
Что делать если пропал WinBox после vlan-filtering yes?
Serial console, 115200 baud, 8N1. Команда: /interface bridge set bridge1 vlan-filtering=no — доступ вернётся. Потом проверяй VLAN-таблицу: management VLAN должен быть с tagged=bridge1 и untagged для твоего порта. И только потом снова vlan-filtering=yes.
Чем отличается Bridge VLAN Filtering от настройки через switch в RouterOS 6?
RouterOS 6 использовал /interface ethernet switch для hardware-based VLAN — отдельный механизм с другим синтаксисом. RouterOS 7 Bridge VLAN Filtering — единый унифицированный подход: одна таблица /interface bridge vlan управляет и software и hardware обработкой. Плюс нормальный hardware offload через тот же механизм. Мигрировать конфиг с ROS 6 на ROS 7 напрямую нельзя — нужно переписывать.
Почему нельзя создавать VLAN-интерфейс на ether вместо bridge1?
VLAN-интерфейс на физическом порту (ether1) обходит bridge. Трафик не проходит через bridge-механизм, не участвует в VLAN-таблице, hardware offload не задействован. Плюс это создаёт нестабильную конфигурацию — bridge и VLAN-интерфейс на одном физическом порту конфликтуют. Всегда: /interface vlan add interface=bridge1.
Как работает hardware offload и почему флаг H не появляется?
Hardware offload включается автоматически когда: Bridge VLAN Filtering включён, все порты bridge на одном switch chip, не используются функции требующие CPU (Firewall Bridge, bridge filter rules, mirror). Чаще всего флага H нет из-за bridge filter rules или use-ip-firewall=yes. Проверь: /interface bridge port print detail — поле hw покажет yes или no с причиной отсутствия offload.
Как настроить VLAN для гостевого Wi-Fi на MikroTik?
Создай datapath в CAPsMAN с vlan-id=20 vlan-mode=use-tag local-forwarding=no. Привяжи к SSID. В VLAN-таблице bridge добавь порт к AP как tagged для VLAN 20. В firewall добавь правило запрещающее трафик из VLAN 20 в VLAN 10 (офис). Ключевой момент: local-forwarding=no обязателен — без него VLAN-тег не применяется и весь трафик идёт в один сегмент.
Итог
Настройка VLAN на MikroTik по этой схеме даёт: изолированные сегменты для офиса, гостей, IoT и управления; management VLAN с firewall-периметром; hardware offload на поддерживаемых устройствах; защиту от VLAN hopping через ingress-filtering и frame-types.
Три вещи которые ломают VLAN чаще всего: нет tagged=bridge1, vlan-filtering включили раньше времени, VLAN-интерфейс создали на ether вместо bridge1. Все три — в troubleshooting выше с командами исправления.
Не заработало? Пиши в комментарии - разберёмся
Опиши: версию RouterOS (/system resource print), топологию (какой порт куда подключён), вывод /interface bridge vlan print detail и /interface bridge port print. С этим набором данных проблема решается за один-два ответа.