Настройка на RB751 резервного провайдера

Обсуждение ПО и его настройки
Ответить
Elektronik123
Сообщения: 7
Зарегистрирован: 23 дек 2013, 18:43

Mikrotik RB751 (RouterOS v. 5.7)

задача. необходимо сделать резервный канал, переключение на резервный канал в случае падения основного, переключение обратно при понятии основного, отсылка email при переключении, как туда, так и обратно.
в интернете инфы по этому поводу много, но дойти до нее никак не могу...нет, дело не во времени :)) тупо не получается настроить второго провайдера ручками.
первый настроен и успешно функционирует. проблема со вторым. взят роутер yota, который раздает по dhcp настройки. если я получаю на интерфейс, в который воткнута yota, настройки dhcp, которые раздает тот роутер, падает основной канал, при чем с него, изнутри, все пингуется, но из инета пров падает и пинг не идет. основным шлюзом становится yota, и через нее идет трафик.

route print dhcp yota disabled

# DST-ADDRESS PREF-SRC GATEWAY DISTANCE
0 A S ;;; Beeline
0.0.0.0/0 Beeline 1
1 S ;;; yota
0.0.0.0/0 10.0.0.1 2
2 ADC 10.0.0.0/24 10.0.0.40 Yota 0
3 ADC 192.168.0.0/24 192.168.0.251 bridge-local 0
4 ADC 192.168.5.0/24 192.168.5.2 ipip1 0
5 ADC 194.186.*.*/30 194.186.*.* Beeline

route print dhcp yota enabled

# DST-ADDRESS PREF-SRC GATEWAY DISTANCE
0 ADS 0.0.0.0/0 10.0.0.1 0
1 S ;;; Beeline
0.0.0.0/0 Beeline 1
2 S ;;; yota
0.0.0.0/0 Yota 2
3 ADC 10.0.0.0/24 10.0.0.40 Yota 0
4 ADC 192.168.0.0/24 192.168.0.251 bridge-local 0
5 ADC 192.168.5.0/24 192.168.5.2 ipip1 0
6 ADC 194.186.*.*/30 194.186.*.* Beeline 0

ip firewall nat print
Flags: X - disabled, I - invalid, D - dynamic
0 chain=dstnat action=dst-nat to-addresses=192.168.0.245 to-ports=3389
protocol=tcp in-interface=Beeline dst-port=3389

1 ;;; default configuration
chain=srcnat action=masquerade out-interface=Beeline

2 chain=srcnat action=masquerade out-interface=Yota

ip address print dhcp yota disabled

# ADDRESS NETWORK INTERFACE
0 ;;; default configuration
192.168.0.251/24 192.168.0.0 bridge-local
1 192.168.5.2/24 192.168.5.0 ipip1
2 194.186.*.*/30 194.186.*.* Beeline
3 ;;; yota internet
10.0.0.40/24 10.0.0.0 Yota

ip address print dhcp yota enabled
Flags: X - disabled, I - invalid, D - dynamic
# ADDRESS NETWORK INTERFACE
0 ;;; default configuration
192.168.0.251/24 192.168.0.0 bridge-local
1 192.168.5.2/24 192.168.5.0 ipip1
2 194.186.*.*/30 194.186.*.* Beeline
3 ;;; yota internet
10.0.0.40/24 10.0.0.0 Yota
4 D 10.0.0.41/24 10.0.0.0 Yota

для начала, необходимо настроить интерфейс yota ручками, без dhcp, что бы он автоматом не цеплялся как основной шлюз, и с интерфейса yota пинговался инет.
когда подключен dhcр yota, пингуется с интерфейса билайн и с интерфейса yota, инет идет через йоту, из вне билайн не пингуется. когда dhcp yota отключен, с йоты не пингуется инет, но пингуется шлюз йоты (10.0.0.1), и билайн работает в обе стороны нормально.
вот собственно первый вопрос, что я не так делаю, не могу понять, голова кипит (или это не голова, а просто чайник, я хз :) ), где что я упустил.

жду ответов и вопросов. спасибо за участие.

