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

MACsec на MikroTik — шифрование на уровне L2

RouterOS 7.xIP10 мин30 мар. 2026 г.
TelegramVK

MACsec (Media Access Control Security, стандарт IEEE 802.1AE) — технология шифрования Ethernet-кадров на канальном уровне (L2). В отличие от IPsec, который работает на L3 и шифрует IP-пакеты, MACsec шифрует весь Ethernet-фрейм целиком, включая заголовки вышестоящих протоколов. Это обеспечивает полную конфиденциальность данных на физическом линке между двумя устройствами.

RouterOS 7 добавил поддержку MACsec, что позволяет шифровать trunk-соединения между маршрутизаторами, коммутаторами и серверами без дополнительного оборудования. В данной статье рассмотрим принцип работы MACsec, настройку между двумя MikroTik, сравнение с IPsec и практические сценарии применения.

Описание

Что такое MACsec

MACsec (802.1AE) обеспечивает три функции безопасности на уровне Ethernet:

  1. Конфиденциальность (Confidentiality) — шифрование полезной нагрузки Ethernet-фрейма алгоритмом AES-GCM-128 или AES-GCM-256
  2. Целостность (Integrity) — проверка что фрейм не был изменён при передаче (ICV — Integrity Check Value)
  3. Аутентификация источника (Origin Authentication) — гарантия что фрейм отправлен авторизованным устройством

MACsec работает на принципе hop-by-hop: каждый линк между двумя устройствами шифруется независимо. Это означает, что на промежуточном коммутаторе фрейм расшифровывается, обрабатывается и заново зашифровывается для следующего линка.

Структура MACsec-фрейма

Обычный Ethernet-фрейм:

code
[Dst MAC | Src MAC | EtherType | Payload | FCS]

MACsec-фрейм:

code
[Dst MAC | Src MAC | MACsec EtherType (0x88E5) | SecTAG | Encrypted Payload | ICV | FCS]

SecTAG (Security Tag) содержит:

  • Номер ассоциации безопасности (AN — Association Number)
  • Номер пакета (PN — Packet Number) для защиты от replay-атак
  • Идентификатор канала (SCI — Secure Channel Identifier)

ICV (Integrity Check Value) — 8 или 16 байт аутентификационного тега GCM.

Общий overhead MACsec составляет 32 байта (8 SecTAG + 16 ICV + 8 дополнительных). Это означает, что максимальный MTU полезной нагрузки уменьшается с 1500 до 1468 байт (или нужно увеличить MTU интерфейса до 1532).

MACsec vs IPsec

ПараметрMACsec (802.1AE)IPsec (ESP)
Уровень OSIL2 (Ethernet)L3 (IP)
ШифруетВесь Ethernet payloadIP-пакет
ОбластьHop-by-hop (point-to-point)End-to-end (через интернет)
Overhead32 байта50-80 байт (ESP+IV+padding)
ПроизводительностьВыше (аппаратное ускорение)Ниже (часто программное)
ПрименениеLAN, trunk, datacenterVPN через WAN/интернет
МаршрутизацияПрозрачна (L2)Требует туннель
MTU impact-32 байта-50-80 байт

Ключевое различие: MACsec защищает конкретный физический линк, а IPsec — логическое соединение между IP-адресами. MACsec не может работать через интернет или маршрутизируемые сети — только между напрямую соединёнными устройствами (или через L2-коммутаторы с поддержкой MACsec).

MKA — MACsec Key Agreement

MKA (IEEE 802.1X-2010) — протокол согласования ключей для MACsec. MKA отвечает за:

  • Обнаружение MACsec-peer на линке
  • Аутентификацию участников
  • Генерацию и распределение ключей шифрования (SAK — Secure Association Key)
  • Периодическую ротацию ключей

В RouterOS MKA использует предварительно настроенный ключ (Pre-Shared Key, PSK) — так называемый CAK (Connectivity Association Key). Оба устройства на концах линка должны иметь одинаковый CAK и CKN (Connectivity Association Key Name).

