Два провайдера, два туннеля

Раздел для тех, кто начинает знакомиться с MikroTik
Правила форума
Как правильно оформить вопрос.
Прежде чем начать настройку роутера, представьте, как это работает. Попробуйте почитать статьи об устройстве интернет-сетей. Убедитесь, что всё, что Вы задумали выполнимо вообще и на данном оборудовании в частности.
Не нужно изначально строить Наполеоновских планов. Попробуйте настроить простейшую конфигурацию, а усложнения добавлять в случае успеха постепенно.
Пожалуйста, не игнорируйте правила русского языка. Отсутствие знаков препинания и неграмотность автора топика для многих гуру достаточный повод проигнорировать топик вообще.

1. Назовите технологию подключения (динамический DHCP, L2TP, PPTP или что-то иное)
2. Изучите темку "Действия до настройки роутера".
viewtopic.php?f=15&t=2083
3. Настройте согласно выбранного Вами мануала
4. Дочитайте мануал до конца и без пропусков, в 70% случаев люди просто не до конца читают статью и пропускают важные моменты.
5. Если не получается, в Winbox открываем терминал и вбиваем там /export hide-sensitive. Результат в топик под кат, интимные подробности типа личных IP изменить на другие, пароль забить звездочками.
6. Нарисуйте Вашу сеть, рисунок (схему) сюда. На словах может быть одно, в действительности другое.
Ответить
gloobus
Сообщения: 1
Зарегистрирован: 23 июл 2018, 22:30

Вроде все работает, но не могу понять почему... :)

Попробую кратенько. Есть два офиса, в каждом два провайдера. Офисы не очень далеко друг от друга, и по этому один провайдера (назовем его ПровайдерА) присутствует в обоих офисах, так же ПровайдерБ в первом и ПровайдерВ во втором.

В обоих офисах настроил балансировку по вики https://wiki.mikrotik.com/wiki/Manual:PCC
Дополнительно настроил Failover по вики https://wiki.mikrotik.com/wiki/Advanced ... _Scripting
Дополнительно создал в Mangle правило, что бы веб трафик шел через второго провайдера (там анлим)

Код: Выделить всё

chain=prerouting action=mark-routing new-routing-mark=to_ISP2 passthrough=no protocol=tcp 
      dst-address-type=!local connection-mark=no-mark in-interface=ether6-lan1 dst-port=80,443 
Все работает, все хорошо, на сколько мог потестить, отключая попеременно интерфейсы ether1-isp1 и ether2-isp2.

Далее, создаю два GRE over IPSec туннеля между офисам:
GRE1: ПровайдерА - ПровайдерА
GRE2: ПровайдерБ - ПровайдерВ
Смысл такой, что первый туннель на одном провайдере, трафик в этом случае не считает, скорость высокая, пинг минимальный, канал по оптике - он должен быть основным!
Второй туннель выдает не очень хорошие показатели, по этому он должен работать в случае падения ПровайдерА
Создал Address Lists из перечня IP-адресов (isp-networks-gre1) всех трех провайдеров, используя этот лист, создал в начале Mangle правила:

Код: Выделить всё

chain=prerouting action=accept protocol=udp src-address-list=isp-networks-gre1 dst-address-list=isp-networks-gre1 
chain=prerouting action=accept protocol=gre src-address-list=isp-networks-gre1 dst-address-list=isp-networks-gre1 
chain=prerouting action=accept protocol=ipsec-esp src-address-list=isp-networks-gre1 dst-address-list=isp-networks-gre1
То есть, трафик между провайдерами по указанным протоколам будет принят без маркировки (ну я так понял... я пока в стадии изучения и подобную схему делаю первый раз)

Далее я создал в IP Routes Rules правила:

Код: Выделить всё

