314 lines
15 KiB
Markdown
314 lines
15 KiB
Markdown
## 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) Резервная копия (рекомендуется)
|
||
```rsc
|
||
/system backup save name=pre-gre-setup
|
||
```
|
||
|
||
---
|
||
|
||
### 1) Создание GRE-интерфейсов
|
||
|
||
Настраиваем GRE на каждом роутере. Важно указать правильные `local-address` (своё публичное) и `remote-address` (публичный адрес удалённого роутера).
|
||
|
||
#### На Shats
|
||
```rsc
|
||
/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
|
||
```rsc
|
||
/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)
|
||
```rsc
|
||
/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)
|
||
```rsc
|
||
/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
|
||
```rsc
|
||
/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
|
||
```rsc
|
||
/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 (на обоих):
|
||
```rsc
|
||
/ip firewall filter
|
||
set [find where chain=forward and action=fasttrack-connection] disabled=yes
|
||
```
|
||
|
||
Вариант B — исключить межсайтовый трафик из FastTrack (пример для типового fasttrack-правила):
|
||
```rsc
|
||
/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):
|
||
```rsc
|
||
/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
|
||
```rsc
|
||
/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
|
||
```rsc
|
||
/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-интерфейса:
|
||
```rsc
|
||
/interface gre print detail
|
||
```
|
||
|
||
2) Ping точек GRE:
|
||
```rsc
|
||
/ping 10.199.99.2 interface=gre-to-malinin ;# выполнять на Shats
|
||
/ping 10.199.99.1 interface=gre-to-shats ;# выполнять на Malinin
|
||
```
|
||
|
||
3) Ping межсайтовых адресов (с указанием источника из LAN):
|
||
```rsc
|
||
# На 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
|
||
```
|
||
|
||
4) Таблица маршрутов и ARP (диагностика):
|
||
```rsc
|
||
/ip route print where dst-address~"192.168.0.0/16|192.168.1.0/24"
|
||
/ip neighbor print
|
||
```
|
||
|
||
5) Connection tracking (убедиться, что нет NAT на межсайтовых потоках):
|
||
```rsc
|
||
/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
|
||
```rsc
|
||
/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
|
||
```rsc
|
||
/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
|
||
```rsc
|
||
/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
|
||
```rsc
|
||
/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`.
|
||
|
||
Проверка:
|
||
```rsc
|
||
/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.
|
||
|
||
|