Поддержка в RouterOS 7

MACsec поддерживается начиная с RouterOS 7.11. Поддерживаемые модели:

  • CCR2004-1G-12S+2XS — все SFP+ и XS порты
  • CCR2116-12G-4S+ — все порты
  • CCR2216-1G-12XS-2XQ — все XS и XQ порты
  • CRS3xx/CRS5xx серии — зависит от switch-chip
  • RB5009UG+S+IN — SFP+ порт (с ограничениями)

Важно: MACsec требует аппаратной поддержки на уровне PHY или switch-chip. Не все модели MikroTik поддерживают MACsec. Проверьте документацию для вашей конкретной модели.

Шифрование: AES-GCM-128 (по умолчанию), AES-GCM-256 (если поддерживается аппаратно).

Настройка

Топология

Рассмотрим простейший сценарий: шифрование линка между двумя MikroTik-маршрутизаторами.

code
Router-A (ether1) ←— MACsec encrypted link —→ (ether1) Router-B
192.168.100.1/30                                192.168.100.2/30

Шаг 1: Создание MACsec-профиля

Профиль определяет параметры шифрования и ключи. Настройка выполняется на обоих маршрутизаторах.

Router-A:

[admin@MikroTik] >
/interface/macsec/profile
add name=macsec-trunk \
    cipher-suite=gcm-aes-128 \
    cak="0123456789abcdef0123456789abcdef" \
    ckn="AB01" \
    comment="MACsec trunk to Router-B"

Router-B:

[admin@MikroTik] >
/interface/macsec/profile
add name=macsec-trunk \
    cipher-suite=gcm-aes-128 \
    cak="0123456789abcdef0123456789abcdef" \
    ckn="AB01" \
    comment="MACsec trunk to Router-A"

Параметры:

  • cipher-suite — алгоритм шифрования (gcm-aes-128 или gcm-aes-256)
  • cak — Pre-Shared Key (hex-строка, 32 символа для AES-128, 64 для AES-256)
  • ckn — идентификатор ключа (hex-строка, 2–64 символа). Должен совпадать на обоих концах

Критически важно: CAK и CKN должны быть абсолютно идентичны на обоих устройствах. Даже одно отличие в символе приведёт к невозможности установить MACsec-сессию.

Шаг 2: Создание MACsec-интерфейса

MACsec-интерфейс создаётся поверх физического Ethernet-интерфейса.

Router-A:

[admin@MikroTik] >
/interface/macsec
add name=macsec1 \
    interface=ether1 \
    profile=macsec-trunk \
    comment="MACsec to Router-B"

Router-B:

[admin@MikroTik] >
/interface/macsec
add name=macsec1 \
    interface=ether1 \
    profile=macsec-trunk \
    comment="MACsec to Router-A"

После создания интерфейса MKA начнёт согласование на физическом линке. Если CAK/CKN совпадают и линк активен, MACsec-сессия установится автоматически.

Шаг 3: Назначение IP-адресов

IP-адреса назначаются на MACsec-интерфейс (не на физический!):

Router-A:

[admin@MikroTik] >
/ip/address
add address=192.168.100.1/30 interface=macsec1 comment="MACsec link"

Router-B:

[admin@MikroTik] >
/ip/address
add address=192.168.100.2/30 interface=macsec1 comment="MACsec link"

Шаг 4: Настройка MTU

MACsec добавляет 32 байта overhead. Если физический интерфейс имеет MTU 1500, то эффективный MTU MACsec-интерфейса будет 1468. Есть два подхода:

Подход 1: Уменьшить MTU на MACsec-интерфейсе:

[admin@MikroTik] >
/interface/macsec/set macsec1 mtu=1468

Подход 2: Увеличить MTU на физическом интерфейсе (если поддерживается):

[admin@MikroTik] >
/interface/ethernet/set ether1 mtu=1532
/interface/macsec/set macsec1 mtu=1500

