mikrotik-wiki.ru
Главная
Загрузка...

DHCP Relay и Option 82 на MikroTik

RouterOS 7.xДля провайдеров10 мин230 мар. 2026 г.
TelegramVK

DHCP Relay — механизм пересылки DHCP-запросов между подсетями, позволяющий использовать один централизованный DHCP-сервер для обслуживания множества VLAN. Без Relay в каждом VLAN нужен свой DHCP-сервер (или отдельный экземпляр на маршрутизаторе), что усложняет управление. Option 82 (Relay Agent Information) дополняет Relay: она сообщает DHCP-серверу, с какого порта и коммутатора пришёл запрос, что позволяет привязать IP-адрес к физическому порту абонента. Эта связка широко используется провайдерами для IPoE-подключений и в корпоративных сетях с большим количеством VLAN.

Руководство актуально для RouterOS 7.20+.

Описание

Зачем нужен DHCP Relay

DHCP работает через broadcast. Broadcast не проходит через маршрутизатор — он ограничен одним L2-сегментом (VLAN). Если в сети 50 VLAN, без DHCP Relay нужно:

  • Либо создать 50 экземпляров DHCP-сервера (по одному на каждый VLAN)
  • Либо настроить 50 DHCP Relay, пересылающих запросы на один центральный сервер

Второй вариант значительно проще в управлении: один сервер, одна база IP-адресов, одно место для мониторинга и диагностики.

code
Абонент (VLAN 100)                    Абонент (VLAN 200)
       |                                     |
   [DHCP Discover broadcast]            [DHCP Discover broadcast]
       |                                     |
  [MikroTik: DHCP Relay]              [MikroTik: DHCP Relay]
       |                                     |
       +---------> [DHCP Server] <-----------+
                   (unicast)
                 Один сервер для всех VLAN

Как работает DHCP Relay:

  1. Клиент отправляет DHCP Discover (broadcast) в своём VLAN
  2. MikroTik-relay получает этот broadcast
  3. Relay подставляет в поле giaddr (Gateway IP Address) свой IP-адрес в этом VLAN
  4. Relay пересылает запрос на DHCP-сервер как unicast
  5. DHCP-сервер видит giaddr, определяет подсеть клиента и назначает IP из соответствующего пула
  6. Сервер отправляет ответ на giaddr (обратно на relay)
  7. Relay пересылает ответ клиенту в его VLAN

Что такое Option 82 (Relay Agent Information)

Option 82 — расширение DHCP (RFC 3046), которое добавляет в DHCP-запрос информацию о том, откуда именно пришёл запрос:

Sub-optionНазваниеСодержимоеПример
1Circuit IDИдентификатор порта/VLANether5:100 или switch1/port5
2Remote IDИдентификатор устройства (relay)MAC-адрес или hostname коммутатора

Зачем это нужно:

  • Привязка IP к порту — DHCP-сервер выдаёт конкретный IP-адрес абоненту на основании порта, к которому он подключён (а не MAC-адреса, который можно подменить)
  • Идентификация абонента — в ISP-сетях Option 82 позволяет однозначно определить, на каком коммутаторе и порту подключён абонент
  • Безопасность — защита от подмены MAC-адреса (IP привязан к порту, а не к MAC)
  • Диагностика — при проблемах видно, откуда именно пришёл запрос

DHCP Relay vs DHCP Server per VLAN

ПараметрDHCP Relay + Option 82DHCP Server per VLAN
Количество серверов1 (централизованный)N (по числу VLAN)
УправлениеПростое (одно место)Сложное (N конфигураций)
Option 82ДаНет (не нужна)
Привязка IP к портуДа (через Option 82)Да (через static lease)
Нагрузка на маршрутизаторМинимальная (relay)Выше (N DHCP-серверов)
ОтказоустойчивостьЕдиная точка отказа (сервер)Распределённая
ISP-сценарийОптимальноНе масштабируется
Малая сеть (3–5 VLAN)ИзбыточноОптимально

Вывод: DHCP Relay + Option 82 — для ISP и крупных корпоративных сетей с 10+ VLAN. DHCP Server per VLAN — для малых сетей с 3–5 VLAN.

