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

EoIP Tunnel на MikroTik — Ethernet over IP

RouterOS 7.xInterfaces7 мин130 мар. 2026 г.
TelegramVK

EoIP туннель на MikroTik — L2 через интернет

EoIP (Ethernet over IP) — проприетарный протокол MikroTik, позволяющий создать виртуальный Ethernet-линк между двумя маршрутизаторами поверх IP-сети. В отличие от VPN-протоколов, работающих на L3 (маршрутизация), EoIP передаёт полные Ethernet-фреймы, что делает удалённые сети частью одного широковещательного домена. Это незаменимо для сценариев, где необходим L2-мост между географически разнесёнными площадками: миграция виртуальных машин, единый DHCP-сервер на несколько офисов, transparent bridging.

Описание

Как работает EoIP

EoIP инкапсулирует Ethernet-фреймы в GRE-пакеты (IP protocol 47) и передаёт их через любую IP-сеть, включая интернет. Каждый туннель идентифицируется уникальным tunnel-id — числом, которое должно совпадать на обоих концах.

code
[Устройство в LAN A] → [MikroTik A] → EoIP (GRE) → Интернет → [MikroTik B] → [Устройство в LAN B]
                         bridge ←────── L2 туннель ──────→ bridge

Ключевые характеристики:

ПараметрЗначение
Уровень OSIL2 (Ethernet)
ИнкапсуляцияGRE (IP protocol 47)
ШифрованиеНет (по умолчанию). Опционально — IPsec
Overhead~42 байта (IP header 20 + GRE header 4 + EoIP header 18)
СовместимостьТолько между RouterOS-устройствами
MTUEthernet MTU минус overhead (~1458 при стандартном MTU 1500)
ПоддержкаRouterOS 6.x и 7.x

Когда использовать EoIP

Подходит для:

  • Объединение удалённых LAN в один broadcast-домен (единый DHCP, ARP, NetBIOS)
  • Transparent bridging между офисами для протоколов, не работающих через L3
  • Быстрое подключение удалённой площадки к существующей сети без изменения IP-адресации
  • Миграция серверов/VM между площадками без смены IP

Не подходит для:

  • Высоконагруженные соединения (overhead GRE + L2 broadcast)
  • Сети с большим количеством broadcast-трафика (ARP, DHCP, mDNS)
  • Сценарии, где достаточно L3-маршрутизации (WireGuard, OSPF)
  • Подключение более чем 3–4 площадок в один L2-сегмент (broadcast storm risk)

Сравнение с другими L2-туннелями

ПараметрEoIPVXLANL2TPVPLS
УровеньL2L2L2L2
СтандартПроприетарный MikroTikRFC 7348RFC 2661RFC 4761/4762
ИнкапсуляцияGREUDP (порт 4789)UDP (порт 1701)MPLS
МультивендорностьНетДаДаДа
MultipointНет (point-to-point)ДаДа (LAC/LNS)Да
Поддержка в RouterOSПолнаяС версии 7.xПолнаяПолная
Overhead~42 байта~54 байта~40 байтЗависит от MPLS

Рекомендация: если оба конца — MikroTik и нужен простой L2-мост между двумя точками, EoIP — самый лёгкий в настройке вариант. Для мультивендорных сред или multipoint-топологий предпочтительнее VXLAN (RouterOS 7) или L2TP.

Настройка

Схема: L2-мост между двумя офисами

code
Офис A                                          Офис B
LAN: 192.168.10.0/24                            LAN: 192.168.10.0/24
DHCP-сервер: 192.168.10.1                       Нет DHCP (получают от Офиса A)

[MikroTik A]                                    [MikroTik B]
  WAN IP: 203.0.113.1                             WAN IP: 198.51.100.1
  ether1 → WAN                                    ether1 → WAN
  ether2–5 → bridge-LAN                           ether2–5 → bridge-LAN
         └── EoIP tunnel (tunnel-id=100) ──────────┘

Обе LAN находятся в одной подсети 192.168.10.0/24. DHCP-сервер только в Офисе A, клиенты Офиса B получают адреса через EoIP-туннель.

Шаг 1: Создание EoIP-туннеля

На MikroTik A (Офис A):

[admin@MikroTik] >
/interface/eoip add \
  name=eoip-to-office-b \
  remote-address=198.51.100.1 \
  tunnel-id=100 \
  mtu=1458 \
  comment="L2 tunnel to Office B"

На MikroTik B (Офис B):

[admin@MikroTik] >
/interface/eoip add \
  name=eoip-to-office-a \
  remote-address=203.0.113.1 \
  tunnel-id=100 \
  mtu=1458 \
  comment="L2 tunnel to Office A"