Второй подход предпочтительнее, так как сохраняет стандартный MTU 1500 для вышестоящих протоколов и избавляет от проблем с фрагментацией.

Полная конфигурация: MACsec trunk с VLAN

Реальный сценарий: шифрованный trunk между двумя коммутаторами с передачей нескольких VLAN.

Router-A (core switch):

[admin@MikroTik] >
# MACsec профиль
/interface/macsec/profile
add name=dc-trunk cipher-suite=gcm-aes-128 \
    cak="a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6" ckn="DC01"

# MACsec интерфейс на физическом порту
/interface/macsec
add name=macsec-trunk interface=sfp-sfpplus1 profile=dc-trunk

# Увеличиваем MTU физического порта
/interface/ethernet/set sfp-sfpplus1 mtu=1532

# VLAN поверх MACsec
/interface/vlan
add name=vlan100-mgmt interface=macsec-trunk vlan-id=100
add name=vlan200-servers interface=macsec-trunk vlan-id=200
add name=vlan300-storage interface=macsec-trunk vlan-id=300

# IP на management VLAN
/ip/address
add address=10.0.100.1/24 interface=vlan100-mgmt

Router-B (access switch):

[admin@MikroTik] >
/interface/macsec/profile
add name=dc-trunk cipher-suite=gcm-aes-128 \
    cak="a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6" ckn="DC01"

/interface/macsec
add name=macsec-trunk interface=sfp-sfpplus1 profile=dc-trunk

/interface/ethernet/set sfp-sfpplus1 mtu=1532

/interface/vlan
add name=vlan100-mgmt interface=macsec-trunk vlan-id=100
add name=vlan200-servers interface=macsec-trunk vlan-id=200
add name=vlan300-storage interface=macsec-trunk vlan-id=300

/ip/address
add address=10.0.100.2/24 interface=vlan100-mgmt

MACsec + Bridge

Если MACsec-интерфейс нужно добавить в bridge (для L2-коммутации):

[admin@MikroTik] >
/interface/bridge/port
add bridge=bridge1 interface=macsec1

При этом физический интерфейс ether1 не должен быть в bridge — только MACsec-интерфейс.

Проверка

Статус MACsec-интерфейса

[admin@MikroTik] >
/interface/macsec/print detail

Ключевые поля:

  • running — yes означает успешную MKA-сессию
  • status — secured (шифрование активно)
  • cipher-suite — используемый алгоритм
  • key-server — какое устройство выступает key-server

Мониторинг MKA

[admin@MikroTik] >
/interface/macsec/monitor macsec1

Покажет:

  • Состояние MKA-сессии
  • Текущий SAK (ключ шифрования)
  • Время работы сессии
  • Счётчики зашифрованных/расшифрованных фреймов

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

[admin@MikroTik] >
# Ping через MACsec-интерфейс
/ping 192.168.100.2 interface=macsec1 count=5

# Проверка скорости
/tool/bandwidth-test address=192.168.100.2 protocol=tcp duration=10s

Проверка шифрования

Чтобы убедиться, что трафик действительно шифруется, можно использовать packet sniffer на физическом интерфейсе:

[admin@MikroTik] >
/tool/sniffer
set interface=ether1 filter-protocol=ip
/tool/sniffer/start

В захваченных пакетах вы должны видеть EtherType 0x88E5 (MACsec) вместо 0x0800 (IPv4). Полезная нагрузка должна быть нечитаемой (зашифрованной).

Счётчики интерфейса

[admin@MikroTik] >
/interface/print stats where name=macsec1

Сравните счётчики физического интерфейса и MACsec — они должны быть примерно одинаковыми (с учётом overhead).

Производительность

Аппаратное ускорение

MACsec-шифрование на поддерживаемых моделях выполняется аппаратно (в чипе PHY или switch-chip), что означает:

  • Нулевая нагрузка на CPU при шифровании/расшифровке
  • Line-rate производительность — шифрование не снижает пропускную способность
  • Минимальная задержка — менее 1 мкс дополнительной латентности

