Files
shx-network/gre_site_to_site_shats_malinin.md

15 KiB

Site-to-Site GRE между двумя MikroTik RouterOS 7.14+ (Shats ↔ Malinin)

Этот гайд пошагово настраивает маршрут между двумя площадками по GRE-туннелю так, чтобы клиенты за роутером Shats из сети 192.168.0.0/16 видели клиентов сети 192.168.1.0/24 за роутером Malinin.

  • Платформа: MikroTik RouterOS 7.14+
  • Туннель: GRE (с опцией — GRE поверх IPsec для шифрования)
  • Очень подробно: с командами CLI, проверками и устранением неполадок

Схема и адреса

  • Router Shats:
    • WAN (публичный): 178.49.24.65
    • LAN: 192.168.0.0/16
    • GRE IP на туннеле: 10.199.99.1/30
  • Router Malinin:
    • WAN (публичный): 80.64.170.90
    • LAN: 192.168.1.0/24
    • GRE IP на туннеле: 10.199.99.2/30

GRE-интерфейс поднимается между публичными адресами. На GRE назначаем /30 адреса из подсети 10.199.99.0/30.


Предпосылки и рекомендации

  1. Доступ в терминал RouterOS (WinBox/WebFig/SSH).
  2. На обоих маршрутизаторах уже есть рабочий доступ в интернет на WAN-интерфейсах.
  3. Если включён FastTrack — его нужно отключить или исключить межсайтовый трафик из fasttrack.
  4. Маскарадинг (srcnat/masquerade) — добавим правила обхода NAT для межсайтового трафика, чтобы не NAT’ить его.
  5. MTU/MSS — включим clamp-tcp-mss на GRE, чтобы избежать фрагментации.

Примечание: Если у вас на WAN есть строгий firewall, заранее разрешите протокол GRE (IP protocol 47) в input на адреса пиров.


0) Резервная копия (рекомендуется)

/system backup save name=pre-gre-setup

1) Создание GRE-интерфейсов

Настраиваем GRE на каждом роутере. Важно указать правильные local-address (своё публичное) и remote-address (публичный адрес удалённого роутера).

На Shats

/interface gre
add name=gre-to-malinin local-address=178.49.24.65 remote-address=80.64.170.90 clamp-tcp-mss=yes keepalive=10s,10

/ip address
add address=10.199.99.1/30 interface=gre-to-malinin comment="GRE to Malinin"

На Malinin

/interface gre
add name=gre-to-shats local-address=80.64.170.90 remote-address=178.49.24.65 clamp-tcp-mss=yes keepalive=10s,10

/ip address
add address=10.199.99.2/30 interface=gre-to-shats comment="GRE to Shats"

Пояснения:

  • clamp-tcp-mss=yes — автоматически поджимает MSS внутри GRE, снижая риск фрагментации.
  • keepalive=10s,10 — отправка keepalive каждые 10 секунд, 10 неудачных попыток → интерфейс считается down.

2) Маршрутизация между LAN-сетями

Добавляем на обоих роутерах статические маршруты в удалённые LAN через IP удалённого конца GRE.

На Shats (в сторону сети Malinin 192.168.1.0/24)

/ip route
add dst-address=192.168.1.0/24 gateway=10.199.99.2 comment="to Malinin via GRE"

На Malinin (в сторону сети Shats 192.168.0.0/16)

/ip route
add dst-address=192.168.0.0/16 gateway=10.199.99.1 comment="to Shats via GRE"

3) Обход NAT (srcnat bypass)

Если у вас есть общие правила masquerade на WAN, необходимо добавить правила «accept» перед masquerade, чтобы НЕ NAT’ить межсайтовый трафик. Это критично для корректной маршрутизации между приватными сетями.

На Shats

/ip firewall nat
add chain=srcnat src-address=192.168.0.0/16 dst-address=192.168.1.0/24 action=accept comment="bypass NAT to Malinin LAN"

На Malinin

/ip firewall nat
add chain=srcnat src-address=192.168.1.0/24 dst-address=192.168.0.0/16 action=accept comment="bypass NAT to Shats LAN"

Убедитесь, что эти правила стоят ВЫШЕ ваших общих правил masquerade.


4) FastTrack: отключить или исключить межсайтовый трафик

Если включён FastTrack, он может «обходить» firewall/NAT-цепочки и ломать туннельный трафик. Проще всего — отключить FastTrack, или скорректировать условие fasttrack-правила так, чтобы исключить межсайтовые сети.

Вариант A — полностью отключить FastTrack (на обоих):

/ip firewall filter
set [find where chain=forward and action=fasttrack-connection] disabled=yes

