Jump to content
Калькуляторы

Балансировка 2 каналов с авт. отключением мертвого маршрута

Здравствуйте, тема наверное уже затертая, перечитал много информации, но ответа для себя не нашел . Есть 2 провайдера со статикой и балансировкой ECMP.

Возникло пару вопросов:

 

1. что нужно поправить в маршрутах что-бы 77.88.8.1 строго пинговался с 83.220.110.1, соответственно 77.88.8.8 с 81.177.200.9, сейчас этого не происходит как я понимаю из за add dst-address=0.0.0.0/0 gateway=81.177.200.9, 83.220.110.1, 83.220.110.1, 83.220.110.1

 

#      DST-ADDRESS       PREF-SRC        GATEWAY         DISTANCE  ROUTING MARK
0 A S  0.0.0.0/0                         83.220.110.1    1         ISP1 out
1 A S  0.0.0.0/0                         81.177.200.9    1         ISP2 out
2 A S  0.0.0.0/0                         81.177.200.9    1
                                         83.220.110.1      
                                         83.220.110.1      
                                         83.220.110.1      
3 A S  77.88.8.1/32                      83.220.110.1    1
4 A S  77.88.8.8/32                      81.177.200.9    1
5 ADC  83.220.110.0/24   83.220.110.190  ISP1            0
6 ADC  81.177.200.0/24   81.177.200.20   ISP2            0
7 ADC  192.168.0.0/24    192.168.0.1     LAN1            0

 

2. Как правильно реализовать средствами Netwath отключение упавшего канала, ну и включение соответственно после восстановления связи ?

 