Критически важно:

  • tunnel-id должен совпадать на обоих концах. При несовпадении туннель не поднимется.
  • remote-address указывает на WAN IP другой стороны
  • mtu=1458 — стандартный MTU 1500 минус overhead EoIP (~42 байта). Если между маршрутизаторами есть дополнительная инкапсуляция (PPPoE, VPN), MTU нужно уменьшить ещё.

Шаг 2: Добавление EoIP в Bridge

Чтобы EoIP-туннель стал частью локальной сети, его нужно добавить в Bridge:

На MikroTik A:

[admin@MikroTik] >
/interface/bridge/port add bridge=bridge-LAN interface=eoip-to-office-b

На MikroTik B:

[admin@MikroTik] >
/interface/bridge/port add bridge=bridge-LAN interface=eoip-to-office-a

После этого устройства в Офисе B смогут получать IP-адреса от DHCP-сервера в Офисе A и видеть все устройства в подсети 192.168.10.0/24.

Шаг 3: Настройка Firewall для GRE

EoIP использует GRE (IP protocol 47). Если на маршрутизаторах есть firewall, нужно разрешить GRE-трафик:

[admin@MikroTik] >
/ip/firewall/filter add \
  chain=input \
  protocol=gre \
  src-address=198.51.100.1 \
  action=accept \
  comment="Allow GRE from Office B" \
  place-before=0

Если используется connection tracker, достаточно правила для input — ответные GRE-пакеты пройдут как established/related.

Шаг 4: Добавление IPsec-шифрования

По умолчанию EoIP не шифрует трафик. Всё содержимое Ethernet-фреймов передаётся в открытом виде. Для шифрования используется IPsec:

Вариант А — встроенная опция ipsec-secret (простой способ):

[admin@MikroTik] >
# На MikroTik A
/interface/eoip set eoip-to-office-b ipsec-secret="MyStr0ngP@ssw0rd!"

# На MikroTik B
/interface/eoip set eoip-to-office-a ipsec-secret="MyStr0ngP@ssw0rd!"

При задании ipsec-secret RouterOS автоматически создаёт IPsec policy и peer для этого туннеля. Это самый простой способ, но с ограниченными настройками (используется IKEv1, AES-128).

Вариант Б — ручная настройка IPsec (рекомендуется для production):

[admin@MikroTik] >
# На MikroTik A — IPsec profile
/ip/ipsec/profile add \
  name=eoip-profile \
  hash-algorithm=sha256 \
  enc-algorithm=aes-256 \
  dh-group=modp2048 \
  lifetime=1d

# IPsec peer
/ip/ipsec/peer add \
  name=office-b \
  address=198.51.100.1/32 \
  profile=eoip-profile \
  exchange-mode=ike2

# IPsec identity (authentication)
/ip/ipsec/identity add \
  peer=office-b \
  auth-method=pre-shared-key \
  secret="MyStr0ngP@ssw0rd!"

# IPsec proposal
/ip/ipsec/proposal add \
  name=eoip-proposal \
  enc-algorithms=aes-256-cbc \
  auth-algorithms=sha256 \
  lifetime=8h

# IPsec policy — шифровать GRE-трафик между WAN-адресами
/ip/ipsec/policy add \
  src-address=203.0.113.1/32 \
  dst-address=198.51.100.1/32 \
  protocol=gre \
  action=encrypt \
  proposal=eoip-proposal \
  peer=office-b

Аналогичную конфигурацию (с зеркальными адресами) нужно создать на MikroTik B.

EoIP с динамическим IP (DDNS)

Если одна из сторон имеет динамический IP, можно использовать доменное имя вместо IP:

[admin@MikroTik] >
# Сначала настроить IP Cloud или стороний DDNS
/ip/cloud set ddns-enabled=yes

# Затем в EoIP использовать доменное имя
/interface/eoip set eoip-to-office-a remote-address=office-a.sn.mynetname.net

RouterOS будет периодически разрешать DNS-имя и обновлять remote-address.

Проверка

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

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

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

code
  name="eoip-to-office-b" mtu=1458 mac-address=FE:xx:xx:xx:xx:xx
  remote-address=198.51.100.1 tunnel-id=100 running=yes disabled=no

Флаг running=yes означает, что туннель активен. Если running=no:

  • Проверьте доступность remote-address через ping
  • Убедитесь что GRE (protocol 47) не блокируется firewall/провайдером
  • Проверьте совпадение tunnel-id на обоих концах

Проверка связности через туннель

Пинг устройства в удалённой сети:

[admin@MikroTik] >
/ping 192.168.10.100 count=5

Проверка ARP — если bridge работает корректно, ARP-таблица должна содержать MAC-адреса устройств из удалённого офиса:

[admin@MikroTik] >
/ip/arp/print where interface=bridge-LAN

Проверка MTU

Частая проблема EoIP — фрагментация из-за уменьшенного MTU. Проверьте, что пакеты максимального размера проходят:

[admin@MikroTik] >
/ping 192.168.10.100 size=1458 do-not-fragment count=5

Если пакеты не проходят — уменьшите MTU на EoIP-интерфейсе. Для PPPoE-подключений типичный MTU EoIP составляет ~1450.

Проверка IPsec (если настроен)

[admin@MikroTik] >
/ip/ipsec/installed-sa/print
/ip/ipsec/policy/print where peer=office-b

В installed-sa должны быть активные SA с ненулевыми счётчиками пакетов.

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

1. Несовпадение tunnel-id

Симптом: интерфейс EoIP создан, но running=no. Пакеты не проходят.

Причина: tunnel-id на одном конце — 100, на другом — 101 (опечатка).

Решение: привести tunnel-id к одному значению на обоих маршрутизаторах:

[admin@MikroTik] >
/interface/eoip set eoip-to-office-b tunnel-id=100

2. Broadcast storm через EoIP

Симптом: резкий рост трафика на WAN, потеря связи, высокая CPU-нагрузка на обоих маршрутизаторах.

Причина: L2-петля — EoIP в bridge, и при этом существует альтернативный L2-путь между площадками. Broadcast-пакеты бесконечно циркулируют.

Решение: включить RSTP на bridge:

[admin@MikroTik] >
/interface/bridge set bridge-LAN protocol-mode=rstp

Также рекомендуется ограничить broadcast на EoIP-порту в bridge:

[admin@MikroTik] >
/interface/bridge/port set [find interface~"eoip"] broadcast-flood=no unknown-multicast-flood=no

3. Провайдер блокирует GRE

Симптом: EoIP не поднимается, хотя ping между WAN-адресами работает.

Причина: провайдер или промежуточный NAT блокирует IP protocol 47 (GRE).

Решение: если GRE заблокирован — EoIP работать не будет. Альтернативы:

  • Использовать L2TP (UDP, проходит через NAT)
  • Использовать VXLAN поверх WireGuard (RouterOS 7)
  • Использовать EoIP поверх VPN-туннеля (WireGuard/L2TP), но это добавит ещё один уровень overhead

4. Проблемы с MTU и фрагментация

Симптом: ping работает, но крупные файлы передаются очень медленно или вообще не передаются. SSH работает, но SCP/HTTP зависают.

Причина: MTU туннеля слишком велик, пакеты фрагментируются или отбрасываются (если выставлен DF bit).

Решение: уменьшите MTU на EoIP-интерфейсе и включите MSS clamping:

[admin@MikroTik] >
/interface/eoip set eoip-to-office-b mtu=1400

# MSS clamping для TCP
/ip/firewall/mangle add \
  chain=forward \
  in-interface=eoip-to-office-b \
  protocol=tcp \
  tcp-flags=syn \
  action=change-mss \
  new-mss=clamp-to-pmtu

5. EoIP и NAT — работает только в одну сторону

Симптом: EoIP поднимается, но трафик идёт только от одной стороны.

Причина: один из маршрутизаторов находится за NAT. GRE не поддерживает NAT traversal нативно (в отличие от IKE/ESP).

Решение: EoIP через NAT не работает надёжно. Варианты:

  • Пробросить IP protocol 47 на NAT-устройстве (не все NAT это поддерживают)
  • Поднять WireGuard или L2TP/IPsec VPN между площадками, а EoIP пустить внутри VPN-туннеля
  • Использовать VXLAN (UDP-based, NAT-friendly) в RouterOS 7

6. Высокая нагрузка CPU из-за broadcast

Симптом: CPU маршрутизатора 80–100%, большая часть трафика — broadcast через EoIP.

Причина: все broadcast-пакеты из LAN одного офиса передаются через EoIP в LAN другого офиса (ARP, DHCP Discover, NetBIOS, mDNS).

Решение: ограничить broadcast через bridge filter:

[admin@MikroTik] >
/interface/bridge/filter add \
  chain=forward \
  in-interface=eoip-to-office-b \
  mac-protocol=ip \
  dst-address=FF:FF:FF:FF:FF:FF \
  action=drop \
  comment="Limit broadcast from EoIP"