Вариант B — исключить межсайтовый трафик из FastTrack (пример для типового fasttrack-правила):

/ip firewall filter
# Пример: добавляем отрицательные условия к существующему fasttrack-правилу
set [find where chain=forward and action=fasttrack-connection and connection-state~"established,related"] \
    src-address=!192.168.0.0/16 dst-address=!192.168.1.0/24

Примечание: точный синтаксис «set ... src-address/dst-address» для вашего текущего fasttrack-правила может отличаться. Универсально — поставить ПЕРЕД fasttrack явное accept для межсайтовых сетей в обе стороны (такие пакеты не попадут под fasttrack):

/ip firewall filter
add chain=forward src-address=192.168.0.0/16 dst-address=192.168.1.0/24 action=accept comment="allow site-to-site"
add chain=forward src-address=192.168.1.0/24 dst-address=192.168.0.0/16 action=accept comment="allow site-to-site"

5) Разрешения в firewall (input) для GRE

Если у вас жёсткие политики на input, нужно явно разрешить GRE-пакеты c удалённого публичного IP в адрес вашего WAN.

На Shats

/ip firewall filter
add chain=input protocol=gre src-address=80.64.170.90 dst-address=178.49.24.65 action=accept comment="allow GRE from Malinin"

На Malinin

/ip firewall filter
add chain=input protocol=gre src-address=178.49.24.65 dst-address=80.64.170.90 action=accept comment="allow GRE from Shats"

Разрешите также icmp (для диагностики) и доступ управления (ssh/winbox) по необходимости. Если политика по умолчанию — drop, удостоверьтесь, что выше есть правила accept для established/related.


6) Проверка работоспособности

  1. Статус GRE-интерфейса:
/interface gre print detail
  1. Ping точек GRE:
/ping 10.199.99.2 interface=gre-to-malinin    ;# выполнять на Shats
/ping 10.199.99.1 interface=gre-to-shats      ;# выполнять на Malinin
  1. Ping межсайтовых адресов (с указанием источника из LAN):
# На Shats — пингуем хост в 192.168.1.0/24, например 192.168.1.10
/ping 192.168.1.10 src-address=192.168.0.1

# На Malinin — пингуем хост в 192.168.0.0/16, например 192.168.0.10
/ping 192.168.0.10 src-address=192.168.1.1
  1. Таблица маршрутов и ARP (диагностика):
/ip route print where dst-address~"192.168.0.0/16|192.168.1.0/24"
/ip neighbor print
  1. Connection tracking (убедиться, что нет NAT на межсайтовых потоках):
/ip firewall connection print where dst-address~"192.168.1." or src-address~"192.168.1."

7) Частые проблемы и решения

  • Туннель up, но пинги межсайт не идут: проверьте, что на обеих сторонах есть статические маршруты через адрес ДРУГОГО конца GRE (10.199.99.2 на Shats и 10.199.99.1 на Malinin).
  • Пакеты идут в одну сторону: убедитесь в обходе NAT (правила srcnat action=accept стоят выше masquerade) и в исключении FastTrack.
  • Туннель не поднимается: разрешите protocol=gre на input между публичными IP, проверьте, что local-address/remote-address указаны верно.
  • Большие пакеты/веб «подвисают»: включён clamp-tcp-mss=yes на GRE. При необходимости можно уменьшить MTU GRE-интерфейса (например, до 1430) и повторно проверить.

8) Полные блоки конфигурации для быстрого применения

Скопируйте на соответствующий роутер целиком. Корректируйте адреса управления (src-address в ping) под ваши реальные адреса шлюзов/LAN.

Применить на Shats

/interface gre
add name=gre-to-malinin local-address=178.49.24.65 remote-address=80.64.170.90 clamp-tcp-mss=yes keepalive=10s,10

/ip address
add address=10.199.99.1/30 interface=gre-to-malinin comment="GRE to Malinin"

/ip route
add dst-address=192.168.1.0/24 gateway=10.199.99.2 comment="to Malinin via GRE"

/ip firewall nat
add chain=srcnat src-address=192.168.0.0/16 dst-address=192.168.1.0/24 action=accept comment="bypass NAT to Malinin LAN"

/ip firewall filter
add chain=input protocol=gre src-address=80.64.170.90 dst-address=178.49.24.65 action=accept comment="allow GRE from Malinin"
# (Опция) Явно разрешить межсайтовый трафик и обойти fasttrack
add chain=forward src-address=192.168.0.0/16 dst-address=192.168.1.0/24 action=accept comment="allow site-to-site"
add chain=forward src-address=192.168.1.0/24 dst-address=192.168.0.0/16 action=accept comment="allow site-to-site"
# (Опция) отключить fasttrack целиком
# set [find where chain=forward and action=fasttrack-connection] disabled=yes