и еще один вопрос. как пинговать с определенного интерфейса через консоль? утилиту пинг открывает только одну, получается пинговать только с одного интерфейса, сие весьма не удобно :(


Elektronik123
Сообщения: 7
Зарегистрирован: 23 дек 2013, 18:43

Выставил в настройках dhcp yota distance 3, при включении dhcp yota билайн не упал. значит проблема в шлюзе, через который идет пинг с интерфейса, или в нате надо что то прописать...я так думаю :) только уже голова не думает что думать.
с интерфейса yota с такими настройками так и не пингуется.

ip route print
Flags: X - disabled, A - active, D - dynamic,
C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme,
B - blackhole, U - unreachable, P - prohibit
# DST-ADDRESS PREF-SRC GATEWAY DISTANCE
0 A S ;;; Beeline
0.0.0.0/0 Beeline 1
1 S ;;; yota
0.0.0.0/0 10.0.0.1 2
2 DS 0.0.0.0/0 10.0.0.1 3
3 ADC 10.0.0.0/24 10.0.0.40 Yota 0
4 ADC 192.168.0.0/24 192.168.0.251 bridge-local 0
5 ADC 192.168.5.0/24 192.168.5.2 ipip1 0
6 ADC 194.186.*.*/30 194.186.*.* Beeline 0

ip dhcp-client print
Flags: X - disabled, I - invalid
# INTERFACE USE-PEER-DNS ADD-DEFAULT-ROUTE STATUS ADDRESS
0 ;;; default configuration
Beeline yes yes searching...
1 Yota yes yes bound 10.0.0.41/24

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


Elektronik123
Сообщения: 7
Зарегистрирован: 23 дек 2013, 18:43

ага, ушел, как же. при переключении метрик вручную (distance) на шлюзах в routes, би меняем на 2, йоту на 1, инет идет через йоту и пинугется соответственно через нее, би из инета не виден. если отключаю dhcp, переключаю метрики, с йоты снова не пингуется. движение есть. только пока не понимаю куда :(

теперь точно пойду :)


Аватара пользователя
simpl3x
Модератор
Сообщения: 1532
Зарегистрирован: 19 апр 2012, 14:03

что значит "падает"? фактический разрыв соединения? или все таки трафик перестает ходить так как надо?
тут для начала надо разделить задачи:
1. входящие соединения
2. исходящие соединения

по первому пункту, это не совсем failover, т.е. резервирование канала, это называется pbr (policy based routing):
чтобы у вас из вне все было доступно при любом количестве подключенных каналов, надо пакеты прилетевшие на один интерфейс отправлять их через тот же. это делается с помощью routing mark (route table) примерно так viewtopic.php?p=11415#p11415 (со слов Вопрос подключения к самому роутеру решается там же банальной маркировкой соединений)

по второму пункту, вы на верном направлении - метрики, НО тут есть НО. суть в том, что метрики для резервирования канала будут работать только если маршрут с меньшей метрикой становится не активен. почему он может стать не активным - рвется соедиенение и он пропадает из таблицы маршрутов, или становится недоступным шлюз (если соединение статичное). НО бывает так, что интерфейс в апе, шлюз пингуется, но интернета нет, т.е. проблема где то дальше. в таком случае есть два варианта решения проблемы, в вашем случае - скрипт который пингует какой то хост через разные аплинки, и по делает выводы о доступности каналов, выставляя нужные метрики. пример: http://www.pvsm.ru/sistemnoe-administrirovanie/5083


Elektronik123
Сообщения: 7
Зарегистрирован: 23 дек 2013, 18:43

Смотрю, пытаюсь дойти, как затуплю снова, отпишусь. спасибо за ответ.


Elektronik123
Сообщения: 7
Зарегистрирован: 23 дек 2013, 18:43

настроить интерфейс yota ручками так и не удалось, в чем проблема, так и не понял, но за счет скрипта определения ip это уже не важно.

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

 
:global MainIf
:global RsrvIf
:global MainIfAddress
:global RsrvIfAddress

:local PingCount 3

#www.ru
:local PingTarget1 194.87.0.50

#ya.ru
:local PingTarget2 87.250.250.203

#google dns
:local PingTarget3 8.8.8.8

#Check main internet connection
:local MainIfInetOk false;