Настройка

Сценарий 1: Базовый DHCP Relay (без Option 82)

Простейший случай: MikroTik маршрутизирует трафик между VLAN и пересылает DHCP-запросы на центральный сервер.

Схема:

code
[DHCP Server: 172.16.0.10]
        |
   [MikroTik Router]
    /        \
[VLAN 100]  [VLAN 200]
192.168.100.0/24  192.168.200.0/24

Настройка MikroTik (маршрутизатор с relay):

[admin@MikroTik] >
# --- VLAN-интерфейсы ---
/interface/vlan/add name=vlan100 vlan-id=100 interface=bridge
/interface/vlan/add name=vlan200 vlan-id=200 interface=bridge

# --- IP-адреса (будут использоваться как giaddr) ---
/ip/address/add address=192.168.100.1/24 interface=vlan100 comment="VLAN 100 gateway"
/ip/address/add address=192.168.200.1/24 interface=vlan200 comment="VLAN 200 gateway"

# --- DHCP Relay ---
/ip/dhcp-relay/add name=relay-vlan100 interface=vlan100 \
  dhcp-server=172.16.0.10 local-address=192.168.100.1 \
  disabled=no comment="Relay for VLAN 100"

/ip/dhcp-relay/add name=relay-vlan200 interface=vlan200 \
  dhcp-server=172.16.0.10 local-address=192.168.200.1 \
  disabled=no comment="Relay for VLAN 200"

Параметры:

  • interface — интерфейс, на котором relay слушает DHCP-broadcast от клиентов
  • dhcp-server — IP-адрес центрального DHCP-сервера
  • local-address — IP-адрес, который подставляется в giaddr. Должен совпадать с адресом маршрутизатора в этом VLAN

Настройка центрального DHCP-сервера (на другом MikroTik или Linux):

[admin@MikroTik] >
# Если DHCP-сервер тоже MikroTik:

# Пулы для каждой подсети
/ip/pool/add name=pool-vlan100 ranges=192.168.100.10-192.168.100.254
/ip/pool/add name=pool-vlan200 ranges=192.168.200.10-192.168.200.254

# DHCP-сервер на интерфейсе, куда приходит relay
/ip/dhcp-server/add name=dhcp-central interface=ether1 address-pool=pool-vlan100 \
  relay=192.168.100.1 disabled=no comment="Central DHCP for VLAN 100"

/ip/dhcp-server/add name=dhcp-central-200 interface=ether1 address-pool=pool-vlan200 \
  relay=192.168.200.1 disabled=no comment="Central DHCP for VLAN 200"

# Сети (network) для каждого пула
/ip/dhcp-server/network/add address=192.168.100.0/24 gateway=192.168.100.1 \
  dns-server=8.8.8.8,8.8.4.4
/ip/dhcp-server/network/add address=192.168.200.0/24 gateway=192.168.200.1 \
  dns-server=8.8.8.8,8.8.4.4

DHCP-сервер определяет подсеть клиента по полю giaddr в пересланном запросе. Если giaddr=192.168.100.1, значит, клиент из подсети 192.168.100.0/24, и IP выдаётся из соответствующего пула.

Сценарий 2: DHCP Relay с Option 82

Добавляем Option 82 для идентификации абонентов по порту и коммутатору.

[admin@MikroTik] >
# --- DHCP Relay с Option 82 ---
/ip/dhcp-relay/add name=relay-vlan100 interface=vlan100 \
  dhcp-server=172.16.0.10 local-address=192.168.100.1 \
  add-relay-info=yes \
  disabled=no comment="Relay VLAN 100 with Option 82"

/ip/dhcp-relay/add name=relay-vlan200 interface=vlan200 \
  dhcp-server=172.16.0.10 local-address=192.168.200.1 \
  add-relay-info=yes \
  disabled=no comment="Relay VLAN 200 with Option 82"

Параметр add-relay-info=yes включает добавление Option 82 в DHCP-запрос. MikroTik автоматически формирует:

  • Circuit ID — содержит информацию об интерфейсе и VLAN (формат зависит от версии RouterOS)
  • Remote ID — содержит MAC-адрес или system identity устройства-relay

