MikroTik с нуля 07. VLAN и bridge VLAN filtering
Note
Команды сверены с официальной документацией RouterOS 7 (версия руководства 7.26). Перед работой на боевом оборудовании проверьте их на тестовом стенде или сделайте резервную копию.
В этой статье мы разделим одну физическую сеть на три логические: офис (VLAN 10), гости (VLAN 20) и «умные» устройства, то есть IoT (VLAN 30). Всё это будет работать на одном роутере с одним мостом bridge и одним кабелем (trunk-портом) к управляемому коммутатору. Каждая сеть получит свою подсеть и свой DHCP-сервер, а firewall пустит гостей и IoT только в интернет и, по явным правилам, к отдельным службам.
Главная сложность темы не в самих командах, а в порядке действий: неверно включённая фильтрация VLAN легко отрезает вас от роутера. Поэтому заметная часть статьи посвящена тому, как сделать всё без потери доступа.
Tip
Короткий путь: нужны только гости. Для большинства домов и небольших офисов хватит одной гостевой VLAN 20. Тогда выполните шаги 1, 2, 3, 4, 5, 6 и 8 только для VLAN 20: интерфейс vlan20-guest, пул pool-guest, сервер dhcp-guest, список GUEST и правило drop guests to anything but internet; в шаге 4 создайте списки как написано, но участником сделайте только vlan20-guest, а добавление офиса в LAN, подраздел про available-from, правило для IoT и исключение для MQTT пропустите. В шаге 5 настройте только ether4, а запись таблицы в шаге 6 сделайте одну: /interface bridge vlan add bridge=bridge tagged=bridge untagged=ether4 vlan-ids=20. Пропустите шаг 7 (коммутатор), раздел про ускорение и всё, что относится к VLAN 10 и 30. Для гостевого Wi-Fi используйте раздел про Wi-Fi в конце.
Что понадобится
- Роутер MikroTik с RouterOS 7, настроенный по статьям 03 и 04:
ether1смотрит к провайдеру, портыether2–ether5объединены в мостbridgeс адресом192.168.88.1/24, есть списки интерфейсовLANиWANи канонический firewall. Число портов зависит от модели (см. статью 03); если их меньше, пропустите лишние шаги. - Управляемый коммутатор с поддержкой VLAN (стандарт 802.1Q), если сети нужно «растянуть» на несколько помещений. Без коммутатора можно проверить офис и гостей на портах самого роутера.
- Компьютер, подключённый к роутеру кабелем. Wi-Fi для этой настройки не подходит: при ошибке вы потеряете связь именно с ним.
- Резервная копия конфигурации (подробно о бэкапах написано в статье 10).
VLAN простыми словами
Обычная сеть Ethernet — «общее пространство»: все устройства на одном коммутаторе слышат широковещательные пакеты друг друга и могут общаться напрямую. VLAN (Virtual LAN, виртуальная локальная сеть) разрезает такой коммутатор на несколько изолированных сетей. Устройства из разных VLAN не видят друг друга на уровне Ethernet, даже если подключены в соседние розетки.
Чтобы несколько VLAN передавались по одному кабелю, к кадру добавляется метка (тег) стандарта IEEE 802.1Q с номером VLAN, его называют VLAN ID. Допустимы номера 1–4094, но 0, 1 и 4095 зарезервированы стандартом под особые задачи, и документация не советует строить на них обычные схемы. Для своих сетей берите другие номера, например 10, 20 и 30.
Термины, которые встретятся дальше:
- Tagged (с тегом) — кадры идут с меткой VLAN. Так соединяют сетевые устройства: роутер и коммутатор, два коммутатора.
- Untagged (без тега) — кадры идут «как обычно». Так подключают компьютеры, принтеры и камеры: им не нужно знать про VLAN.
- Trunk-порт — порт, по которому идёт трафик нескольких VLAN с метками.
- Access-порт — порт для конечного устройства: принадлежит одному VLAN и снимает метку, когда отдаёт кадр наружу.
- Hybrid-порт — порт, где часть VLAN идёт с тегом, а один VLAN без тега.
- PVID (Port VLAN ID) — номер VLAN, который мост приписывает кадру, пришедшему на порт без метки. Для access-порта PVID и есть «его VLAN».
Каждая VLAN — отдельная подсеть. Чтобы устройства из разных VLAN обменивались трафиком или выходили в интернет, нужен маршрутизатор: у роутера в каждой подсети есть свой адрес (у нас .1), и через него идёт весь межсетевой трафик. А раз он проходит через роутер, на нём можно поставить firewall, чего нет при простом коммутаторе.
Note
В RouterOS 6 VLAN чаще настраивали иначе: VLAN-интерфейсы на отдельных портах, свой мост на каждую VLAN. Документация RouterOS 7 называет рекомендованным способом bridge VLAN filtering, а старые схемы с VLAN-интерфейсами внутри моста относит к известным ошибкам конфигурации. Одно отличие помните сразу: ingress-filtering в RouterOS 7 включён по умолчанию.
Как устроен bridge VLAN filtering
Мост bridge объединяет порты в одну сеть (статья 03). Параметр vlan-filtering=yes превращает его в VLAN-aware коммутатор. Для этого настраиваются три вещи.
- Порты моста (
/interface bridge port):pvid— какую VLAN получает кадр без метки;frame-types— какие кадры порт принимает:admit-all(любые),admit-only-vlan-tagged(только с меткой, для trunk) илиadmit-only-untagged-and-priority-tagged(кадры без метки или с меткой только приоритета, то есть с VLAN ID 0; для обычных компьютеров это то же самое, что «без метки», поэтому значение подходит для access);ingress-filtering— проверять ли при входе, что порт вообще состоит в этой VLAN. Документация рекомендует включать его везде, где можно; мы укажем его явно.
- Таблица VLAN (
/interface bridge vlan): для каждой VLAN перечислено, какие порты отдают её с тегом (tagged), а какие без тега (untagged). Если VLAN нет в таблице для порта, кадры на этот порт не уйдут. - Сам мост как участник. У моста есть собственный
pvid, и он тоже порт. Чтобы роутер принимал и отправлял кадры нужных VLAN,bridgeуказывают средиtaggedв записи таблицы: через это место кадры попадают из моста в VLAN-интерфейсы и дальше на маршрутизацию.
Пока vlan-filtering=no, мост игнорирует метки, а pvid, frame-types и ingress-filtering не действуют. Поэтому всю конфигурацию можно подготовить заранее и включить одной командой в конце.
Предупреждение из документации: порты с frame-types=admit-all или admit-only-untagged-and-priority-tagged сами добавляются в таблицу как untagged для своего pvid. Мост тоже порт: если его pvid совпадёт с чьим-то ещё, он окажется в той же записи. После настройки всегда смотрите на таблицу. Ещё одну типичную ловушку (несколько VLAN в записи с access-портом) разберём в шаге 6.
Что мы строим
Интернет
|
ether1 (WAN)
+------+-------+
| MikroTik |
| bridge (VLAN)|
+-+---+---+--+-+
| | | |
ether2 ether3 ether4 ether5
| | | |
управление офис гость trunk к управляемому
(без тега) VLAN10 VLAN20 коммутатору: VLAN 10, 20, 30 с тегами
| VLAN | Назначение | Подсеть | Адрес роутера | Имя интерфейса | Пул DHCP |
|---|---|---|---|---|---|
| 1 (без тега) | управление и «старая» сеть | 192.168.88.0/24 |
192.168.88.1 |
bridge |
как было |
| 10 | офис | 192.168.10.0/24 |
192.168.10.1 |
vlan10-office |
192.168.10.10-192.168.10.254 |
| 20 | гости | 192.168.20.0/24 |
192.168.20.1 |
vlan20-guest |
192.168.20.10-192.168.20.254 |
| 30 | IoT | 192.168.30.0/24 |
192.168.30.1 |
vlan30-iot |
192.168.30.10-192.168.30.254 |
Роли портов моста:
| Порт | Роль | pvid | frame-types |
|---|---|---|---|
ether2 |
порт управления: остаётся в «старой» сети без тега | 1 | admit-all |
ether3 |
access-порт офиса | 10 | admit-only-untagged-and-priority-tagged |
ether4 |
access-порт гостей | 20 | admit-only-untagged-and-priority-tagged |
ether5 |
trunk к коммутатору | не используется | admit-only-vlan-tagged |
wifi1, wifi2 |
основной SSID из статьи 06 | 1 | как было: он остаётся в «старой» сети |
Отдельный управляющий VLAN мы не создаём. Мы просто оставляем в VLAN 1 то, что уже работало: порт ether2 с привычным адресом 192.168.88.1 и основной Wi-Fi. VLAN 1 здесь лишь значение pvid по умолчанию; новые сети строим на 10, 20 и 30, а наружу по trunk VLAN 1 не отдаём. Устройства можно переносить в VLAN 10 постепенно. Серверы, которые остаются в «старой» сети (например, 192.168.88.10 из статьи 05), продолжают работать как раньше, а проброс портов не меняется.
Warning
Любое устройство на ether3, ether4 или за trunk-портом ether5 после включения фильтрации выпадет из сети 192.168.88.0/24: оно окажется в VLAN своего порта (10 или 20), а кадры без тега через ether5 не пройдут. Запланируйте это. Если за коммутатором остались устройства в старой сети, используйте переходный вариант из подсказки в шаге 5.
Important
Если вы собираетесь выполнять и статью 12, учтите: там ether2 отдаётся второму провайдеру и выводится из моста, а порты LAN сдвигаются на ether3–ether5. Порт управления из этой статьи при этом исчезнет. Заранее выберите другой порт управления (например, ether3: pvid=1, frame-types=admit-all) и заново распределите роли остальных портов. На пятипортовой модели при двух провайдерах останется три LAN-порта, и схему этой статьи придётся сократить.
Аппаратное ускорение и его ограничения
Этот раздел можно пропустить: на работу VLAN он не влияет, только на скорость внутри локальной сети.
Многие роутеры MikroTik содержат встроенный коммутаторный чип. Пока мост работает через него, кадры между портами пересылаются «на лету», не нагружая процессор: у портов в /interface bridge port print стоит флаг H (hardware offload). Но делать это вместе с VLAN-фильтрацией умеют не все чипы. Что говорит документация:
| Семейство чипа (примеры из документации) | Bridge VLAN filtering с аппаратным ускорением |
|---|---|
| Marvell Prestera (CRS3xx, CRS4xx, CRS5xx, CCR2116, CCR2216) | да |
| 88E6393X, 88E6191X, 88E6190 (RB5009, L009, CCR2004-16G-2S+) | да |
| MT7621, MT7531, EN7523, RTL8367 (hEX S, hAP ax lite, hEX Refresh, RB4011) | да |
| QCA8337, Atheros8327, Atheros8316 (RB3011, cAP ac, wAP ac) | нет |
| Atheros8227, Atheros7240 (hAP lite, hEX lite) | нет |
| IPQ-PPE, QCA8386 (серии hAP ax, cAP ax, Chateau ax) | нет |
| CRS1xx/CRS2xx | нет (у них свой способ настройки) |
«Нет» не значит, что VLAN не заработают: они работают на любом устройстве, но кадры пересылает процессор, и скорость внутри локальной сети может быть ниже. Для старых моделей с чипом документация описывает отдельный способ через /interface ethernet switch; в этой серии мы его не разбираем.
Ещё несколько нюансов:
- на чипах из второй и третьей строк ускорение отключается, если использовать
ether-type=0x88a8или0x9100(двойные теги, Q-in-Q) либоtag-stacking=yes. Нам это не нужно; - включение
vlan-filteringможет сбросить коммутаторный чип: документация предупреждает, что на короткое время связь пропадёт на всех Ethernet-портах. Делайте это в удобное время; - маршрутизация между VLAN идёт через процессор роутера. Отдельное ускорение маршрутизации (L3 Hardware Offloading) есть не у всех моделей, и мы его не рассматриваем.
Проверить, работает ли ускорение, можно после настройки командой /interface bridge port print: ищите флаг H у портов.
Порядок действий без потери доступа
Правила, которых мы будем держаться:
- Заранее выберите порт управления и не трогайте его. У нас это
ether2:pvid=1,frame-types=admit-all. Не меняйтеpvidиframe-typesни у него, ни у самого моста. Тогда адрес192.168.88.1останется доступным при любой ошибке в остальных VLAN. - Сначала всё готовим, потом включаем. Пока
vlan-filtering=no,pvid,frame-typesи таблица VLAN ни на что не влияют. Мы создаём VLAN-интерфейсы, адреса, DHCP, firewall, настройки портов и записи таблицы, а фильтрацию включаем последней командой. - Подключайтесь кабелем к
ether2, а не по Wi-Fi и не через порты, которые переводим в другие VLAN. - Перед последней командой включите Safe Mode. Если сессия оборвётся, роутер сам откатит изменения. Что это такое и как им пользоваться, подробно описано в статье 02; главное мы повторим в шаге 8.
- Сделайте резервную копию и экспорт конфигурации.
- Если есть возможность, держите наготове консоль: документация MikroTik рекомендует настраивать VLAN-фильтрацию через serial-консоль или через порт, который не входит в мост.
Шаг 1. Резервная копия
/system backup save name=before-vlan password="<ПАРОЛЬ_БЭКАПА>"
/export file=before-vlan
Без параметра password бинарная копия не шифруется (подробнее в статье 01). Текстовый экспорт /export по умолчанию не содержит паролей и других секретов, но и хранить его стоит аккуратно.
Как проверить: в /file print появятся before-vlan.backup и before-vlan.rsc. Скачайте их на компьютер: в WinBox откройте раздел Files и перетащите оба файла на рабочий стол (подробнее о способах скачивания и автоматических копиях написано в статье 10).
Шаг 2. VLAN-интерфейсы и адреса
VLAN-интерфейс — «виртуальный порт» роутера для одной VLAN. Создаём его поверх моста (interface=bridge), а не поверх физического порта: порт, входящий в мост, принадлежит мосту, и VLAN-интерфейс на нём останется пустым.
/interface vlan add name=vlan10-office vlan-id=10 interface=bridge
/interface vlan add name=vlan20-guest vlan-id=20 interface=bridge
/interface vlan add name=vlan30-iot vlan-id=30 interface=bridge
Теперь адреса роутера в каждой подсети:
/ip address add address=192.168.10.1/24 interface=vlan10-office
/ip address add address=192.168.20.1/24 interface=vlan20-guest
/ip address add address=192.168.30.1/24 interface=vlan30-iot
Как проверить: /interface vlan print показывает три интерфейса с нужными vlan-id, а /ip address print — три новых адреса на них. Интерфейсы не должны иметь флага X (выключен); если мост не работает, например нет ни одного активного порта, они будут неактивны.
Шаг 3. DHCP-серверы на каждую VLAN
DHCP-сервер должен слушать именно VLAN-интерфейс, у которого есть адрес в нужной подсети. Сервер на bridge обслуживает только кадры без тега (то есть VLAN 1) и клиентам из других VLAN ничего не выдаст.
Сначала пулы:
/ip pool add name=pool-office ranges=192.168.10.10-192.168.10.254
/ip pool add name=pool-guest ranges=192.168.20.10-192.168.20.254
/ip pool add name=pool-iot ranges=192.168.30.10-192.168.30.254
Потом серверы. Гостям сокращаем срок аренды до часа, чтобы адреса быстрее освобождались:
/ip dhcp-server add name=dhcp-office interface=vlan10-office address-pool=pool-office lease-time=1d disabled=no
/ip dhcp-server add name=dhcp-guest interface=vlan20-guest address-pool=pool-guest lease-time=1h disabled=no
/ip dhcp-server add name=dhcp-iot interface=vlan30-iot address-pool=pool-iot lease-time=1d disabled=no
И параметры сети для клиентов: шлюз и DNS-сервер — адрес роутера в своей подсети.
/ip dhcp-server network add address=192.168.10.0/24 gateway=192.168.10.1 dns-server=192.168.10.1
/ip dhcp-server network add address=192.168.20.0/24 gateway=192.168.20.1 dns-server=192.168.20.1
/ip dhcp-server network add address=192.168.30.0/24 gateway=192.168.30.1 dns-server=192.168.30.1
Клиенты будут спрашивать имена у роутера, поэтому на нём должен быть включён приём DNS-запросов. В статье 03 это уже делалось; повторная команда безвредна:
/ip dns set allow-remote-requests=yes
Как проверить: /ip dhcp-server print показывает три новых сервера без флага I (недействителен). Флаг I значит, что у интерфейса нет адреса: вернитесь к шагу 2. /ip dhcp-server network print показывает три записи сетей.
Шаг 4. Списки интерфейсов и firewall между VLAN
Зачем нужны списки
Когда трафик из VLAN 20 уходит в интернет, его входной интерфейс в firewall — vlan20-guest, а не ether4 и не bridge. Поэтому правила пишутся на VLAN-интерфейсы. Чтобы не перечислять их в каждом правиле, соберём списки интерфейсов, как в канонической схеме серии:
- офисную VLAN считаем доверенной и добавляем в существующий список
LAN: правило «accept all from LAN» в цепочке input (статья 04) даст офису доступ к управлению роутером; - для гостей и IoT создаём списки
GUESTиIOT, а общий списокUNTRUSTEDсобираем из них черезinclude.
/interface list member add list=LAN interface=vlan10-office
/interface list add name=GUEST
/interface list add name=IOT
/interface list add name=UNTRUSTED include=GUEST,IOT
/interface list member add list=GUEST interface=vlan20-guest
/interface list member add list=IOT interface=vlan30-iot
Как проверить: /interface list member print показывает vlan10-office в LAN, vlan20-guest в GUEST, vlan30-iot в IOT.
Разрешите управление из офисной подсети
Firewall пустит офис к роутеру, но если вы ограничивали службы WinBox и SSH по адресу клиента (статьи 01 и 04), роутер всё равно закроет соединение с 192.168.10.0/24. Параметр available-from принимает список подсетей через запятую; добавляем офисную, не убирая старую (порт управления ether2 остаётся в 192.168.88.0/24):
/ip service set winbox,ssh available-from=192.168.88.0/24,192.168.10.0/24
Если вы так же ограничили другие службы (например, www-ssl), дополните список и у них командой того же вида. Проверьте и поле address у вашего пользователя (/user print detail): если оно задано, вход разрешён только с этого адреса, и его нужно изменить так, чтобы офисная подсеть подходила, либо снять ограничение. Гости и IoT в этот список не попадают намеренно.
Как проверить: /ip service print показывает в available-from у winbox и ssh обе подсети.
Important
NAT заново настраивать не нужно: каноническое правило masquerade с out-interface-list=WAN обслуживает любой трафик, уходящий к провайдеру, в том числе из новых VLAN. Не включайте и use-ip-firewall-for-vlan: он нужен для фильтрации мостового трафика и меняет in-interface в цепочке prerouting на bridge, а наши правила опираются на VLAN-интерфейсы. Трафик, который маршрутизируется между VLAN-интерфейсами, и так проходит через IP firewall.
Что разрешить самому роутеру (цепочка input)
Гости и IoT не должны управлять роутером, но им нужны DHCP (UDP 67) и DNS (порт 53, UDP и TCP). Добавляем два разрешающих правила перед финальным запретом drop everything else. Обратите внимание на place-before: без него правила окажутся в конце цепочки, после запрета, и не сработают. Правило для UDP 67 перестраховочное: документация не уточняет, фильтрует ли input запросы DHCP, а лишнее разрешение безвредно.
/ip firewall filter add chain=input action=accept protocol=udp dst-port=53,67 in-interface-list=UNTRUSTED comment="accept DNS and DHCP from guest and IoT" place-before=[find chain=input comment="drop everything else"]
/ip firewall filter add chain=input action=accept protocol=tcp dst-port=53 in-interface-list=UNTRUSTED comment="accept DNS over TCP from guest and IoT" place-before=[find chain=input comment="drop everything else"]
Правило accept ICMP из канона применяется ко всем, поэтому гости смогут «пинговать» сам роутер, в том числе по его адресам в других подсетях. Всё остальное, что направлено на роутер (WinBox, SSH, веб-интерфейс), с их VLAN отсекается финальным drop.
Warning
Если правила с комментарием drop everything else нет (вы настраивали firewall не по статье 04), команда с place-before завершится ошибкой и ничего не добавит. Это безопасно: найдите свой финальный запрет и поставьте новые правила перед ним.
Что разрешить между сетями (цепочка forward)
Цепочка forward обрабатывает трафик, проходящий через роутер, в том числе из одной VLAN в другую. Каноническая цепочка уже принимает established и related и отбрасывает invalid; мы добавляем в её конец три правила:
/ip firewall filter add chain=forward action=accept in-interface-list=IOT dst-address=192.168.88.10 protocol=tcp dst-port=1883 comment="IoT to MQTT server"
/ip firewall filter add chain=forward action=drop in-interface-list=IOT out-interface-list=!WAN comment="drop IoT to anything but internet"
/ip firewall filter add chain=forward action=drop in-interface-list=GUEST out-interface-list=!WAN comment="drop guests to anything but internet"
Как это читается:
- Первое правило — явное исключение для IoT: устройствам VLAN 30 разрешён один сервис на одном адресе. В примере это MQTT-брокер на порту 1883: MQTT — лёгкий протокол обмена сообщениями между «умными» устройствами и сервером. Адрес
192.168.88.10условный, это сервер из статьи 05; подставьте свою службу. Свои исключения пишите по тому же образцу: адрес назначения, протокол, порт. Исключения всегда стоят выше запрещающих правил. - Второе правило запрещает IoT всё, что идёт не в интернет. Запись
out-interface-list=!WANзначит «любой выходной интерфейс, кроме входящих вWAN». Так IoT не доберётся ни до офиса, ни до гостей, ни до старой сети. - Третье правило делает то же для гостей, но без исключений: гости видят только интернет.
Направление важно. Офис может сам открывать соединения в сторону IoT и гостей (например, зайти на веб-интерфейс камеры): запрещающие правила смотрят на входной интерфейс GUEST и IOT, а ответы проходят по правилу accept established,related. Обратное — когда гость или IoT-устройство начинает соединение к офису — блокируется. FastTrack в каноне затрагивает только установленные соединения (established,related), а первый пакет нового соединения проходит обычные правила цепочки, поэтому запрет срабатывает.
Note
Обнаружение устройств широковещанием (mDNS, SSDP: вывод картинки на телевизор, поиск принтера) между подсетями не передаётся. Если «умные» устройства должны находить друг друга между VLAN, это отдельная задача; в статье она не решается.
Правила в этой статье относятся только к IPv4. Если на роутере включён IPv6, такие же ограничения нужно задать в /ipv6 firewall filter; в этой серии IPv6 не рассматривается.
Как проверить: /ip firewall filter print показывает новые правила input перед drop everything else, а правила forward — в конце цепочки, после канонических.
Шаг 5. Порты моста
Задаём pvid и допустимые типы кадров. Порты уже в мосте, поэтому используем set. Пока фильтрация выключена, эти параметры ничего не меняют.
/interface bridge port set [find interface=ether5] frame-types=admit-only-vlan-tagged ingress-filtering=yes
/interface bridge port set [find interface=ether3] pvid=10 frame-types=admit-only-untagged-and-priority-tagged ingress-filtering=yes
/interface bridge port set [find interface=ether4] pvid=20 frame-types=admit-only-untagged-and-priority-tagged ingress-filtering=yes
Порт ether2 не трогаем: у него pvid=1 и frame-types=admit-all, это наш вход без тега в «старую» сеть. Если какого-то порта нет в мосте, добавьте его командой вида /interface bridge port add bridge=bridge interface=ether5.
Tip
Переходный вариант для trunk-порта. Если за коммутатором остались устройства в старой сети, оставьте на ether5 значение frame-types=admit-all. Порт станет hybrid: VLAN 10, 20 и 30 пойдут с тегами, а кадры без тега продолжат попадать в VLAN 1, то есть в 192.168.88.0/24. Когда все устройства переедут, верните admit-only-vlan-tagged.
Как проверить: /interface bridge port print показывает у ether3 pvid 10, у ether4 — 20, у ether5 в frame-types — admit-only-vlan-tagged. Если нужных колонок не видно, используйте /interface bridge port print detail.
Шаг 6. Таблица VLAN
Заполняем таблицу. Во всех трёх записях bridge указан среди tagged: именно это связывает мост с VLAN-интерфейсами и позволяет роутеру маршрутизировать трафик VLAN. Порт ether5 — trunk, поэтому он тоже tagged. Access-порты указываем как untagged, каждый в своей отдельной записи.
/interface bridge vlan add bridge=bridge tagged=bridge,ether5 untagged=ether3 vlan-ids=10
/interface bridge vlan add bridge=bridge tagged=bridge,ether5 untagged=ether4 vlan-ids=20
/interface bridge vlan add bridge=bridge tagged=bridge,ether5 vlan-ids=30
У VLAN 30 нет untagged-портов: IoT-устройства приходят через коммутатор. Если хотите подключать их прямо в порт роутера, настройте порт по образцу ether3: pvid=30 и отдельная запись с untagged=<порт>. Так же можно проверить IoT без коммутатора: временно поставьте pvid=30 на ether4 и укажите untagged=ether4 в записи VLAN 30, убрав его из записи VLAN 20.
Warning
Записи с несколькими номерами для access-порта (vlan-ids=10,20 вместе с untagged=...) делать нельзя: порты получат лишние VLAN. Несколько номеров допустимы только для trunk-порта в записи без untagged-портов.
Как проверить: /interface bridge vlan print покажет три ваши записи. Колонки CURRENT-TAGGED и CURRENT-UNTAGGED заполнятся после включения фильтрации.
Шаг 7. Коммутатор за trunk-портом
Пропустите этот шаг, если у вас нет управляемого коммутатора.
Роутер ждёт на ether5 кадры с метками 10, 20 и 30. Названия пунктов меню на управляемом коммутаторе зависят от производителя, но смысл настроек одинаков:
| Порт коммутатора | Что настроить |
|---|---|
| порт, подключённый к роутеру | Tagged (Trunk) для VLAN 10, 20 и 30; других VLAN и кадров без тега не нужно |
| порты компьютеров офиса | Untagged (Access) в VLAN 10, PVID 10 |
| порты гостей | Untagged (Access) в VLAN 20, PVID 20 |
| порты IoT-устройств | Untagged (Access) в VLAN 30, PVID 30 |
Сам коммутатор удобно держать в VLAN 10: присвойте ему адрес из 192.168.10.0/24 (скажем, 192.168.10.2) со шлюзом 192.168.10.1. Пока коммутатор управляется по старому адресу 192.168.88.x без тега, оставьте на ether5 переходный вариант из шага 5: иначе кадры без тега будут отбрасываться, и вы потеряете доступ к коммутатору. Если коммутатор тоже MikroTik, схема та же: мост с vlan-filtering, uplink как tagged-порт, access-порты с pvid.
Как проверить (после шага 8): /interface bridge host print where !local показывает MAC-адреса устройств за коммутатором на порту ether5, и у каждого в колонке VID стоит нужная VLAN.
Шаг 8. Включаем фильтрацию в Safe Mode
Всё готово. Safe Mode подробно описан в статье 02; здесь только главное: если сессия оборвалась, изменения, сделанные в безопасном режиме, откатываются сами, примерно через 9 минут. Выход по Ctrl+D тоже откатывает изменения, а /quit — нет.
- Убедитесь, что вы подключены кабелем к
ether2и открыт терминал (SSH или терминал WinBox) на192.168.88.1. - Войдите в Safe Mode: в терминале нажмите
Ctrl+X(илиF4), в WinBox нажмите кнопку Safe Mode. В приглашении появится меткаSAFE. - Выполните команду:
/interface bridge set bridge vlan-filtering=yes
- Если связь сохранилась (допустим кратковременный разрыв, пока мост перезапускается), проверьте, что всё работает (шаг 9), и выйдите из Safe Mode с сохранением, снова нажав
Ctrl+X. Не нажимайтеCtrl+D: это откатит изменения. - Если связь пропала и не возвращается, ничего не нажимайте и подождите до девяти минут: роутер сам вернёт
vlan-filtering=no. Затем подключитесь заново и ищите ошибку. - Если роутер снова отвечает, а старая сессия ещё висит, откройте новую, нажмите
Ctrl+Xи при вопросе про перехват Safe Mode выберитеr(оставить изменения), затем выйдите из режима повторнымCtrl+X.
Important
Включайте Safe Mode непосредственно перед этой командой, а не в начале работы. История Safe Mode вмещает ограниченное число действий (порядка ста): если их накопится слишком много, режим выключится сам, а изменения перестанут откатываться.
Caution
При включении фильтрации мост перезапускается, а на моделях с коммутаторным чипом связь на всех портах может пропасть на короткое время. Не выполняйте других действий, пока всё не вернётся.
Шаг 9. Проверка
Начните с самого роутера:
/interface bridge vlan print
Ожидаемый результат: в записях VLAN 10, 20 и 30 в CURRENT-TAGGED указаны bridge и ether5; для VLAN 10 в CURRENT-UNTAGGED стоит ether3, для VLAN 20 — ether4. Кроме ваших записей появится динамическая запись для VLAN 1: в ней untagged-участники — bridge, ether2 и другие порты с pvid=1, но не ether5 (при frame-types=admit-only-vlan-tagged порт не добавляется как untagged). Проверьте, нет ли «лишних» участников, особенно у bridge.
/interface bridge port print
Ожидаемый результат: правильные pvid и frame-types на портах. Флаг H означает работающее аппаратное ускорение (если чип его поддерживает, см. таблицу выше).
/ip dhcp-server lease print
Ожидаемый результат: подключите по компьютеру к ether3 и ether4 (или к портам коммутатора в VLAN 10 и 20). Если адрес не пришёл сразу, переподключите кабель. В списке аренд появятся адреса 192.168.10.x и 192.168.20.x.
/interface bridge host print where !local
Ожидаемый результат: у каждого найденного MAC-адреса в колонке VID указан номер VLAN.
Теперь проверим правила. Тестируйте с клиентов, а не с самого роутера: пакеты, которые роутер создаёт сам, идут через цепочку output, а не forward, и правила между VLAN их не касаются.
| Проверка | Офис (VLAN 10) | Гость (VLAN 20) |
|---|---|---|
| ping адреса роутера в своей сети | отвечает | отвечает |
| ping устройства в другой VLAN | устройства из VLAN 20 и 30 отвечают | устройства из VLAN 10 и 30 не отвечают |
| открытие сайта в интернете | работает | работает |
| WinBox или веб-интерфейс роутера | открывается | не открывается |
Пинг роутера по его адресам в других подсетях у гостя проходит: ICMP в цепочке input разрешён, это ожидаемо.
Учтите, что результат ping зависит и от самих компьютеров. Если ping на компьютер с Windows не проходит даже там, где должен, проверьте, не блокирует ли его firewall самого компьютера (профиль «Общедоступная сеть»). Надёжнее проверять доступ к веб-интерфейсу, принтеру или другой службе, а запреты видеть по счётчикам правил на роутере.
Запреты видно и на роутере: пошлите пинг с гостевого компьютера на устройство в офисе и посмотрите счётчики:
/ip firewall filter print stats where chain=forward
Ожидаемый результат: у правила drop guests to anything but internet растёт счётчик пакетов. Если пинг всё-таки проходит, учтите: уже установленные соединения продолжают жить по правилу accept established,related. Проверяйте новыми соединениями (перезапустите пинг).
Наконец, убедитесь, что порт управления жив: отключитесь, снова подключитесь к ether2 и откройте 192.168.88.1. Если вы ещё в Safe Mode, выйдите из него с сохранением (Ctrl+X).
Tip
Доступ к роутеру «по MAC-адресу» (MAC-Telnet и MAC-WinBox, вкладка Neighbors в WinBox) работает на втором уровне, и IP firewall его не фильтрует. Разрешён он на интерфейсах из списка allowed-interface-list: в заводской конфигурации это LAN, а у самого параметра значение по умолчанию — все интерфейсы. По документации мост из этого списка пропускает такие подключения через любой свой порт, то есть и через ether4 с гостями, и через гостевой Wi-Fi. Пароль всё равно нужен, но это лишняя поверхность для атаки.
Чтобы закрыть MAC-доступ гостям и сохранить его на остальных портах как запасной путь, добавьте правило bridge filter на гостевой порт (документация приводит именно такой способ):
/interface bridge filter add chain=input in-interface=ether4 mac-protocol=ip ip-protocol=udp dst-port=20561 action=drop
Для гостевого Wi-Fi сделайте то же с in-interface=wifi-guest-5g и in-interface=wifi-guest-2g. Если MAC-доступ не нужен совсем, отключите его командами ниже. Делайте это в самом конце, потому что MAC-доступ ещё и ваш запасной путь на случай ошибки.
/tool mac-server set allowed-interface-list=none
/tool mac-server mac-winbox set allowed-interface-list=none
Wi-Fi: отдельные сети по VLAN
Идея проста: у каждого SSID своя VLAN, и роутер кладёт трафик клиентов в нужную VLAN. Как создавались сети, написано в статье 06; имена профилей и интерфейсов ниже взяты оттуда, при других именах подставьте свои. Там гостевые интерфейсы wifi-guest-5g и wifi-guest-2g остались выключенными до появления отдельной VLAN. Теперь VLAN 20 есть, и в datapath dp-guest можно задать vlan-id.
У datapath есть параметр vlan-id: клиентам такого интерфейса присваивается эта VLAN, трафик клиента автоматически получает метку, а клиенту отдаются только кадры с этой меткой. Это относится к интерфейсам пакета wifi-qcom (Wi-Fi 6 и новее); для Wi-Fi 5 (wifi-qcom-ac) такая выдача метки не поддерживается, и там интерфейс настраивают как access-порт: pvid порта моста и запись в таблице VLAN, пример есть в документации в разделе про CAPsMAN и VLAN.
/interface wifi datapath set dp-guest vlan-id=20
/interface wifi enable wifi-guest-5g,wifi-guest-2g
Как проверить: подключите телефон к OfficeWiFi-Guest: в /ip dhcp-server lease print должен появиться адрес из 192.168.20.0/24. Посмотрите также /interface bridge port print и /interface bridge vlan print: гостевые интерфейсы должны оказаться в VLAN 20. Если клиент не получает адрес, используйте запасной способ, как для Wi-Fi 5: уберите у datapath и vlan-id, и bridge, чтобы интерфейсы не добавлялись в мост автоматически, затем добавьте их в мост сами с нужным pvid:
/interface wifi datapath set dp-guest !vlan-id
/interface wifi datapath set dp-guest !bridge
/interface bridge port add bridge=bridge interface=wifi-guest-5g pvid=20 frame-types=admit-only-untagged-and-priority-tagged
/interface bridge port add bridge=bridge interface=wifi-guest-2g pvid=20 frame-types=admit-only-untagged-and-priority-tagged
Порт с pvid=20 сам попадёт в VLAN 20 как untagged; убедитесь в этом по /interface bridge vlan print. Не совмещайте два способа сразу.
Основной SSID остаётся в «старой» сети. Чтобы перевести его в офис, аналогично укажите vlan-id=10 в datapath dp-lan, но делайте это в Safe Mode и кабелем: всех, кто подключён по Wi-Fi, вы отрежете от 192.168.88.0/24.
Отдельную точку доступа за коммутатором подключите в порт с нужными VLAN с тегами, а привязку SSID к VLAN настройте на самой точке.
Типичные ошибки
- Включили
vlan-filteringслишком рано или остались без порта управления. Фильтрация пропускает к процессору роутера только то, что разрешено таблицей и настройками портов. Если вы настраиваете по Wi-Fi или через порт, который перевели в другую VLAN, связь пропадёт. Лечится кабелем в порт управления (у насether2) и командой/interface bridge set bridge vlan-filtering=no; от повторения защищает Safe Mode. - Забыли добавить
bridgeв tagged. Трафик VLAN доходит до моста, но не попадает в VLAN-интерфейс: адрес роутера в этой VLAN не пингуется, DHCP молчит, клиент остаётся без адреса. В/interface bridge vlan printв CURRENT-TAGGED записи должен бытьbridge. Начиная с RouterOS 7.16, если на мосте уже включёнvlan-filtering, при создании VLAN-интерфейсаbridgeдобавляется в tagged автоматически (динамическая запись «added by vlan on bridge»). В нашем порядке фильтрация включается позже, поэтому полагаться на это нельзя: запись из шага 6 обязательна. - Неверный или не заданный
pvidна access-порту. Если наether3осталсяpvid=1, устройство попадёт в «старую» сеть вместо VLAN 10 и получит адрес192.168.88.x. Проверяйтеpvidв/interface bridge port printи помните: безvlan-filtering=yesон вообще не действует. - DHCP-сервер или адрес настроены на
bridgeвместо VLAN-интерфейса. Сервер наbridgeработает только для кадров без тега, и клиенты VLAN получат адрес не из той подсети либо вообще ничего. Адрес и сервер должны быть наvlan10-office,vlan20-guest,vlan30-iot. Близкая ошибка — создать VLAN-интерфейс на физическом порту, который входит в мост. Интерфейсы создаются на мосте (interface=bridge): мост забирает трафик порта себе, и такой интерфейс ничего не принимает. - Правила firewall написаны не на те интерфейсы или поставлены не туда. Трафик VLAN приходит с интерфейсов
vlan10-officeи подобных; правилоin-interface=bridgeего не увидит, и гости получат доступ ко всему. Еслиvlan10-officeне добавлен вLAN, офис потеряет WinBox и DNS роутера. Если правила input дописаны в конец цепочки безplace-before, они окажутся после финальногоdropи не сработают. Проверяйте запреты тестовым пингом и счётчиками. - Trunk на коммутаторе не совпадает с настройками роутера. На порту коммутатора, смотрящем в роутер, должны быть разрешены с тегами VLAN 10, 20 и 30, а устройства должны стоять в access-портах нужной VLAN. Если VLAN на коммутаторе не разрешена, клиент получит физическое соединение (link up), но не адрес.
Что дальше
- MikroTik с нуля 06. Wi-Fi на RouterOS 7 — настройка SSID и защиты беспроводных сетей, в том числе гостевой.
- MikroTik с нуля 04. Firewall для начинающих — цепочки, состояния соединений и логика правил, на которых построено разделение VLAN.
- MikroTik с нуля 09. Ограничение скорости: Simple Queue, PCQ и CAKE — как ограничить пропускную способность, чтобы гости не занимали весь канал. Примеры там написаны для
192.168.88.0/24: для VLAN укажите вtargetочереди нужную подсеть (например,192.168.20.0/24) и учтите FastTrack, как описано в статье. - MikroTik с нуля 08. Диагностика и мониторинг — как искать причину, если VLAN работает не так, как нужно.