На моделях без аппаратной поддержки MACsec выполняется программно, что значительно снижает производительность (до 1-2 Гбит/с в зависимости от CPU).

Сравнение производительности MACsec vs IPsec

Тест на CCR2116-12G-4S+ (ARM64, 16 ядер):

ПараметрMACsec (HW)IPsec AES-128 (HW)IPsec AES-256 (SW)
Throughput10 Gbps (line-rate)8 Gbps2.5 Gbps
CPU Load0%15%85%
Latency< 1 μs50 μs200 μs
Overhead32 байта52 байта56 байт

MACsec с аппаратным ускорением — самый эффективный способ шифрования трафика на MikroTik.

Сценарии применения

Сценарий 1: Шифрование trunk между зданиями

Если два здания соединены оптическим кабелем через неконтролируемую территорию (улица, колодцы), MACsec защищает от перехвата данных при физическом подключении к оптике.

Сценарий 2: Защита datacenter interconnect

В датацентрах MACsec используется для шифрования трафика между стойками, особенно если кабели проходят через общие кабель-каналы с другими арендаторами.

Сценарий 3: Compliance (PCI DSS, HIPAA)

Стандарты безопасности требуют шифрования данных «в движении» (data in transit). MACsec обеспечивает это на L2 без изменения сетевой архитектуры.

MACsec + 802.1X

В enterprise-сетях MACsec часто используется совместно с 802.1X для динамической аутентификации и распределения ключей:

  1. Клиент подключается к порту коммутатора
  2. 802.1X аутентифицирует клиента через RADIUS
  3. RADIUS возвращает CAK/CKN для MACsec
  4. MKA устанавливает MACsec-сессию с динамическими ключами

В RouterOS 7 эта интеграция поддерживается через RADIUS-атрибуты. Однако настройка достаточно сложна и требует RADIUS-сервера с поддержкой MACsec-атрибутов (FreeRADIUS 3.x+).

[admin@MikroTik] >
# Базовая настройка 802.1X на порту (без детализации RADIUS)
/interface/dot1x/server
add interface=ether2 auth-types=eap-tls \
    radius-mac-auth-server=radius1 \
    macsec-profile=auto \
    comment="802.1X + MACsec on access port"

Ограничения MACsec

  1. Point-to-point only — MACsec работает только между двумя устройствами на одном физическом линке. Нельзя шифровать multipoint (shared media) без поддержки всех участников.

  2. Hop-by-hop — на каждом промежуточном коммутаторе трафик расшифровывается и заново зашифровывается. Если промежуточный коммутатор скомпрометирован, данные доступны в открытом виде.

  3. Только Ethernet — MACsec не работает поверх Wi-Fi, PPP, туннелей. Только проводной Ethernet.

  4. Аппаратная зависимость — без аппаратного ускорения производительность MACsec существенно снижается.

  5. MTU уменьшается — 32 байта overhead требуют либо увеличения MTU на физическом уровне, либо уменьшения MTU для IP-трафика.

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

Ошибка 1: Несовпадение CAK или CKN

Самая частая проблема — ключи или идентификаторы не совпадают на двух концах.

Симптом: MACsec-интерфейс в состоянии not running, MKA-сессия не устанавливается.

Диагностика:

[admin@MikroTik] >
/interface/macsec/monitor macsec1

Если видите status: searching for peer длительное время — проблема в ключах.

Решение: тщательно проверьте CAK и CKN на обоих устройствах. Скопируйте значения, а не набирайте вручную.

[admin@MikroTik] >
# Проверка профиля
/interface/macsec/profile/print detail where name=macsec-trunk

Ошибка 2: Физический интерфейс в bridge

[admin@MikroTik] >
# НЕПРАВИЛЬНО — физический порт в bridge при активном MACsec
/interface/bridge/port
add bridge=bridge1 interface=ether1  # физический порт
add bridge=bridge1 interface=macsec1 # MACsec интерфейс