Сценарий 3: ISP с Option 82 и привязкой IP к порту

Полный ISP-сценарий: несколько коммутаторов доступа (CSS326), DHCP Relay на агрегации, центральный DHCP-сервер с привязкой IP к Option 82.

code
[DHCP Server + Billing]
        |
   [CCR2004 — BRAS/Router]
        |
   [CRS326 — Aggregation]
    /        \
[CSS326 #1]  [CSS326 #2]    — Access switches
 VLAN 101     VLAN 102
   |            |
Абоненты    Абоненты

Коммутатор доступа (CSS326 #1):

[admin@MikroTik] >
# CSS326 — коммутатор доступа, дом 1
/system/identity/set name="ACC-HOUSE-01"

/interface/bridge/add name=bridge vlan-filtering=yes

# Uplink (trunk)
/interface/bridge/port/add bridge=bridge interface=sfp-sfpplus1 \
  pvid=1 frame-types=admit-only-vlan-tagged

# Абонентские порты (access VLAN 101)
/interface/bridge/port/add bridge=bridge interface=ether1 pvid=101
/interface/bridge/port/add bridge=bridge interface=ether2 pvid=101
/interface/bridge/port/add bridge=bridge interface=ether3 pvid=101

# VLAN table
/interface/bridge/vlan/add bridge=bridge vlan-ids=101 \
  tagged=sfp-sfpplus1 \
  untagged=ether1,ether2,ether3

Маршрутизатор/BRAS (CCR2004):

[admin@MikroTik] >
# ============================================
# ISP DHCP Relay с Option 82
# ============================================

# --- VLAN-интерфейсы ---
/interface/vlan/add name=vlan101-house1 vlan-id=101 interface=sfp-sfpplus2
/interface/vlan/add name=vlan102-house2 vlan-id=102 interface=sfp-sfpplus2

# --- IP-адреса (giaddr) ---
/ip/address/add address=10.101.0.1/24 interface=vlan101-house1
/ip/address/add address=10.102.0.1/24 interface=vlan102-house2

# --- DHCP Relay с Option 82 ---
/ip/dhcp-relay/add name=relay-house1 interface=vlan101-house1 \
  dhcp-server=172.16.0.10 local-address=10.101.0.1 \
  add-relay-info=yes \
  disabled=no comment="House 1 relay with Option 82"

/ip/dhcp-relay/add name=relay-house2 interface=vlan102-house2 \
  dhcp-server=172.16.0.10 local-address=10.102.0.1 \
  add-relay-info=yes \
  disabled=no comment="House 2 relay with Option 82"

Центральный DHCP-сервер (отдельный MikroTik или Linux):

На MikroTik DHCP-сервере можно использовать static lease с привязкой к Circuit ID:

[admin@MikroTik] >
# Пулы адресов
/ip/pool/add name=pool-house1 ranges=10.101.0.10-10.101.0.254
/ip/pool/add name=pool-house2 ranges=10.102.0.10-10.102.0.254

# DHCP-серверы
/ip/dhcp-server/add name=dhcp-house1 interface=ether1 address-pool=pool-house1 \
  relay=10.101.0.1 disabled=no

/ip/dhcp-server/add name=dhcp-house2 interface=ether1 address-pool=pool-house2 \
  relay=10.102.0.1 disabled=no

# Сети
/ip/dhcp-server/network/add address=10.101.0.0/24 gateway=10.101.0.1 \
  dns-server=8.8.8.8,8.8.4.4
/ip/dhcp-server/network/add address=10.102.0.0/24 gateway=10.102.0.1 \
  dns-server=8.8.8.8,8.8.4.4

# Статические привязки по Circuit ID (Option 82)
# Формат Circuit ID зависит от версии RouterOS и оборудования
# Пример: привязка порта ether1 коммутатора house1 к конкретному IP
/ip/dhcp-server/lease/add address=10.101.0.100 \
  dhcp-option-set="" \
  comment="House 1, port 1 — subscriber Ivanov"

Сценарий 4: DHCP Relay на нескольких интерфейсах (массовое создание)

Для ISP с десятками VLAN удобно создавать relay через скрипт:

[admin@MikroTik] >
# Скрипт создания DHCP Relay для VLAN 101-150
:for i from=101 to=150 do={
  /interface/vlan/add name="vlan$i" vlan-id=$i interface=sfp-sfpplus2
  /ip/address/add address="10.$i.0.1/24" interface="vlan$i"
  /ip/dhcp-relay/add name="relay-vlan$i" interface="vlan$i" \
    dhcp-server=172.16.0.10 local-address="10.$i.0.1" \
    add-relay-info=yes disabled=no
}

Настройка Circuit ID и Remote ID

RouterOS позволяет настроить формат Circuit ID:

[admin@MikroTik] >
# Просмотр текущих настроек relay
/ip/dhcp-relay/print detail

# По умолчанию Circuit ID содержит:
# - Interface name (имя интерфейса, где получен запрос)
# - VLAN ID (если запрос пришёл из VLAN)

На стороне DHCP-сервера (ISC DHCP на Linux) Option 82 обрабатывается так:

[admin@MikroTik] >
# /etc/dhcp/dhcpd.conf
# Логирование Option 82
if exists agent.circuit-id {
    log(info, concat("Option 82 Circuit-ID: ",
        binary-to-ascii(16, 8, ":", option agent.circuit-id)));
}

if exists agent.remote-id {
    log(info, concat("Option 82 Remote-ID: ",
        binary-to-ascii(16, 8, ":", option agent.remote-id)));
}

# Класс для привязки по Circuit ID
class "house1-port1" {
    match if option agent.circuit-id = "vlan101-ether1";
}

pool {
    allow members of "house1-port1";
    range 10.101.0.100 10.101.0.100;
}

Настройка DHCP Snooping на коммутаторах доступа

DHCP Snooping защищает от поддельных DHCP-серверов в абонентской сети:

[admin@MikroTik] >
# На коммутаторе доступа (CRS/CSS):

# Включаем DHCP Snooping
/interface/bridge/set bridge dhcp-snooping=yes

# Trusted port — uplink (к BRAS/relay)
/interface/bridge/port/set [find interface=sfp-sfpplus1] trusted=yes

# Абонентские порты — untrusted (по умолчанию)
# DHCP-ответы от абонентских портов будут заблокированы

Проверка

Проверка DHCP Relay

[admin@MikroTik] >
# Статус relay
/ip/dhcp-relay/print

# Подробная информация
/ip/dhcp-relay/print detail

# Статистика (сколько запросов переслано)
/ip/dhcp-relay/print stats

Ожидаемый вывод:

code
Flags: X - disabled
 #   NAME            INTERFACE      DHCP-SERVER    LOCAL-ADDRESS  ADD-RELAY-INFO
 0   relay-vlan100   vlan100        172.16.0.10    192.168.100.1  yes
 1   relay-vlan200   vlan200        172.16.0.10    192.168.200.1  yes

Проверка на DHCP-сервере

[admin@MikroTik] >
# Просмотр lease (выданных адресов)
/ip/dhcp-server/lease/print

# Подробный вывод с Option 82
/ip/dhcp-server/lease/print detail

# Фильтр по подсети
/ip/dhcp-server/lease/print where address~"10.101"

В поле agent-circuit-id и agent-remote-id отображается информация Option 82.

Проверка связности

[admin@MikroTik] >
# Ping от клиента до gateway
/ping address=192.168.100.1

# Ping от BRAS до DHCP-сервера
/ping address=172.16.0.10

# Проверка маршрута от DHCP-сервера обратно
/tool/traceroute address=192.168.100.10

Проверка через Packet Sniffer

Если relay не работает, поможет захват пакетов:

[admin@MikroTik] >
# Захват DHCP-пакетов на интерфейсе relay
/tool/sniffer/set filter-port=67-68 filter-interface=vlan100 \
  file-name=dhcp-capture memory-limit=1000KiB

/tool/sniffer/start
# ... подождать, пока клиент запросит IP ...
/tool/sniffer/stop

# Просмотр захваченных пакетов
/tool/sniffer/packet/print detail

Проверка DHCP Snooping

[admin@MikroTik] >
# Таблица DHCP Snooping
/interface/bridge/host/print where dhcp-snooping=yes

# Логи DHCP Snooping
/log/print where topics~"dhcp"

Типичные ошибки

Ошибка 1: Relay не пересылает запросы — нет IP на интерфейсе

Симптомы: клиенты не получают IP-адреса, relay не пересылает DHCP Discover.

Причина: на VLAN-интерфейсе, где настроен relay, не назначен IP-адрес. DHCP Relay не может подставить giaddr, если у интерфейса нет IP.

Решение: обязательно назначьте IP-адрес на каждом интерфейсе, где работает relay:

[admin@MikroTik] >
# Проверяем наличие IP
/ip/address/print where interface=vlan100

# Если нет — добавляем
/ip/address/add address=192.168.100.1/24 interface=vlan100

Ошибка 2: local-address не совпадает с IP интерфейса

Симптомы: relay пересылает запрос, но DHCP-сервер отвечает не на тот адрес, клиент не получает ответ.

Причина: параметр local-address в настройках relay должен совпадать с IP-адресом маршрутизатора на этом VLAN-интерфейсе.

[admin@MikroTik] >
# Проверяем
/ip/dhcp-relay/print detail
/ip/address/print where interface=vlan100

# local-address и address на интерфейсе должны совпадать

Ошибка 3: DHCP-сервер не знает подсеть relay

Симптомы: relay пересылает запрос, DHCP-сервер получает его, но не может определить подсеть клиента.

Причина: на DHCP-сервере не настроена network/pool для подсети, из которой приходит relay (giaddr). Сервер не знает, из какого пула выдать IP.

Решение: на DHCP-сервере должны быть настроены pool и network для каждой подсети, обслуживаемой relay:

[admin@MikroTik] >
# На DHCP-сервере
/ip/dhcp-server/network/add address=192.168.100.0/24 gateway=192.168.100.1
/ip/pool/add name=pool-vlan100 ranges=192.168.100.10-192.168.100.254

Ошибка 4: Option 82 не добавляется

Симптомы: в lease на DHCP-сервере нет информации agent-circuit-id / agent-remote-id.

Причина: забыли включить add-relay-info=yes в настройках relay.

[admin@MikroTik] >
# Проверяем
/ip/dhcp-relay/print detail where name=relay-vlan100

# Включаем Option 82
/ip/dhcp-relay/set relay-vlan100 add-relay-info=yes

Ошибка 5: Firewall блокирует DHCP-пакеты

Симптомы: relay настроен правильно, IP есть, но запросы не доходят до DHCP-сервера.

Причина: правила firewall блокируют UDP-порты 67/68 или трафик между relay и DHCP-сервером.

Решение:

[admin@MikroTik] >
# Разрешаем DHCP-трафик
/ip/firewall/filter/add chain=forward protocol=udp dst-port=67,68 action=accept \
  comment="Allow DHCP relay traffic" place-before=0

# Разрешаем трафик между relay и DHCP-сервером
/ip/firewall/filter/add chain=input protocol=udp dst-port=67 action=accept \
  comment="Allow DHCP to router" place-before=0

Ошибка 6: giaddr = 0.0.0.0

Симптомы: DHCP-сервер получает relay-запросы с giaddr=0.0.0.0, не может определить подсеть.

Причина: relay настроен на bridge-интерфейсе, у которого нет IP-адреса, или IP назначен на неправильном интерфейсе.

Решение: relay должен быть настроен на VLAN-интерфейсе (а не на bridge), и у этого VLAN-интерфейса должен быть IP-адрес. local-address должен быть указан явно.

Ошибка 7: Дублирование — и DHCP Server, и DHCP Relay на одном интерфейсе

Симптомы: непредсказуемое поведение, клиенты получают адреса то от локального сервера, то от удалённого.

Причина: на одном интерфейсе нельзя одновременно включить DHCP Server и DHCP Relay. Это конфликтующие функции.

Решение: используйте либо Server, либо Relay на каждом конкретном интерфейсе. Не оба.

[admin@MikroTik] >
# Проверяем наличие конфликта
/ip/dhcp-server/print where interface=vlan100
/ip/dhcp-relay/print where interface=vlan100
# Должен быть только один из двух

Итоги

DHCP Relay + Option 82 — стандартное решение для централизованного управления IP-адресами в сетях с множеством VLAN. Ключевые правила:

  1. На каждом интерфейсе relay обязателен IP-адрес (он становится giaddr)
  2. local-address должен совпадать с IP интерфейса
  3. add-relay-info=yes включает Option 82
  4. На DHCP-сервере должны быть network/pool для каждой подсети relay
  5. Не используйте DHCP Server и DHCP Relay на одном интерфейсе
  6. Включите DHCP Snooping на коммутаторах доступа для защиты
  7. Для ISP с 10+ VLAN — DHCP Relay однозначно лучше, чем Server per VLAN
[admin@MikroTik] >
Абонент (VLAN 100)                    Абонент (VLAN 200)
       |                                     |
   [DHCP Discover broadcast]            [DHCP Discover broadcast]
       |                                     |
  [MikroTik: DHCP Relay]              [MikroTik: DHCP Relay]
       |                                     |
       +---------> [DHCP Server] <-----------+
                   (unicast)
                 Один сервер для всех VLAN
[DHCP Server: 172.16.0.10]
        |
   [MikroTik Router]
    /        \
[VLAN 100]  [VLAN 200]
192.168.100.0/24  192.168.200.0/24
# --- VLAN-интерфейсы ---
/interface/vlan/add name=vlan100 vlan-id=100 interface=bridge
/interface/vlan/add name=vlan200 vlan-id=200 interface=bridge

# --- IP-адреса (будут использоваться как giaddr) ---
/ip/address/add address=192.168.100.1/24 interface=vlan100 comment="VLAN 100 gateway"
/ip/address/add address=192.168.200.1/24 interface=vlan200 comment="VLAN 200 gateway"

# --- DHCP Relay ---
/ip/dhcp-relay/add name=relay-vlan100 interface=vlan100 \
  dhcp-server=172.16.0.10 local-address=192.168.100.1 \
  disabled=no comment="Relay for VLAN 100"

/ip/dhcp-relay/add name=relay-vlan200 interface=vlan200 \
  dhcp-server=172.16.0.10 local-address=192.168.200.1 \
  disabled=no comment="Relay for VLAN 200"
# Если DHCP-сервер тоже MikroTik:

# Пулы для каждой подсети
/ip/pool/add name=pool-vlan100 ranges=192.168.100.10-192.168.100.254
/ip/pool/add name=pool-vlan200 ranges=192.168.200.10-192.168.200.254

# DHCP-сервер на интерфейсе, куда приходит relay
/ip/dhcp-server/add name=dhcp-central interface=ether1 address-pool=pool-vlan100 \
  relay=192.168.100.1 disabled=no comment="Central DHCP for VLAN 100"

/ip/dhcp-server/add name=dhcp-central-200 interface=ether1 address-pool=pool-vlan200 \
  relay=192.168.200.1 disabled=no comment="Central DHCP for VLAN 200"

# Сети (network) для каждого пула
/ip/dhcp-server/network/add address=192.168.100.0/24 gateway=192.168.100.1 \
  dns-server=8.8.8.8,8.8.4.4
/ip/dhcp-server/network/add address=192.168.200.0/24 gateway=192.168.200.1 \
  dns-server=8.8.8.8,8.8.4.4
# --- DHCP Relay с Option 82 ---
/ip/dhcp-relay/add name=relay-vlan100 interface=vlan100 \
  dhcp-server=172.16.0.10 local-address=192.168.100.1 \
  add-relay-info=yes \
  disabled=no comment="Relay VLAN 100 with Option 82"

/ip/dhcp-relay/add name=relay-vlan200 interface=vlan200 \
  dhcp-server=172.16.0.10 local-address=192.168.200.1 \
  add-relay-info=yes \
  disabled=no comment="Relay VLAN 200 with Option 82"
[DHCP Server + Billing]
        |
   [CCR2004 — BRAS/Router]
        |
   [CRS326 — Aggregation]
    /        \
[CSS326 #1]  [CSS326 #2]    — Access switches
 VLAN 101     VLAN 102
   |            |
Абоненты    Абоненты
# CSS326 — коммутатор доступа, дом 1
/system/identity/set name="ACC-HOUSE-01"

/interface/bridge/add name=bridge vlan-filtering=yes

# Uplink (trunk)
/interface/bridge/port/add bridge=bridge interface=sfp-sfpplus1 \
  pvid=1 frame-types=admit-only-vlan-tagged

# Абонентские порты (access VLAN 101)
/interface/bridge/port/add bridge=bridge interface=ether1 pvid=101
/interface/bridge/port/add bridge=bridge interface=ether2 pvid=101
/interface/bridge/port/add bridge=bridge interface=ether3 pvid=101

# VLAN table
/interface/bridge/vlan/add bridge=bridge vlan-ids=101 \
  tagged=sfp-sfpplus1 \
  untagged=ether1,ether2,ether3
# ============================================
# ISP DHCP Relay с Option 82
# ============================================

# --- VLAN-интерфейсы ---
/interface/vlan/add name=vlan101-house1 vlan-id=101 interface=sfp-sfpplus2
/interface/vlan/add name=vlan102-house2 vlan-id=102 interface=sfp-sfpplus2

# --- IP-адреса (giaddr) ---
/ip/address/add address=10.101.0.1/24 interface=vlan101-house1
/ip/address/add address=10.102.0.1/24 interface=vlan102-house2

# --- DHCP Relay с Option 82 ---
/ip/dhcp-relay/add name=relay-house1 interface=vlan101-house1 \
  dhcp-server=172.16.0.10 local-address=10.101.0.1 \
  add-relay-info=yes \
  disabled=no comment="House 1 relay with Option 82"

/ip/dhcp-relay/add name=relay-house2 interface=vlan102-house2 \
  dhcp-server=172.16.0.10 local-address=10.102.0.1 \
  add-relay-info=yes \
  disabled=no comment="House 2 relay with Option 82"
# Пулы адресов
/ip/pool/add name=pool-house1 ranges=10.101.0.10-10.101.0.254
/ip/pool/add name=pool-house2 ranges=10.102.0.10-10.102.0.254

# DHCP-серверы
/ip/dhcp-server/add name=dhcp-house1 interface=ether1 address-pool=pool-house1 \
  relay=10.101.0.1 disabled=no

/ip/dhcp-server/add name=dhcp-house2 interface=ether1 address-pool=pool-house2 \
  relay=10.102.0.1 disabled=no

# Сети
/ip/dhcp-server/network/add address=10.101.0.0/24 gateway=10.101.0.1 \
  dns-server=8.8.8.8,8.8.4.4
/ip/dhcp-server/network/add address=10.102.0.0/24 gateway=10.102.0.1 \
  dns-server=8.8.8.8,8.8.4.4

# Статические привязки по Circuit ID (Option 82)
# Формат Circuit ID зависит от версии RouterOS и оборудования
# Пример: привязка порта ether1 коммутатора house1 к конкретному IP
/ip/dhcp-server/lease/add address=10.101.0.100 \
  dhcp-option-set="" \
  comment="House 1, port 1 — subscriber Ivanov"
# Скрипт создания DHCP Relay для VLAN 101-150
:for i from=101 to=150 do={
  /interface/vlan/add name="vlan$i" vlan-id=$i interface=sfp-sfpplus2
  /ip/address/add address="10.$i.0.1/24" interface="vlan$i"
  /ip/dhcp-relay/add name="relay-vlan$i" interface="vlan$i" \
    dhcp-server=172.16.0.10 local-address="10.$i.0.1" \
    add-relay-info=yes disabled=no
}
# Просмотр текущих настроек relay
/ip/dhcp-relay/print detail

# По умолчанию Circuit ID содержит:
# - Interface name (имя интерфейса, где получен запрос)
# - VLAN ID (если запрос пришёл из VLAN)
# /etc/dhcp/dhcpd.conf
# Логирование Option 82
if exists agent.circuit-id {
    log(info, concat("Option 82 Circuit-ID: ",
        binary-to-ascii(16, 8, ":", option agent.circuit-id)));
}

if exists agent.remote-id {
    log(info, concat("Option 82 Remote-ID: ",
        binary-to-ascii(16, 8, ":", option agent.remote-id)));
}

# Класс для привязки по Circuit ID
class "house1-port1" {
    match if option agent.circuit-id = "vlan101-ether1";
}

pool {
    allow members of "house1-port1";
    range 10.101.0.100 10.101.0.100;
}
# На коммутаторе доступа (CRS/CSS):

# Включаем DHCP Snooping
/interface/bridge/set bridge dhcp-snooping=yes

# Trusted port — uplink (к BRAS/relay)
/interface/bridge/port/set [find interface=sfp-sfpplus1] trusted=yes

# Абонентские порты — untrusted (по умолчанию)
# DHCP-ответы от абонентских портов будут заблокированы
# Статус relay
/ip/dhcp-relay/print

# Подробная информация
/ip/dhcp-relay/print detail

# Статистика (сколько запросов переслано)
/ip/dhcp-relay/print stats
Flags: X - disabled
 #   NAME            INTERFACE      DHCP-SERVER    LOCAL-ADDRESS  ADD-RELAY-INFO
 0   relay-vlan100   vlan100        172.16.0.10    192.168.100.1  yes
 1   relay-vlan200   vlan200        172.16.0.10    192.168.200.1  yes
# Просмотр lease (выданных адресов)
/ip/dhcp-server/lease/print

# Подробный вывод с Option 82
/ip/dhcp-server/lease/print detail

# Фильтр по подсети
/ip/dhcp-server/lease/print where address~"10.101"
# Ping от клиента до gateway
/ping address=192.168.100.1

# Ping от BRAS до DHCP-сервера
/ping address=172.16.0.10

# Проверка маршрута от DHCP-сервера обратно
/tool/traceroute address=192.168.100.10
# Захват DHCP-пакетов на интерфейсе relay
/tool/sniffer/set filter-port=67-68 filter-interface=vlan100 \
  file-name=dhcp-capture memory-limit=1000KiB

/tool/sniffer/start
# ... подождать, пока клиент запросит IP ...
/tool/sniffer/stop

# Просмотр захваченных пакетов
/tool/sniffer/packet/print detail
# Таблица DHCP Snooping
/interface/bridge/host/print where dhcp-snooping=yes

# Логи DHCP Snooping
/log/print where topics~"dhcp"
# Проверяем наличие IP
/ip/address/print where interface=vlan100

# Если нет — добавляем
/ip/address/add address=192.168.100.1/24 interface=vlan100
# Проверяем
/ip/dhcp-relay/print detail
/ip/address/print where interface=vlan100

# local-address и address на интерфейсе должны совпадать
# На DHCP-сервере
/ip/dhcp-server/network/add address=192.168.100.0/24 gateway=192.168.100.1
/ip/pool/add name=pool-vlan100 ranges=192.168.100.10-192.168.100.254
# Проверяем
/ip/dhcp-relay/print detail where name=relay-vlan100

# Включаем Option 82
/ip/dhcp-relay/set relay-vlan100 add-relay-info=yes
# Разрешаем DHCP-трафик
/ip/firewall/filter/add chain=forward protocol=udp dst-port=67,68 action=accept \
  comment="Allow DHCP relay traffic" place-before=0

# Разрешаем трафик между relay и DHCP-сервером
/ip/firewall/filter/add chain=input protocol=udp dst-port=67 action=accept \
  comment="Allow DHCP to router" place-before=0
# Проверяем наличие конфликта
/ip/dhcp-server/print where interface=vlan100
/ip/dhcp-relay/print where interface=vlan100
# Должен быть только один из двух
Для провайдеров / DHCP Relay и Option 82 на MikroTik