Files
shx-network/gre_site_to_site_shats_malinin.md

314 lines
15 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 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.