ECMP и резервирование (скрипт)
Добавлено: 02 окт 2017, 12:19
Использую ECMP балансировку двух провайдеров pppoe:
Если один pppoe канал падает, ECMP автоматом переключает на рабочий маршрут.
Но иногда pppoe соединение установлено, а интернета нет. ECMP такое не замечает.
Для решения данной проблемы написал скрипт, который изменяет маршрут по умолчанию,
если нет интернета:
Запускается через scheduler каждые 10 минут.
Код: Выделить всё
/ip route add check-gateway=ping comment=ECMP distance=1 gateway=pppoe-domru,pppoe-rtk
Если один pppoe канал падает, ECMP автоматом переключает на рабочий маршрут.
Но иногда pppoe соединение установлено, а интернета нет. ECMP такое не замечает.
Для решения данной проблемы написал скрипт, который изменяет маршрут по умолчанию,
если нет интернета:
Код: Выделить всё
#проверяем, подняты ли pppoe
:local DOMRUrun [/interface pppoe-client get pppoe-domru running]
:local RTKrun [/interface pppoe-client get pppoe-rtk running]
#выполняется, только если оба pppoe канала подняты, иначе ECMP само справляется
if ($DOMRUrun=true && $RTKrun=true) do={
#пингуем ya.ru через каждое pppoe соединение
:local pingresRTK [/ping 87.250.250.242 count=3 interface=pppoe-rtk];
:local pingresDOMRU [/ping 87.250.250.242 count=3 interface=pppoe-domru];
#какой должен быть gateway
:local gateway "pppoe-domru;pppoe-rtk"
:if ($pingresDOMRU>0 && $pingresRTK=0) do={
:set $gateway "pppoe-domru"
} else={
:if ($pingresDOMRU=0 && $pingresRTK>0) do={
:set $gateway "pppoe-rtk" }
}
#проверяем текущий gateway
:local currentgateway [/ip route get [find comment="ECMP"] gateway]
:if ($currentgateway!=$gateway) do={
#устанавливаем необходимый gateway
/ip route set gateway=$gateway [find comment="ECMP"];
:log info "gateway is changing: $gateway";
}
}
Запускается через scheduler каждые 10 минут.