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
- WAN (публичный):
- Router Malinin:
- WAN (публичный):
80.64.170.90 - LAN:
192.168.1.0/24 - GRE IP на туннеле:
10.199.99.2/30
- WAN (публичный):
GRE-интерфейс поднимается между публичными адресами. На GRE назначаем /30 адреса из подсети 10.199.99.0/30.
Предпосылки и рекомендации
- Доступ в терминал RouterOS (WinBox/WebFig/SSH).
- На обоих маршрутизаторах уже есть рабочий доступ в интернет на WAN-интерфейсах.
- Если включён FastTrack — его нужно отключить или исключить межсайтовый трафик из fasttrack.
- Маскарадинг (srcnat/masquerade) — добавим правила обхода NAT для межсайтового трафика, чтобы не NAT’ить его.
- 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) Проверка работоспособности
- Статус GRE-интерфейса:
/interface gre print detail
- Ping точек GRE:
/ping 10.199.99.2 interface=gre-to-malinin ;# выполнять на Shats
/ping 10.199.99.1 interface=gre-to-shats ;# выполнять на Malinin
- 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
- Таблица маршрутов и ARP (диагностика):
/ip route print where dst-address~"192.168.0.0/16|192.168.1.0/24"
/ip neighbor print
- 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) Финальная проверка связности пользователей
- С ПК за Shats (например,
192.168.0.100) — ping192.168.1.10(ПК за Malinin). Должны быть ответы. - С ПК за Malinin (например,
192.168.1.50) — ping192.168.0.10(ПК за Shats). - Traceroute между сетями должен показывать переход через GRE (обычно один «хоп» до адреса удалённой LAN через 10.199.99.1↔10.199.99.2).
- При большой нагрузке на межсайтовый трафик убедитесь, что нет внезапных обрывов (если есть — проверьте MTU/MSS и FastTrack/NAT правила).
Готово. После выполнения шагов клиенты 192.168.0.0/16 за Shats будут видеть клиентов 192.168.1.0/24 за Malinin через GRE-туннель. Для безопасности можно включить опциональный раздел IPsec.