if ($MainIfAddress="") do={delay 5}

if ($MainIfAddress!="") do={
:local PingResult1 [/ping $PingTarget1 count=$PingCount interface=$MainIf]
:local PingResult2 [/ping $PingTarget2 count=$PingCount interface=$MainIf]
:local PingResult3 [/ping $PingTarget3 count=$PingCount interface=$MainIf]

:set MainIfInetOk (($PingResult1 + $PingResult2 + $PingResult3) >= (2 * $PingCount))
}

#Check reserved internet connection
:local RsrvIfInetOk false;

if ($RsrvIfAddress="") do={delay 5}

if ($RsrvIfAddress!="") do={
:local PingResult1 [/ping $PingTarget1 count=$PingCount interface=$RsrvIf]
:local PingResult2 [/ping $PingTarget2 count=$PingCount interface=$RsrvIf]
:local PingResult3 [/ping $PingTarget3 count=$PingCount interface=$RsrvIf]

:set RsrvIfInetOk (($PingResult1 + $PingResult2 + $PingResult3) >= (2 * $PingCount))
}

:put "MainIfInetOk=$MainIfInetOk"
:put "RsrvIfInetOk=$RsrvIfInetOk"

if (!$MainIfInetOk) do={
/log error "Main internet connection error"
}

if (!$RsrvIfInetOk) do={
/log error "Reserve internet connection error"
}

:local MainGWDistance [/ip route get [find comment="MainGW"] distance]
:local RsrvGWDistance [/ip route get [find comment="RsrvGW"] distance]
:put "MainGWDistance=$MainGWDistance"
:put "RsrvGWDistance=$RsrvGWDistance"

#SetUp gateways
if ($MainIfInetOk && ($MainGWDistance >= $RsrvGWDistance)) do={
/ip route set [find comment="MainGW"] distance=1
/ip route set [find comment="RsrvGW"] distance=2
/log info "Switch to main internet connection"
}

if (!$MainIfInetOk && $RsrvIfInetOk && ($MainGWDistance <= $RsrvGWDistance)) do={
/ip route set [find comment="MainGW"] distance=2
/ip route set [find comment="RsrvGW"] distance=1
/log warning "Switch to reserve internet connection"

взято по ссылке выше, немного переделано под себя.

есть еще один скрипт, который тоже работает.

 
{:local smtpserv [:resolve "mail.***.ru"];
:local Eaccount "admin@**.ru";
:local Toaccaunt "***@***.ru";
:local pass "***";

/tool e-mail send from="<$Eaccount>" to=$Toaccaunt server=$smtpserv \ port=25 user=$Eaccount password=$pass tls=no subject=("Beeline is DOWN . ") \ body=("Beeline is down, Set routes to Yota.\nRouterOS version: \nTime and Date stamp: " . [/system clock get time] . " " . \ [/system clock get date]);


/tool e-mail send from="<$Eaccount>" to=$Eaccount server=$smtpserv \ port=25 user=$Eaccount password=$pass tls=no subject=("Beeline поднялся . ") \ body=("Beeline is UP, Beeline is down, Set routes to Beeline.\nRouterOS version: \nTime and Date stamp: " . [/system clock get time] . " " . \ [/system clock get date]);}


куда и как вставить в основной скрипт отсылку почты? и куда засунуть переменные? надо сделать их глобал или локал? если локал, их вставить в объявление переменных в начале скрипта или в другом месте? и куда вставлять строчки отправки емаил?
мой вариант, по идее правильный, как я думал :) но почта не идет. может я где запятую не поставил или еще что...подскажите, как будет правильно и где я ошибся.
 
:global MainIf
:global RsrvIf
:global MainIfAddress
:global RsrvIfAddress

:local smtpserv [:resolve "mail.***.ru"];
:local Eaccount "admin@***.ru";
:local Toaccaunt "***@***.ru";
:local pass "***";

:local PingCount 3

#www.ru
:local PingTarget1 194.87.0.50

#ya.ru
:local PingTarget2 87.250.250.203

#google dns
:local PingTarget3 8.8.8.8

#Check main internet connection
:local MainIfInetOk false;

if ($MainIfAddress="") do={delay 5}