src-address=<IP_ISP1_OFFICE1> dst-address=<IP_ISP1_OFFICE2> action=lookup-only-in-table table=to_GRE1 
src-address=<IP_ISP1_OFFICE2> dst-address=<IP_ISP1_OFFICE1> action=lookup-only-in-table table=to_GRE1 
src-address=<IP_ISP2_OFFICE1> dst-address=<IP_ISP2_OFFICE2> action=lookup-only-in-table table=to_GRE2 
src-address=<IP_ISP2_OFFICE2> dst-address=<IP_ISP2_OFFICE1> action=lookup-only-in-table table=to_GRE2 
Соответственно маршруты (пример из первого офиса):

Код: Выделить всё

dst-address=0.0.0.0/0 pref-src=<IP_ISP1_OFFICE1> gateway=<GW_ISP1_OFFICE1> 
        gateway-status=<GW_ISP1_OFFICE1> reachable via  ether1-isp1 distance=3 scope=30 target-scope=10 
        routing-mark=to_GRE1 
dst-address=0.0.0.0/0 pref-src=<IP_ISP2_OFFICE1> gateway=<GW_ISP2_OFFICE1> 
        gateway-status=<GW_ISP2_OFFICE1>  reachable via  ether2-isp2 distance=3 scope=30 target-scope=10 
        routing-mark=to_GRE2
Опять погонял проверкой, отключал интерфейсы на которых висят провайдеры, туннели на этих провайдеров падали, связь между офисами переходит на второй тунель.
Включаю обратно - туннель восстанавливается. Вроде все нормально, но:

Код: Выделить всё

[admin@MikroTik] > /ip firewall connection print 
 #          PROTOCOL  SRC-ADDRESS           	DST-ADDRESS          
 0  SAC     gre       <IP_ISP1_OFFICE2>         <IP_ISP1_OFFICE1>        
 1  SAC     gre       <IP_ISP2_OFFICE2>         <IP_ISP2_OFFICE1>        
 2  SAC     udp       <IP_ISP1_OFFICE2>:500     <IP_ISP2_OFFICE1>:500    
 3  SAC     udp       <IP_ISP1_OFFICE2>:500     <IP_ISP1_OFFICE1>:500    
 4  SAC     udp       <IP_ISP2_OFFICE2>:500     <IP_ISP2_OFFICE1>:500    
 5  SAC     udp       <IP_ISP2_OFFICE2>:500     <IP_ISP1_OFFICE1>:500    
 6  S C     ipsec-esp <IP_ISP2_OFFICE2>         <IP_ISP2_OFFICE1>
 7  S C     ipsec-esp <IP_ISP1_OFFICE2>         <IP_ISP1_OFFICE1>
(удалил из списка коннектов лишнее...)
Откуда и почему берутся коннекты #2 и #5, это соединения ПровайдерА - ПровайдерБ и ПровайдерА - ПровайдерВ которых в принципе не должно быть согласно IP Routes Rules?


sani009
Сообщения: 5
Зарегистрирован: 08 апр 2021, 10:15

вопрос возник.

схема почти 1в1.
за тем исключением, что во втором офисе пока 1 провайдер.
на впн сервере 2.

и существенное отличие - оспф.

так вот.
туннели поднимаются (один подключается в один адрес, другой в другой, но из одной точки), гре поднимаются, оспф отрабатывает, трафик ходит.
(так же словил непонятный мне глюк, чтобы ипсек заработал надо выставлять сервер в пасив но с инициатором соединения, а на клиенте наоборот. иначе две политики двух подключений будут по очереди подключаться, один упал, второй поднялся, второй упал, первый поднялся).

но, стоит упасть одному из провайдеров оспф начинает тупить, на перестройку маршрутизации уходит овердохера времени как бы я не выставлял время жизни-передачи-и-т.д..
а дальше ещё интересней.
поднимается основной провайдер, их снова два. и оспф начинает ловить глюки. маршрутизация не может выстроиться, туда-сюда переключается.
так же в логах я вижу сообщение от оспф "ошибка аутентификации" (на рандомном порту концов туннелей), и не может установиться соседство (я так понимаю глюк выше из-за этого глюка).
помогает только ребут всех некротов.