Если физический интерфейс и MACsec-интерфейс одновременно в bridge, возникнут петли и дублирование трафика.

Решение: в bridge добавляйте только MACsec-интерфейс:

[admin@MikroTik] >
/interface/bridge/port
remove [find where interface=ether1]
add bridge=bridge1 interface=macsec1

Ошибка 3: Не учтён MTU overhead

Симптом: ping работает (мелкие пакеты), но крупные файлы передаются с ошибками или очень медленно. TCP-соединения зависают.

Диагностика:

[admin@MikroTik] >
# Ping с большим размером пакета
/ping 192.168.100.2 size=1500 do-not-fragment

Если ping с size=1500 и do-not-fragment не проходит — проблема MTU.

Решение:

[admin@MikroTik] >
# Увеличить MTU физического интерфейса
/interface/ethernet/set ether1 mtu=1532

# Или уменьшить MTU на MACsec
/interface/macsec/set macsec1 mtu=1468

# Или настроить TCP MSS clamping
/ip/firewall/mangle
add chain=forward protocol=tcp tcp-flags=syn out-interface=macsec1 \
    action=change-mss new-mss=1428 passthrough=yes \
    comment="MSS clamp for MACsec"

Ошибка 4: Разные cipher-suite на концах

[admin@MikroTik] >
# Router-A: AES-128
/interface/macsec/profile/set macsec-trunk cipher-suite=gcm-aes-128

# Router-B: AES-256
/interface/macsec/profile/set macsec-trunk cipher-suite=gcm-aes-256

MKA не сможет согласовать параметры, если cipher-suite отличается.

Решение: установите одинаковый cipher-suite на обоих устройствах.

Ошибка 5: Неподдерживаемая модель

Попытка настроить MACsec на устройстве без аппаратной поддержки приведёт к ошибке создания интерфейса или крайне низкой производительности.

Диагностика:

[admin@MikroTik] >
/interface/macsec/add name=test interface=ether1 profile=test

Если команда возвращает ошибку — интерфейс не поддерживает MACsec.

Решение: проверьте список поддерживаемых моделей в документации MikroTik. Альтернатива — использовать IPsec или WireGuard для программного шифрования.

Заключение

MACsec — мощный инструмент для шифрования L2-трафика с минимальным overhead и максимальной производительностью при аппаратной поддержке. Ключевые моменты:

  • MACsec работает только point-to-point (hop-by-hop)
  • CAK и CKN должны совпадать на обоих концах
  • Учитывайте 32-байтовый overhead при расчёте MTU
  • Аппаратное ускорение обеспечивает line-rate шифрование
  • MACsec не заменяет IPsec/WireGuard для VPN через интернет
  • Для enterprise используйте MACsec + 802.1X для динамических ключей
[admin@MikroTik] >
[Dst MAC | Src MAC | EtherType | Payload | FCS]
[Dst MAC | Src MAC | MACsec EtherType (0x88E5) | SecTAG | Encrypted Payload | ICV | FCS]
Router-A (ether1) ←— MACsec encrypted link —→ (ether1) Router-B
192.168.100.1/30                                192.168.100.2/30
/interface/macsec/profile
add name=macsec-trunk \
    cipher-suite=gcm-aes-128 \
    cak="0123456789abcdef0123456789abcdef" \
    ckn="AB01" \
    comment="MACsec trunk to Router-B"
/interface/macsec/profile
add name=macsec-trunk \
    cipher-suite=gcm-aes-128 \
    cak="0123456789abcdef0123456789abcdef" \
    ckn="AB01" \
    comment="MACsec trunk to Router-A"
/interface/macsec
add name=macsec1 \
    interface=ether1 \
    profile=macsec-trunk \
    comment="MACsec to Router-B"
/interface/macsec
add name=macsec1 \
    interface=ether1 \
    profile=macsec-trunk \
    comment="MACsec to Router-A"