if ($MainIfAddress!="") do={
:local PingResult1 [/ping $PingTarget1 count=$PingCount interface=$MainIf]
:local PingResult2 [/ping $PingTarget2 count=$PingCount interface=$MainIf]
:local PingResult3 [/ping $PingTarget3 count=$PingCount interface=$MainIf]

:set MainIfInetOk (($PingResult1 + $PingResult2 + $PingResult3) >= (2 * $PingCount))
}

#Check reserved internet connection
:local RsrvIfInetOk false;

if ($RsrvIfAddress="") do={delay 5}

if ($RsrvIfAddress!="") do={
:local PingResult1 [/ping $PingTarget1 count=$PingCount interface=$RsrvIf]
:local PingResult2 [/ping $PingTarget2 count=$PingCount interface=$RsrvIf]
:local PingResult3 [/ping $PingTarget3 count=$PingCount interface=$RsrvIf]

:set RsrvIfInetOk (($PingResult1 + $PingResult2 + $PingResult3) >= (2 * $PingCount))
}

:put "MainIfInetOk=$MainIfInetOk"
:put "RsrvIfInetOk=$RsrvIfInetOk"

if (!$MainIfInetOk) do={
/log error "Main internet connection error"
}

if (!$RsrvIfInetOk) do={
/log error "Reserve internet connection error"
}

:local MainGWDistance [/ip route get [find comment="MainGW"] distance]
:local RsrvGWDistance [/ip route get [find comment="RsrvGW"] distance]
:put "MainGWDistance=$MainGWDistance"
:put "RsrvGWDistance=$RsrvGWDistance"

#SetUp gateways
if ($MainIfInetOk && ($MainGWDistance >= $RsrvGWDistance)) do={
/ip route set [find comment="MainGW"] distance=1
/ip route set [find comment="RsrvGW"] distance=2
/log info "Switch to main internet connection"
/tool e-mail send from="<$Eaccount>" to=$Eaccount server=$smtpserv \ port=25 user=$Eaccount password=$pass tls=no subject=("Beeline is UP . ") \ body=("Beeline is UP, Set routes to Beeline.\nRouterOS version: \nTime and Date stamp: " . [/system clock get time] . " " . \ [/system clock get date]);
}

if (!$MainIfInetOk && $RsrvIfInetOk && ($MainGWDistance <= $RsrvGWDistance)) do={
/ip route set [find comment="MainGW"] distance=2
/ip route set [find comment="RsrvGW"] distance=1
/log warning "Switch to reserve internet connection"
/tool e-mail send from="<$Eaccount>" to=$Toaccaunt server=$smtpserv \ port=25 user=$Eaccount password=$pass tls=no subject=("Beeline is DOWN . ") \ body=("Beeline is down, Set routes to Yota.\nRouterOS version: \nTime and Date stamp: " . [/system clock get time] . " " . \ [/system clock get date]);


в моем варианте по поводу емаил в логах даже ничего не пишет. (логирование емыльных дел включено).


Elektronik123
Сообщения: 7
Зарегистрирован: 23 дек 2013, 18:43

тема не закрыта...а воз и ныне там :(


Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Почему у Вас 25 порт, я не знаю, у меня на Гмайле 587, на другие почты надо смотреть. Вот кусок из рабочего (полтора года уже пашет) скрипта:

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

 /tool e-mail send from="<$Eaccount>" to=$Eaccount server=$smtpserv port=587 user=$Eaccount password=$pass start-tls=yes file=$f subject=( ..........................................)

Скрипт проверить не могу по той причине, что мне нечего переключать, у меня один провайдер. Но кода у Вас кусок приличный, я бы его подсократил, вынеся половину в другие скрипты просто чтобы не гадать, что не срабатывает. Хотя, если опыт написания есть, можно и этот один отладить


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Аватара пользователя
simpl3x
Модератор
Сообщения: 1532
Зарегистрирован: 19 апр 2012, 14:03

podarok66 писал(а):Почему у Вас 25 порт, я не знаю, у меня на Гмайле 587

это равнозначные порты, везде smtp.


Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Ну тогда там разницы только в том, что у меня параметр start-tls=yes, а у ТС просто tls=no


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Ответить