есть идеи что я не так делаю?

p.s. при этом с одним профилем ипсека всё идеально работает. клиент подключается по дднс микрота сервера (обновление имени раз в минуту), всё поднимается, оспф спокойно выстраивает маршрутизацию. при падении основного канала, с задержкой в 1м обновляется дднс, ипсек переподнимается, гре не успевает упасть (время жизни), оспф за пару секунд выстраивает маршрутизацию (старая увы падает, из-за маленьких задержек).
но смысл был в том чтобы одновременно работали два туннеля, один падает, трафик идёт во второй, без задержки (или минимальной).


xvo
Сообщения: 4204
Зарегистрирован: 25 фев 2018, 22:41
Откуда: Москва

Правила в ip route rule запрещающие туннелям строиться не через своего провайдера в наличии?


Telegram: @thexvo
sani009
Сообщения: 5
Зарегистрирован: 08 апр 2021, 10:15

xvo писал(а): 08 апр 2021, 11:14 Правила в ip route rule запрещающие туннелям строиться не через своего провайдера в наличии?
а смысл в них если политикой ипсека подключение точка-точка (не сеть-сеть), то есть две политики на клиенте для каждого туннеля, и динамическая на сервере.
концы гре туннелей 30 маской.

up.
отключил в оспф интерфейсах (концы туннелей) аутентификацию - оспф заработал и перестраивается нормально.
в целом можно и так обойтись, я так и так политики на интерфейсе в пассив ставлю, но как то не красиво без паролей)
больше на костыль похоже...


xvo
Сообщения: 4204
Зарегистрирован: 25 фев 2018, 22:41
Откуда: Москва

Смысл в том, чтобы оба туннеля не строились через одну и ту же политику.
Но если политики руками созданы, то да, не должны бы, если адреса «своего» конца туннеля в gre везде вбиты.


Telegram: @thexvo
sani009
Сообщения: 5
Зарегистрирован: 08 апр 2021, 10:15

xvo писал(а): 08 апр 2021, 14:36 Смысл в том, чтобы оба туннеля не строились через одну и ту же политику.
Но если политики руками созданы, то да, не должны бы, если адреса «своего» конца туннеля в gre везде вбиты.
все туннели ручками забиты.
за исключением ипсек сервера, там динамическая политика, но основе неё создаётся статическая (на клиенте статическая).

проблема пароля после его отключения ушла.
появилась другая.
у меня такое ощущение что оспф пытается "подружиться" с другим роутером через соседний туннель.
то есть смотрит в один гре, видит там "друга", но в какой-то момент трафик перелетает в соседний к тому же устройству. и валится ошибка в логах "на этом адресе "друг" не найден". а т.к. оспф смотрит в оба конца, начинается танец переподключений.

то есть похожая ситуация с мультиван, где надо указать явно "откуда прилетело - туда улетает".

я вроде сделал фильтры оспф, но смутно понимаю как они работают.

Код: Выделить всё

 0   chain=ospf-in prefix=66.66.66.25 invert-match=no action=passthrough 
     set-in-nexthop=66.66.66.26 set-bgp-prepend-path="" 

 1   chain=ospf-out prefix=66.66.66.26 invert-match=no action=passthrough 
     set-out-nexthop=66.66.66.25 set-bgp-prepend-path="" 

 2   chain=ospf-in prefix=66.66.66.29 invert-match=no action=passthrough 
     set-in-nexthop=66.66.66.30 set-bgp-prepend-path="" 

 3   chain=ospf-out prefix=66.66.66.30 invert-match=no action=passthrough 
     set-out-nexthop=66.66.66.29 set-bgp-prepend-path="" 
это 4 туннеля (по паре на филиал) и их концы


xvo
Сообщения: 4204
Зарегистрирован: 25 фев 2018, 22:41
Откуда: Москва

