Данная конфигурация поможет в случае если шлюз оператора отвечает с высокими задержками или не отвечает совсем, но при этом трафик по каналу ходит без проблем.
Стандартные средства RouterOS позволяют добавить только один IP адрес для проверки с использованием wathcdog. В приведенном скрипте тестируются 3 адреса, адреса могут принадлежать оператору или просто существовать в сети Интернет.
Данная статья не претендует на оригинальность, частично конфигурация взята из сети Интернет и доработана с учетом того что порт в сторону оператора может не упасть, а связь будет отсутствовать (например проблема с vlan).
Конфигурация и работа скрипта проверялась на MikroTik RouterOS 6.35.4
Содержание :
1. Готовим конфигурацию.
2. Готовим скрипт.
3. Включаем скрипт в работу.
Данная конфигурация позволит получить доступ к устройству из сети Интернет на адреса выданные оператором.
В примере используется приватная адресация.
Определим интерфейсы :
ether1 - сеть оператора 1
ether3 - сеть оператора 2
ether2 - смотрит в LAN
Оба оператора предоставляют статические IP адреса:
Оператор 1
IP 10.67.0.51
Маска 255.255.255.0
Шлюз 10.67.0.51
Оператор 2
IP 10.196.0.51
Маска 255.255.255.0
Шлюз 10.196.0.1
Адресация LAN 192.168.88.0/24 (конфигурация из коробки)
Удаляем порт 3 из бриджа:
interface bridge port print
interface bridge port remove 2
ip address add address=10.67.0.51/24 interface=ether1 network=10.67.0.0
ip address add address=10.196.1.51/24 interface=ether3 network=10.196.1.0
Настраиваем firewall для того чтобы ответ уходил с того же адреса на который прилетел пакет:
ip firewall mangle add action=mark-connection chain=input in-interface=ether1 new-connection-mark=ISP1
ip firewall mangle add action=mark-routing chain=output connection-mark=ISP1 new-routing-mark=ISP1_out passthrough=no
ip firewall mangle add action=mark-connection chain=input in-interface=ether3 new-connection-mark=ISP2
ip firewall mangle add action=mark-routing chain=output connection-mark=ISP2 new-routing-mark=ISP2_out passthrough=no
Добавляем маршруты для операторов (важно наличие comment):
ip route add comment=ISP2GW distance=2 gateway=10.196.1.1
ip route add comment=ISP1GW distance=1 gateway=10.67.0.1
Добавляем маршруты и правила для корректной отработки скрипта:
ip route add comment=ISP1CHECK distance=1 gateway=10.67.0.1 routing-mark=ISP1_out
ip route add comment=ISP2CHECK distance=2 gateway=10.196.1.1 routing-mark=ISP2_out
Изменяем правило NAT
ip firewall nat remove 0
ip firewall nat add action=masquerade chain=srcnat comment="masquerade" src-address=192.168.88.0/24
На этом всё, настройка завершена. Теперь управление Mikrotik доступно по обоим адресам и основным каналом выбран ISP1
В Winbox переходим System > Script
В появившемся окне нажимаем "+"
Появится окно :
В этом окне в поле Name вписываем название скрипта.
В поле Source копируем сам скрипт . После чего нажимаем OK.
Скрипт :
В скрипте необходимо изменить значения IPDST1 , IPDST2 , IPDST3 - это адреса для проверки.
# ISP check script
#
# Change ander this line
:local IPaddISP1 10.67.0.51
:local IPaddISP2 10.196.1.51
:local IPDST1 8.8.8.8
:local IPDST2 8.8.4.4
:local IPDST3 172.16.0.1
# Stop change after this line
:local PingTarget1 $IPDST1
:local PingTarget2 $IPDST2
:local PingTarget3 $IPDST3
:local PingTarget4 $IPDST1
:local PingTarget5 $IPDST2
:local PingTarget6 $IPDST3
:local PingCount 2
# Check ISP1
:local ISP1 false;
:local PingResult1 [/ping $PingTarget1 count=$PingCount src-address=$IPaddISP1]
:local PingResult2 [/ping $PingTarget2 count=$PingCount src-address=$IPaddISP1]
:local PingResult3 [/ping $PingTarget3 count=$PingCount src-address=$IPaddISP1]
:set ISP1 (($PingResult1 + $PingResult2 + $PingResult3) >= (2 * $PingCount))
# Check ISP2
:local ISP2 false;
:local PingResult4 [/ping $PingTarget4 count=$PingCount src-address=$IPaddISP2]
:local PingResult5 [/ping $PingTarget5 count=$PingCount src-address=$IPaddISP2]
:local PingResult6 [/ping $PingTarget6 count=$PingCount src-address=$IPaddISP2]
:set ISP2 (($PingResult4 + $PingResult5 + $PingResult6) >= (2 * $PingCount))
:put "ISP1=$ISP1"
:put "ISP2=$ISP2"
if (!$ISP1) do={
/log error "ISP1 internet connection error"
}
if (!$ISP2) do={
/log error "ISP2 internet connection error"
}
:local ISP1GWDistance [/ip route get [find comment="ISP1GW"] distance]
:local ISP2GWDistance [/ip route get [find comment="ISP2GW"] distance]
:put "ISP1GWDistance=$ISP1GWDistance"
:put "ISP2GWDistance=$ISP2GWDistance"
#SetUp gateways
if ($ISP1 && ($ISP1GWDistance >= $ISP2GWDistance)) do={
/ip route set [find comment="ISP1GW"] distance=1
/ip route set [find comment="ISP2GW"] distance=2
/log info "Switch to ISP1 internet connection"
/ip firewall connection tracking set enabled=no
:delay 1s
/ip firewall connection tracking set enabled=yes
}
if (!$ISP1 && $ISP2 && ($ISP1GWDistance <= $ISP2GWDistance)) do={
/ip route set [find comment="ISP1GW"] distance=2
/ip route set [find comment="ISP2GW"] distance=1
/log warning "Switch to ISP2 internet connection"
/ip firewall connection tracking set enabled=no
:delay 1s
/ip firewall connection tracking set enabled=yes
}
Стандартные средства RouterOS позволяют добавить только один IP адрес для проверки с использованием wathcdog. В приведенном скрипте тестируются 3 адреса, адреса могут принадлежать оператору или просто существовать в сети Интернет.
Данная статья не претендует на оригинальность, частично конфигурация взята из сети Интернет и доработана с учетом того что порт в сторону оператора может не упасть, а связь будет отсутствовать (например проблема с vlan).
Конфигурация и работа скрипта проверялась на MikroTik RouterOS 6.35.4
Содержание :
1. Готовим конфигурацию.
2. Готовим скрипт.
3. Включаем скрипт в работу.
1. Готовим конфигурацию
Данная конфигурация позволит получить доступ к устройству из сети Интернет на адреса выданные оператором.
В примере используется приватная адресация.
Определим интерфейсы :
ether1 - сеть оператора 1
ether3 - сеть оператора 2
ether2 - смотрит в LAN
Оба оператора предоставляют статические IP адреса:
Оператор 1
IP 10.67.0.51
Маска 255.255.255.0
Шлюз 10.67.0.51
Оператор 2
IP 10.196.0.51
Маска 255.255.255.0
Шлюз 10.196.0.1
Адресация LAN 192.168.88.0/24 (конфигурация из коробки)
Конфигурируем интерфейсы:
Удаляем порт 3 из бриджа:
interface bridge port print
interface bridge port remove 2
Конфигурируем IP адреса:
ip address add address=10.67.0.51/24 interface=ether1 network=10.67.0.0
ip address add address=10.196.1.51/24 interface=ether3 network=10.196.1.0
Настраиваем firewall для того чтобы ответ уходил с того же адреса на который прилетел пакет:
ip firewall mangle add action=mark-connection chain=input in-interface=ether1 new-connection-mark=ISP1
ip firewall mangle add action=mark-routing chain=output connection-mark=ISP1 new-routing-mark=ISP1_out passthrough=no
ip firewall mangle add action=mark-connection chain=input in-interface=ether3 new-connection-mark=ISP2
ip firewall mangle add action=mark-routing chain=output connection-mark=ISP2 new-routing-mark=ISP2_out passthrough=no
Добавляем маршруты для операторов (важно наличие comment):
ip route add comment=ISP2GW distance=2 gateway=10.196.1.1
ip route add comment=ISP1GW distance=1 gateway=10.67.0.1
Добавляем маршруты и правила для корректной отработки скрипта:
ip route add comment=ISP1CHECK distance=1 gateway=10.67.0.1 routing-mark=ISP1_out
ip route add comment=ISP2CHECK distance=2 gateway=10.196.1.1 routing-mark=ISP2_out
ip route rule add src-address=10.196.1.51/32 table=ISP2_out
ip route rule add src-address=10.67.0.51/32 table=ISP1_out
Изменяем правило NAT
ip firewall nat remove 0
ip firewall nat add action=masquerade chain=srcnat comment="masquerade" src-address=192.168.88.0/24
На этом всё, настройка завершена. Теперь управление Mikrotik доступно по обоим адресам и основным каналом выбран ISP1
Готовим скрипт.
В Winbox переходим System > Script
В появившемся окне нажимаем "+"
Появится окно :
В этом окне в поле Name вписываем название скрипта.
В поле Source копируем сам скрипт . После чего нажимаем OK.
Скрипт :
В скрипте необходимо изменить значения IPDST1 , IPDST2 , IPDST3 - это адреса для проверки.
# ISP check script
#
# Change ander this line
:local IPaddISP1 10.67.0.51
:local IPaddISP2 10.196.1.51
:local IPDST1 8.8.8.8
:local IPDST2 8.8.4.4
:local IPDST3 172.16.0.1
# Stop change after this line
:local PingTarget1 $IPDST1
:local PingTarget2 $IPDST2
:local PingTarget3 $IPDST3
:local PingTarget4 $IPDST1
:local PingTarget5 $IPDST2
:local PingTarget6 $IPDST3
:local PingCount 2
# Check ISP1
:local ISP1 false;
:local PingResult1 [/ping $PingTarget1 count=$PingCount src-address=$IPaddISP1]
:local PingResult2 [/ping $PingTarget2 count=$PingCount src-address=$IPaddISP1]
:local PingResult3 [/ping $PingTarget3 count=$PingCount src-address=$IPaddISP1]
:set ISP1 (($PingResult1 + $PingResult2 + $PingResult3) >= (2 * $PingCount))
# Check ISP2
:local ISP2 false;
:local PingResult4 [/ping $PingTarget4 count=$PingCount src-address=$IPaddISP2]
:local PingResult5 [/ping $PingTarget5 count=$PingCount src-address=$IPaddISP2]
:local PingResult6 [/ping $PingTarget6 count=$PingCount src-address=$IPaddISP2]
:set ISP2 (($PingResult4 + $PingResult5 + $PingResult6) >= (2 * $PingCount))
:put "ISP1=$ISP1"
:put "ISP2=$ISP2"
if (!$ISP1) do={
/log error "ISP1 internet connection error"
}
if (!$ISP2) do={
/log error "ISP2 internet connection error"
}
:local ISP1GWDistance [/ip route get [find comment="ISP1GW"] distance]
:local ISP2GWDistance [/ip route get [find comment="ISP2GW"] distance]
:put "ISP1GWDistance=$ISP1GWDistance"
:put "ISP2GWDistance=$ISP2GWDistance"
#SetUp gateways
if ($ISP1 && ($ISP1GWDistance >= $ISP2GWDistance)) do={
/ip route set [find comment="ISP1GW"] distance=1
/ip route set [find comment="ISP2GW"] distance=2
/log info "Switch to ISP1 internet connection"
/ip firewall connection tracking set enabled=no
:delay 1s
/ip firewall connection tracking set enabled=yes
}
if (!$ISP1 && $ISP2 && ($ISP1GWDistance <= $ISP2GWDistance)) do={
/ip route set [find comment="ISP1GW"] distance=2
/ip route set [find comment="ISP2GW"] distance=1
/log warning "Switch to ISP2 internet connection"
/ip firewall connection tracking set enabled=no
:delay 1s
/ip firewall connection tracking set enabled=yes
}
Включаем скрипт в работу:
Переходим System > Scheduler
В появившемся окне заполняем поля как на скриншоте:
Итог.
Скрипт будет проверять работу основного канала 1 раз в 1 минуту.
В случае проблемы на основном канале скрипт - переключит на резервный канал и отпишется в логе.
В случае восстановления основного канала - переключит обратно и отпишется в логе.
Комментариев нет:
Отправить комментарий