Или рассмотрите переход на L3-маршрутизацию (отдельные подсети для каждого офиса + WireGuard/OSPF) — это масштабируется значительно лучше, чем L2-мост.

[admin@MikroTik] >
[Устройство в LAN A] → [MikroTik A] → EoIP (GRE) → Интернет → [MikroTik B] → [Устройство в LAN B]
                         bridge ←────── L2 туннель ──────→ bridge
Офис A                                          Офис B
LAN: 192.168.10.0/24                            LAN: 192.168.10.0/24
DHCP-сервер: 192.168.10.1                       Нет DHCP (получают от Офиса A)

[MikroTik A]                                    [MikroTik B]
  WAN IP: 203.0.113.1                             WAN IP: 198.51.100.1
  ether1 → WAN                                    ether1 → WAN
  ether2–5 → bridge-LAN                           ether2–5 → bridge-LAN
         └── EoIP tunnel (tunnel-id=100) ──────────┘
/interface/eoip add \
  name=eoip-to-office-b \
  remote-address=198.51.100.1 \
  tunnel-id=100 \
  mtu=1458 \
  comment="L2 tunnel to Office B"
/interface/eoip add \
  name=eoip-to-office-a \
  remote-address=203.0.113.1 \
  tunnel-id=100 \
  mtu=1458 \
  comment="L2 tunnel to Office A"
/interface/bridge/port add bridge=bridge-LAN interface=eoip-to-office-b
/interface/bridge/port add bridge=bridge-LAN interface=eoip-to-office-a
/ip/firewall/filter add \
  chain=input \
  protocol=gre \
  src-address=198.51.100.1 \
  action=accept \
  comment="Allow GRE from Office B" \
  place-before=0
# На MikroTik A
/interface/eoip set eoip-to-office-b ipsec-secret="MyStr0ngP@ssw0rd!"

# На MikroTik B
/interface/eoip set eoip-to-office-a ipsec-secret="MyStr0ngP@ssw0rd!"
# На MikroTik A — IPsec profile
/ip/ipsec/profile add \
  name=eoip-profile \
  hash-algorithm=sha256 \
  enc-algorithm=aes-256 \
  dh-group=modp2048 \
  lifetime=1d

# IPsec peer
/ip/ipsec/peer add \
  name=office-b \
  address=198.51.100.1/32 \
  profile=eoip-profile \
  exchange-mode=ike2

# IPsec identity (authentication)
/ip/ipsec/identity add \
  peer=office-b \
  auth-method=pre-shared-key \
  secret="MyStr0ngP@ssw0rd!"

# IPsec proposal
/ip/ipsec/proposal add \
  name=eoip-proposal \
  enc-algorithms=aes-256-cbc \
  auth-algorithms=sha256 \
  lifetime=8h

# IPsec policy — шифровать GRE-трафик между WAN-адресами
/ip/ipsec/policy add \
  src-address=203.0.113.1/32 \
  dst-address=198.51.100.1/32 \
  protocol=gre \
  action=encrypt \
  proposal=eoip-proposal \
  peer=office-b
# Сначала настроить IP Cloud или стороний DDNS
/ip/cloud set ddns-enabled=yes

# Затем в EoIP использовать доменное имя
/interface/eoip set eoip-to-office-a remote-address=office-a.sn.mynetname.net
/interface/eoip/print detail
name="eoip-to-office-b" mtu=1458 mac-address=FE:xx:xx:xx:xx:xx
  remote-address=198.51.100.1 tunnel-id=100 running=yes disabled=no
/ping 192.168.10.100 count=5
/ip/arp/print where interface=bridge-LAN
/ping 192.168.10.100 size=1458 do-not-fragment count=5
/ip/ipsec/installed-sa/print
/ip/ipsec/policy/print where peer=office-b
/interface/eoip set eoip-to-office-b tunnel-id=100
/interface/bridge set bridge-LAN protocol-mode=rstp
/interface/bridge/port set [find interface~"eoip"] broadcast-flood=no unknown-multicast-flood=no
/interface/eoip set eoip-to-office-b mtu=1400

# MSS clamping для TCP
/ip/firewall/mangle add \
  chain=forward \
  in-interface=eoip-to-office-b \
  protocol=tcp \
  tcp-flags=syn \
  action=change-mss \
  new-mss=clamp-to-pmtu
/interface/bridge/filter add \
  chain=forward \
  in-interface=eoip-to-office-b \
  mac-protocol=ip \
  dst-address=FF:FF:FF:FF:FF:FF \
  action=drop \
  comment="Limit broadcast from EoIP"
Interfaces / EoIP Tunnel на MikroTik — Ethernet over IP