А почему в этом должна быть проблема: для ospf совершенно нормальная ситуация, что он видит соседа через несколько разных интерфейсов. Ничего при этом сыпаться не должно. Настройки ospf приложите.


Telegram: @thexvo
sani009
Сообщения: 5
Зарегистрирован: 08 апр 2021, 10:15

xvo писал(а): 08 апр 2021, 16:32 А почему в этом должна быть проблема: для ospf совершенно нормальная ситуация, что он видит соседа через несколько разных интерфейсов. Ничего при этом сыпаться не должно. Настройки ospf приложите.
 сервер

Код: Выделить всё

@MikroTik] > routing ospf interface print
Flags: X - disabled, I - inactive, D - dynamic, P - passive
 #    INTERFACE                 COST PRI NETWORK-TYPE   AUT... AUTHENTICATIO...
 0  P all                         10   1 default        md5    123
 1    gre-tunnel_3_0              10   1 point-to-point none
 2    gre-tunnel_3_1             100   1 point-to-point none
 3    gre-tunnel_55_0             10   1 point-to-point none
 4    gre-tunnel_55_1            100   1 point-to-point none
 5    gre-tunnel_17_0             10   1 point-to-point none
 6    gre-tunnel_17_1            100   1 point-to-point none
 7 DP ether5                      10   1 broadcast      md5    123
 
 @MikroTik] > routing ospf instance print
Flags: X - disabled, * - default
 0 X* name="default" router-id=0.0.0.0 distribute-default=never
      redistribute-connected=no redistribute-static=no redistribute-rip=no
      redistribute-bgp=no redistribute-other-ospf=no metric-default=1
      metric-connected=20 metric-static=20 metric-rip=20 metric-bgp=auto
      metric-other-ospf=auto in-filter=ospf-in out-filter=ospf-out

 1    name="2.6" router-id=0.0.0.0 distribute-default=never
      redistribute-connected=no redistribute-static=as-type-1
      redistribute-rip=no redistribute-bgp=no redistribute-other-ospf=no
      metric-default=1 metric-connected=20 metric-static=20 metric-rip=20
      metric-bgp=auto metric-other-ospf=auto in-filter=ospf-in
      out-filter=ospf-out

@MikroTik] > routing ospf area print
Flags: X - disabled, I - invalid, * - default
 #    NAME                                 AREA-ID         TYPE    DEFAULT-COST
 0 XI* backbone                             0.0.0.0         default
 1    back                                 0.0.0.0         default
 2    area2                                0.0.0.2         default
 
 @MikroTik] > routing ospf network print
Flags: X - disabled, I - invalid
 #   NETWORK            AREA
 0   66.66.66.0/24      back
 1   10.0.2.0/24        area2

 клиент

Код: Выделить всё


@MikroTik] > routing ospf interface print
Flags: X - disabled, I - inactive, D - dynamic, P - passive
 #    INTERFACE                 COST PRI NETWORK-TYPE   AUT... AUTHENTICATIO...
 0  P all                         10   1 default        md5    123
 1    gre-tunne_55_0_pizdat...    10   1 default        none
 2    gre-tunnel_55_1            100   1 default        none
 3 DP ether10                     10   1 broadcast      md5    123

@MikroTik] > routing ospf instance print
Flags: X - disabled, * - default
 0 X* name="default" router-id=0.0.0.0 distribute-default=never
      redistribute-connected=no redistribute-static=no redistribute-rip=no
      redistribute-bgp=no redistribute-other-ospf=no metric-default=1
      metric-connected=20 metric-static=20 metric-rip=20 metric-bgp=auto
      metric-other-ospf=auto in-filter=ospf-in out-filter=ospf-out

 1    name="055_test" router-id=0.0.0.0 distribute-default=never
      redistribute-connected=no redistribute-static=no redistribute-rip=no
      redistribute-bgp=no redistribute-other-ospf=no metric-default=1
      metric-connected=20 metric-static=20 metric-rip=20 metric-bgp=auto
      metric-other-ospf=auto in-filter=ospf-in out-filter=ospf-out