Применить на Malinin

/interface gre
add name=gre-to-shats local-address=80.64.170.90 remote-address=178.49.24.65 clamp-tcp-mss=yes keepalive=10s,10

/ip address
add address=10.199.99.2/30 interface=gre-to-shats comment="GRE to Shats"

/ip route
add dst-address=192.168.0.0/16 gateway=10.199.99.1 comment="to Shats via GRE"

/ip firewall nat
add chain=srcnat src-address=192.168.1.0/24 dst-address=192.168.0.0/16 action=accept comment="bypass NAT to Shats LAN"

/ip firewall filter
add chain=input protocol=gre src-address=178.49.24.65 dst-address=80.64.170.90 action=accept comment="allow GRE from Shats"
# (Опция) Явно разрешить межсайтовый трафик и обойти fasttrack
add chain=forward src-address=192.168.1.0/24 dst-address=192.168.0.0/16 action=accept comment="allow site-to-site"
add chain=forward src-address=192.168.0.0/16 dst-address=192.168.1.0/24 action=accept comment="allow site-to-site"
# (Опция) отключить fasttrack целиком
# set [find where chain=forward and action=fasttrack-connection] disabled=yes

9) (Опционально) Шифрование: GRE поверх IPsec

Если требуется шифровать GRE-трафик через интернет, включите IPsec в транспортном режиме для протокола GRE между публичными IP. Пример — IKEv2 с PSK и современными шифрами. Команды приводятся симметрично на обеих сторонах (подставьте соответствующие локальные/удалённые адреса и одинаковый секрет).

На Shats

/ip ipsec profile
add name=prof-gre ike-dh-group=modp2048 ike-encryption=aes-256 ike-integrity=sha256

/ip ipsec proposal
add name=prop-gre auth-algorithms=sha256 enc-algorithms=aes-256-gcm pfs-group=none

/ip ipsec peer
add name=peer-malinin address=80.64.170.90/32 exchange-mode=ike2 profile=prof-gre send-initial-contact=yes

/ip ipsec identity
add peer=peer-malinin auth-method=pre-shared-key secret="SET_STRONG_SHARED_KEY"

/ip ipsec policy
add src-address=178.49.24.65/32 dst-address=80.64.170.90/32 protocol=gre action=encrypt level=require \
    proposal=prop-gre tunnel=no sa-src-address=178.49.24.65 sa-dst-address=80.64.170.90

На Malinin

/ip ipsec profile
add name=prof-gre ike-dh-group=modp2048 ike-encryption=aes-256 ike-integrity=sha256

/ip ipsec proposal
add name=prop-gre auth-algorithms=sha256 enc-algorithms=aes-256-gcm pfs-group=none

/ip ipsec peer
add name=peer-shats address=178.49.24.65/32 exchange-mode=ike2 profile=prof-gre send-initial-contact=yes

/ip ipsec identity
add peer=peer-shats auth-method=pre-shared-key secret="SET_STRONG_SHARED_KEY"

/ip ipsec policy
add src-address=80.64.170.90/32 dst-address=178.49.24.65/32 protocol=gre action=encrypt level=require \
    proposal=prop-gre tunnel=no sa-src-address=80.64.170.90 sa-dst-address=178.49.24.65

Дополнительно:

  • Если политика input строгая, разрешите UDP/500 и UDP/4500 (IKE/NAT-T) и ipsec-esp между публичными IP.
  • На публичных адресах без NAT можно оставить nat-traversal=no (по умолчанию RouterOS 7 сам определяет необходимость). Для надёжности: peer set peer-... passive=no.

Проверка:

/ip ipsec active-peers print detail
/ip ipsec installed-sa print detail

10) Финальная проверка связности пользователей

  1. С ПК за Shats (например, 192.168.0.100) — ping 192.168.1.10 (ПК за Malinin). Должны быть ответы.
  2. С ПК за Malinin (например, 192.168.1.50) — ping 192.168.0.10 (ПК за Shats).
  3. Traceroute между сетями должен показывать переход через GRE (обычно один «хоп» до адреса удалённой LAN через 10.199.99.1↔10.199.99.2).
  4. При большой нагрузке на межсайтовый трафик убедитесь, что нет внезапных обрывов (если есть — проверьте MTU/MSS и FastTrack/NAT правила).

Готово. После выполнения шагов клиенты 192.168.0.0/16 за Shats будут видеть клиентов 192.168.1.0/24 за Malinin через GRE-туннель. Для безопасности можно включить опциональный раздел IPsec.