UP /ip route enable [find dst-address=0.0.0.0/0 and gateway=83.220.110.1 and distance >= 1

DOWN /ip route disable [find dst-address=0.0.0.0/0 and gateway=83.220.110.1 and distance >= 1

 

Понятно что без первого не получиться второго, как автоматизировать процесс ?

Share this post


Link to post
Share on other sites

По моему опыту Netwath никогда не работала нормально. Обычно реагировала только на физический обрыв, а вот если проблема за железкой провайдера, то Netwath на это пофиг. Может конечно пофиксили это дело в последних версиях ОСи, но все равно по мне так лучше пользоваться скриптами и шедулером. Вот там без проблем можно указать с какого конкретно интерфейса пинговать тот или иной ресурс. По сути скрипт довольно простенький получается под это дело.

Share this post


Link to post
Share on other sites

fiskunt

может черкнешь скриптик для отключения и включения машрутов :

 

#      DST-ADDRESS       PREF-SRC        GATEWAY         DISTANCE  ROUTING MARK
0 A S  0.0.0.0/0                         83.220.110.1    1         ISP1 out
1 A S  0.0.0.0/0                         81.177.200.9    1         ISP2 out

 

через проверку :

 

 3 A S  77.88.8.1/32                      83.220.110.1    1
4 A S  77.88.8.8/32                      81.177.200.9    1

Share this post


Link to post
Share on other sites

может черкнешь скриптик для отключения и включения машрутов :

 

Способов много, вот один из простых. Получается тот же нетватч только через шедулер

 

 

 

Скрипт 1:

/:local ping [/ping 77.88.8.1 count=3 interface=интерфейс с адресом 83.220.110.XXX];
/:if ($ping >= 2) do={/ip route enable [find dst-address=0.0.0.0/0 and gateway=83.220.110.1 and distance >= 1]};
/:if ($ping <= 1) do={/ip route disable [find dst-address=0.0.0.0/0 and gateway=83.220.110.1 and distance >= 1]};

 

Скрипт 2:

/:local ping2 [/ping 77.88.8.8 count=3 interface=интерфейс с адресом 81.177.200.XXX];
/:if ($ping2 >= 2) do={/ip route enable [find dst-address=0.0.0.0/0 and gateway=81.177.200.9 and distance >= 1]};
/:if ($ping2 <= 1) do={/ip route disable [find dst-address=0.0.0.0/0 and gateway=81.177.200.9 and distance >= 1]};

 

Отдельный для каждого интерфейса. Поставь интервал срабатывания в пару минут и все будет ОК. Скрипт не проверял и мог где нибудь ошибиться, так что пиши если что.

Edited by fiskunt

Share this post


Link to post
Share on other sites

fiskunt

скрипты отрабатывают, но в соединениях пинга нет, цифры интефейсы перепроверил 3 раза...

 

и второе, если даже вручную погасить маршрут, ну или первого ISP

A S  0.0.0.0/0                         81.177.200.9    1         ISP2 out

 

то он все равно остается активным тут, гаситься только если отключить интерфейса

A S  0.0.0.0/0                         81.177.200.9    1
                                         83.220.110.1      
                                         83.220.110.1      
                                         83.220.110.1      

 

есть какие мысли ?

Share this post


Link to post
Share on other sites

fiskunt

скрипты отрабатывают, но в соединениях пинга нет, цифры интефейсы перепроверил 3 раза...

 

и второе, если даже вручную погасить маршрут, ну или первого ISP

A S  0.0.0.0/0                         81.177.200.9    1         ISP2 out

 

то он все равно остается активным тут, гаситься только если отключить интерфейса

A S  0.0.0.0/0                         81.177.200.9    1
                                         83.220.110.1      
                                         83.220.110.1      
                                         83.220.110.1      

 

есть какие мысли ?

 

 

Значит убери в критериях поиска все кроме шлюза, вот так оставь

/:if ($ping <= 1) do={/ip route disable [find gateway=81.177.200.9]};

Он так должен вырубить все маршруты через этот шлюз, сколько бы их не было. Ну и в других строках так же

Edited by fiskunt

Share this post


Link to post
Share on other sites

Вот я балда =)

А как он будет пинговать если маршрут отключится?

Значит только те что до 0.0.0.0/0

 

/local ping [/ping 77.88.8.1 count=3 interface=интерфейс с адресом 83.220.110.XXX];
/if ($ping >= 2) do={/ip route enable [find dst-address=0.0.0.0/0 and gateway=83.220.110.1};
/if ($ping <= 1) do={/ip route disable [find dst-address=0.0.0.0/0 and gateway=83.220.110.1};

 

И зачем у тебя столько маршрутов вообще?

 

Для проверки скрипта забей имя интерфейса и вставь его целиком в командную строку микротика. Там увидишь что и как отработало

Edited by fiskunt

Share this post


Link to post
Share on other sites

И зачем у тебя столько маршрутов вообще?

 

нулевой и первый - доступ к тику с любого ISP

второй - балансировка

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

 

Оба ISP одновременно нормально работают, только вот как реализовать отключение упавшего канала ?

 

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

Share this post


Link to post
Share on other sites

второй - балансировка

 

И как отрабатывает балансировка, успешно? Проблем с online играми, skype - нет ?

 

Хотел себе когда то так сделать, но потом отказался и выбрал вариант с часть абонетов на один ISP, часть на другой.

Share this post


Link to post
Share on other sites

Не надо скрин нашел ошибку.

Просто квадратную скобку не закрыл =)

 

/local ping [/ping 77.88.8.1 count=3 interface=интерфейс с адресом 83.220.110.XXX];
/if ($ping >= 2) do={/ip route enable [find dst-address=0.0.0.0/0 and gateway=83.220.110.1]};
/if ($ping <= 1) do={/ip route disable [find dst-address=0.0.0.0/0 and gateway=83.220.110.1]};

Share this post


Link to post
Share on other sites

отключает только этот маршрут

A S  0.0.0.0/0                         81.177.200.9    1         ISP2 out

 

а можно как то шлюз (шлюзы) скриптом выпиливать из этого маршрута ?

A S  0.0.0.0/0                      81.177.200.9    1
                                         83.220.110.1      
                                         83.220.110.1      
                                         83.220.110.1      

Edited by awax

Share this post


Link to post
Share on other sites

отключает только этот маршрут

A S  0.0.0.0/0                         81.177.200.9    1         ISP2 out

 

а можно как то шлюз скриптом выпиливать из этого маршрута ?

A S  0.0.0.0/0                      81.177.200.9    1
                                         83.220.110.1      
                                         83.220.110.1      
                                         83.220.110.1      

 

Конечно.

Сделай к этому маршруту комент (например balance) и по нему вноси изменения

Скрипт 1:

:local ping [/ping 77.88.8.1 count=3 interface=интерфейс с адресом 83.220.110.XXX];
:if ($ping >= 2) do={
/ip route set [find comment="balance"] gateway=83.220.110.1,83.220.110.1,83.220.110.1,81.177.200.9
/ip route enable [find dst-address=0.0.0.0/0 and gateway=83.220.110.1]
}
:if ($ping <= 1) do={
/ip route set [find comment="balance"] gateway=81.177.200.9
/ip route disable [find dst-address=0.0.0.0/0 and gateway=83.220.110.1]
}

 

Скрипт 2:

:local ping2 [/ping 77.88.8.1 count=3 interface=интерфейс с адресом 81.177.200.XXX];
:if ($ping2 >= 2) do={
/ip route set [find comment="balance"] gateway=83.220.110.1,83.220.110.1,83.220.110.1,81.177.200.9
/ip route enable [find dst-address=0.0.0.0/0 and gateway=81.177.200.9]
}
:if ($ping2 <= 1) do={
/ip route set [find comment="balance"] gateway=83.220.110.1,83.220.110.1,83.220.110.1
/ip route enable [find dst-address=0.0.0.0/0 and gateway=81.177.200.9]
}

 

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

Edited by fiskunt

Share this post


Link to post
Share on other sites

сейчас буду тестить

 

вроде работает.... в данный момент не могу первый ISP проверить, но в любом случае ОГРОМНОЕ СПАСИБО за помощь

Edited by awax

Share this post


Link to post
Share on other sites

Зачем вообще маршруты отключать? Есть другие варианты - сделайте 2 маршрута и дайте им метки, в манглах маркируйте трафик по адрес листам или любым способом, при проблемах просто редактируйте правило мангла где маркировка пакетов, что бы исключать прохождение трафика по определенным меткам маршрутов.

Share this post


Link to post
Share on other sites

Зачем вообще маршруты отключать? Есть другие варианты - сделайте 2 маршрута и дайте им метки, в манглах маркируйте трафик по адрес листам или любым способом, при проблемах просто редактируйте правило мангла где маркировка пакетов, что бы исключать прохождение трафика по определенным меткам маршрутов.

Ты вообще читал что написано выше?

Share this post


Link to post
Share on other sites

В одном скрипте:

:local ping1 [/ping 77.88.8.1 count=3 interval=0.2 interface=ISP1];
:local ping2 [/ping 77.88.8.8 count=3 interval=0.2 interface=ISP2];
:if (($ping1 + $ping2) <= 3) do={
:if ($ping1 <= 1) do={
/ip route set [find comment="balance"] gateway=81.177.200.9
/ip route disable [find dst-address=0.0.0.0/0 and gateway=83.220.110.1 and distance >= 1]
/ip route enable [find dst-address=0.0.0.0/0 and gateway=81.177.200.9 and distance >= 1]
} else={
/ip route set [find comment="balance"] gateway=83.220.110.1
/ip route disable [find dst-address=0.0.0.0/0 and gateway=81.177.200.9 and distance >= 1]
/ip route enable [find dst-address=0.0.0.0/0 and gateway=83.220.110.1 and distance >= 1]
}
} else={
/ip route set [find comment="balance"] gateway=83.220.110.1,83.220.110.1,83.220.110.1,81.177.200.9
/ip route enable [find dst-address=0.0.0.0/0 and gateway=81.177.200.9 and distance >= 1]
/ip route enable [find dst-address=0.0.0.0/0 and gateway=83.220.110.1 and distance >= 1]
};

 

Интервал пингов уменьшен до 200мс дабы ускорить скрипт. Время работы менее 2 секунд

Share this post


Link to post
Share on other sites

В довершение для тех кому интересно тот же скрипт но с оповещением на емейл о падении канала.

 

:global my васяпупкин@gmail.com;
:local ping1 [/ping 77.88.8.1 count=3 interval=0.2 interface=ISP1];
:local ping2 [/ping 77.88.8.8 count=3 interval=0.2 interface=ISP2];
:if (($ping1 + $ping2) <= 3) do={
:if ($ping1 <= 1) do={
/ip route set [find comment="balance"] gateway=81.177.200.9
/ip route disable [find dst-address=0.0.0.0/0 and gateway=83.220.110.1 and distance >= 1]
/ip route enable [find dst-address=0.0.0.0/0 and gateway=81.177.200.9 and distance >= 1]
/tool e-mail send server=74.125.136.109 port=587 user=$my password=password start-tls=yes to=$my from=$my subject=Mikrotik body="Upal kanal nomer 1"
} else={
/ip route set [find comment="balance"] gateway=83.220.110.1
/ip route disable [find dst-address=0.0.0.0/0 and gateway=81.177.200.9 and distance >= 1]
/ip route enable [find dst-address=0.0.0.0/0 and gateway=83.220.110.1 and distance >= 1]
/tool e-mail send server=74.125.136.109 port=587 user=$my password=password start-tls=yes to=$my from=$my subject=Mikrotik body="Upal kanal nomer 2"
}
} else={
/ip route set [find comment="balance"] gateway=83.220.110.1,83.220.110.1,83.220.110.1,81.177.200.9
/ip route enable [find dst-address=0.0.0.0/0 and gateway=81.177.200.9 and distance >= 1]
/ip route enable [find dst-address=0.0.0.0/0 and gateway=83.220.110.1 and distance >= 1]
};

 

Настройки сервера указаны для гугловской почты gmail.com

Если у вас включена двухэтапная аутентификация то для микротика надо создать специальный пароль в настройках почты. Вот здесь: https://security.google.com/settings/security/apppasswords

Edited by fiskunt

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.