/ip/address
add address=192.168.100.1/30 interface=macsec1 comment="MACsec link"
/ip/address
add address=192.168.100.2/30 interface=macsec1 comment="MACsec link"
/interface/macsec/set macsec1 mtu=1468
/interface/ethernet/set ether1 mtu=1532
/interface/macsec/set macsec1 mtu=1500
# MACsec профиль
/interface/macsec/profile
add name=dc-trunk cipher-suite=gcm-aes-128 \
    cak="a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6" ckn="DC01"

# MACsec интерфейс на физическом порту
/interface/macsec
add name=macsec-trunk interface=sfp-sfpplus1 profile=dc-trunk

# Увеличиваем MTU физического порта
/interface/ethernet/set sfp-sfpplus1 mtu=1532

# VLAN поверх MACsec
/interface/vlan
add name=vlan100-mgmt interface=macsec-trunk vlan-id=100
add name=vlan200-servers interface=macsec-trunk vlan-id=200
add name=vlan300-storage interface=macsec-trunk vlan-id=300

# IP на management VLAN
/ip/address
add address=10.0.100.1/24 interface=vlan100-mgmt
/interface/macsec/profile
add name=dc-trunk cipher-suite=gcm-aes-128 \
    cak="a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6" ckn="DC01"

/interface/macsec
add name=macsec-trunk interface=sfp-sfpplus1 profile=dc-trunk

/interface/ethernet/set sfp-sfpplus1 mtu=1532

/interface/vlan
add name=vlan100-mgmt interface=macsec-trunk vlan-id=100
add name=vlan200-servers interface=macsec-trunk vlan-id=200
add name=vlan300-storage interface=macsec-trunk vlan-id=300

/ip/address
add address=10.0.100.2/24 interface=vlan100-mgmt
/interface/bridge/port
add bridge=bridge1 interface=macsec1
/interface/macsec/print detail
/interface/macsec/monitor macsec1
# Ping через MACsec-интерфейс
/ping 192.168.100.2 interface=macsec1 count=5

# Проверка скорости
/tool/bandwidth-test address=192.168.100.2 protocol=tcp duration=10s
/tool/sniffer
set interface=ether1 filter-protocol=ip
/tool/sniffer/start
/interface/print stats where name=macsec1
# Базовая настройка 802.1X на порту (без детализации RADIUS)
/interface/dot1x/server
add interface=ether2 auth-types=eap-tls \
    radius-mac-auth-server=radius1 \
    macsec-profile=auto \
    comment="802.1X + MACsec on access port"
/interface/macsec/monitor macsec1
# Проверка профиля
/interface/macsec/profile/print detail where name=macsec-trunk
# НЕПРАВИЛЬНО — физический порт в bridge при активном MACsec
/interface/bridge/port
add bridge=bridge1 interface=ether1  # физический порт
add bridge=bridge1 interface=macsec1 # MACsec интерфейс
/interface/bridge/port
remove [find where interface=ether1]
add bridge=bridge1 interface=macsec1
# Ping с большим размером пакета
/ping 192.168.100.2 size=1500 do-not-fragment
# Увеличить MTU физического интерфейса
/interface/ethernet/set ether1 mtu=1532

# Или уменьшить MTU на MACsec
/interface/macsec/set macsec1 mtu=1468

# Или настроить TCP MSS clamping
/ip/firewall/mangle
add chain=forward protocol=tcp tcp-flags=syn out-interface=macsec1 \
    action=change-mss new-mss=1428 passthrough=yes \
    comment="MSS clamp for MACsec"
# Router-A: AES-128
/interface/macsec/profile/set macsec-trunk cipher-suite=gcm-aes-128

# Router-B: AES-256
/interface/macsec/profile/set macsec-trunk cipher-suite=gcm-aes-256
/interface/macsec/add name=test interface=ether1 profile=test
IP / MACsec на MikroTik — шифрование на уровне L2