@MikroTik] > routing ospf area print
Flags: X - disabled, I - invalid, * - default
 #    NAME                                 AREA-ID         TYPE    DEFAULT-COST
 0 XI* backbone                             0.0.0.0         default
 1    back                                 0.0.0.0         default
 6    area55                               0.0.0.55        default
 
 @MikroTik] > routing ospf network print
Flags: X - disabled, I - invalid
 #   NETWORK            AREA
 0   66.66.66.0/24      back
 5   10.0.55.0/24       area55


в таком виде пойдёт?




разобрался
благодаря этой статье
https://habr.com/ru/post/201042/
и ошибки оспф "большой мту гре".
изначальная (когда был 1 провайдера и там и там) схема была так что на всех устройствах прописаны все сети в ареа. соответственно, как я понимаю, при падении основного канала, оспф пытался подружиться через соседний туннель (и/или соседние сети) с старой сетью что упала, что логично т.к. через ядро и другие ареа видно другой конец упавшего туннеля.
убрал лишние ареа на всех устройствах, прописал только те что непосредственно имеют "концы" на своём устройстве. все стало нормально перестраиваться. два туннеля держатся согласно метрике.


xvo
Сообщения: 4204
Зарегистрирован: 25 фев 2018, 22:41
Откуда: Москва

С тем, что в какую area, можно просто: все туннели пихать в backbone, а все локальные сети на каждом роутере в свою.

А вот два параллельных туннеля в разных area - это возможно и правда может привести к непонятным результатам.


Telegram: @thexvo
sani009
Сообщения: 5
Зарегистрирован: 08 апр 2021, 10:15

xvo писал(а): 08 апр 2021, 18:15 А вот два параллельных туннеля в разных area - это возможно и правда может привести к непонятным результатам.
пробовал на два параллельных туннеля две backbon - результат какой угодно но не тот что нужен и не стабилен.
пробовал на два параллельных туннеля выделить две сети (66.66.66.0/24 и 99.99.99.0/24, но концы туннелей в 30 маску, чтоб не конфликтовали, и не выходило так что маршрут динамический вылетал сразу во все концы из-за 24 маски) но одну backbone - результат непонятный, возможно и завелось бы, если бы удалил лишние ареа. в целом этот вариант вижу вариацией рабочей схемы, но лишнюю сеть используешь.
пробовал на два параллельных туннеля выделить две сети как в варианте выше, но в два backbone - результат так же непредсказуем, кроме этого сложен в настройке, т.к. необходимо завести дополнительные инстансы и ареа.

xvo писал(а): 08 апр 2021, 18:15 С тем, что в какую area, можно просто: все туннели пихать в backbone, а все локальные сети на каждом роутере в свою.
так и сделал,
backbon - сеть туннелей
локальные сети на роутерах - ареа, каждая под своим ид
НО, прописаны только "свои" сети в ареа (и ареа тоже), чужие удалил, иначе получалось что-то вроде оспф петли.
(на ядре стоит политика раздавать статические маршруты, дабы остальные могли попасть в старые туннели)

эта схема вроде рабочая.
в тестовой среде работает стабильно.
возможно стоит только поиграться с временем передачи зон, жизни роутера и т.д., но похоже чем меньше тем лучше.
интересный момент, поставив стоимость маршрута большую чем у основного - он выпадает из передачи, то есть передаётся только с меньшей стоимостью, пока активен.

запилю сегодня в полупродакшн, посмотрю как будет работать =)

p.s. вернул аутентификацию
стали валиться ошибки при передёргивании туннелей, но через некоторое время (рандомно) пропадают
Discarding packet: MD5 authentication failed
source=66.66.66.173
Invalid sequence number
mine=26103
received=26102

хз что оно значит.
пока отключу.


Ответить