Обеспечить резервирование канала на Win XP

Maxxx

420244
Реєстрація
01.12.08
Місто
Київ
Телефон
iPhone 12 Pro Max
Имеется: файловый серверок на основе XP. К нему подходят 2 инет-канала, основной и резервный - 2 сетевые карты в разных подсетях.

Задача: при пропадании инета (например не пингуется 10 раз подряд хост ukr.net) автоматом перейти на резервный канал. Аналогично, желательно при ответе внешнего адреса основного канала, перескакивать на него обратно, хотя это уже не так критично, смогу сделать и вручную. Само собой, если прописать оба шлюза в настройках TCP/IP, то Винда будет выбирать какой ей вздумается, а надо конкретный.

Хочется сделать это как можно более легким и простым средством, знаю Керио умеет, но он тут явно излишен (машинка слабенькая). Кто сталкивался?
 

Паук

Пивовар
Команда форуму
Реєстрація
27.10.07
Місто
Полтава
Телефон
(M) forever
Ляхко.
Если нет пинга - меняем маршрут и все дела.

Ща попробую наваять скриптик.


Назови его например !autoroute.cmd (только не route, ping - т.е. не используй существущие команды)
choice.com брось рядом со скриптом
Теперь по настройке.
Если на обеих карточках айпишки фиксированные - просто и легко.
На основной должен быть "шлюз по умолчанию", на дополнительной там должно быть пусто (но - ты должен знать дефолтный шлюз резервного канала)
gate=1.2.3.4 - меняй на айпишник шлюза резервного канала.

Логика скрипта: раз в 30 секунд (pause) пингуется google.com.ua (host)
Если пинг есть - идет пауза с надписью [P]ing [R]eroute [E]xit
(Нажав P R или E выполняются соответственные действия)

Если 3 раза (MinPing) не проходят "легкие пинги" с таймаутом до 1000 мс (TimeoutMin), идут "тяжелые пинги" по 10000 мс
Если и они не проходят - дефолтный шлюз меняется на 1.2.3.4 (gate)


Код:
@echo off

set pause=30
set host=google.com.ua
set TimeoutMin=1000
set TimeoutMax=10000
set Try=1
set MinPing=2
set MaxPing=4
set StartCounter=1
set gate=1.2.3.4

rem ***ping****************************
:ping
echo.
echo START PING #%Try%
ping %host% -n 1 -w %TimeoutMin%
if not errorlevel 1 goto ok
set /a Try=%Try%+1
if %Try% gtr %MinPing% goto ForcePing
goto ping
rem ***ping****************************

rem ***Forceping***********************
:ForcePing
echo.
echo START FORCE PING #%Try%
ping %host% -n 1 -w %TimeOutMax%
if not errorlevel 1 goto ok
set /a Try=%Try%+1
if %Try% gtr %MaxPing% goto reroute
goto ForcePing
rem ***Forceping***********************

rem ***reroute*****************************
:reroute
echo.
echo Changing route
route delete 0.0.0.0
route add 0.0.0.0 mask 0.0.0.0 %gate%
echo.
echo Ending script
pause
goto exit
rem ***reroute*****************************


rem ***ok*****************************
:ok
echo.
echo ALL RIGHT
set /a Try=1
goto end
rem ***ok*****************************



rem ***end****************************
:end
set /a Try=1
echo.
choice /C:PRE /T:P,%Pause% /N Pause %Pause%s. [P]ing [R]eroute [E]xit?
rem echo.
rem echo.
goto %ERRORLEVEL%
:1
goto ping
:2
goto reroute
:3
rem ***end****************************

rem ***exit***************************
:exit
rem ***exit***************************


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

Вкладення

  • choice.zip
    3 КБ · Перегляди: 72

Maxxx

420244
Реєстрація
01.12.08
Місто
Київ
Телефон
iPhone 12 Pro Max
Паук, сенкс! Просто и со вкусом :) Единственное, я подумываю, чтобы не использовать только один батник, использовать nncron для запуска секции 'reroute'
 

Menwyy

все четко
Реєстрація
01.07.09
Місто
Киев
Телефон
Nokia E72
Паук, я вот одного момента не понял...пингуем...пинг прошел, усе ок, то идем к ОК , ок у нас выводит олрайт и готу экзит и собсно выход. А где цикл?(опять пинговать) Или я недопонял...? Логично было бы его через определенный таймаут завернуть снова на пинг.
 

Menwyy

все четко
Реєстрація
01.07.09
Місто
Киев
Телефон
Nokia E72
plebis, а где же goto :1? (поправился) :) он выходит, пропускает этот кусок...запусти у себя...
 

Menwyy

все четко
Реєстрація
01.07.09
Місто
Киев
Телефон
Nokia E72
Сделал паузу через пинг локалхоста и завернул куда надо :)...теперь отрабатывает все на ура

Код:
@echo off

set pause=30
set host=google.com.ua
set TimeoutMin=1000
set TimeoutMax=10000
set Try=1
set MinPing=2
set MaxPing=4
set StartCounter=1
set gate=1.2.3.4

rem ***ping****************************
:ping
echo.
echo START PING #%Try%
ping %host% -n 1 -w %TimeoutMin%
if not errorlevel 1 goto ok
set /a Try=%Try%+1
if %Try% gtr %MinPing% goto ForcePing
goto ping
rem ***ping****************************

rem ***Forceping***********************
:ForcePing
echo.
echo START FORCE PING #%Try%
ping %host% -n 1 -w %TimeOutMax%
if not errorlevel 1 goto ok
set /a Try=%Try%+1
if %Try% gtr %MaxPing% goto reroute
goto ForcePing
rem ***Forceping***********************

rem ***reroute*****************************
:reroute
echo.
echo Changing route
route delete 0.0.0.0
route add 0.0.0.0 mask 0.0.0.0 %gate%
echo.
echo Ending script
pause
goto :3
rem ***reroute*****************************


rem ***ok*****************************
:ok
echo.
echo ALL RIGHT
set /a Try=1
ping 127.0.0.1 -n 10
goto ping
rem ***ok*****************************



rem ***end****************************
:end
set /a Try=1
echo.
choice /C:PRE /T:P,%Pause% /N Pause %Pause%s. [P]ing [R]eroute [E]xit?
rem echo.
rem echo.
goto %ERRORLEVEL%
:1
goto ping
:2
goto reroute
:3
rem ***end****************************

rem ***exit***************************
:exit
rem ***exit***************************

Добавлено через 1 минуту
Месье слишком много програмил на бейсике?

не в том суть...если пинг прошел этот кусок кода не задействуется вот и все...
 
Останнє редагування:

Паук

Пивовар
Команда форуму
Реєстрація
27.10.07
Місто
Полтава
Телефон
(M) forever
Паук, я вот одного момента не понял...пингуем...пинг прошел, усе ок, то идем к ОК , ок у нас выводит олрайт и готу экзит и собсно выход. А где цикл?(опять пинговать) Или я недопонял...? Логично было бы его через определенный таймаут завернуть снова на пинг.
айайай
там goto end должно быть

поправил


понял где бяка: вместо того, чтобы исправить :3 на exit (в секции reroute) я исправил goto end на goto exit (в секции ok)

Добавлено через 6 минут
Единственное, я подумываю, чтобы не использовать только один батник, использовать nncron для запуска секции 'reroute'

зачем?
 
Останнє редагування:

Maxxx

420244
Реєстрація
01.12.08
Місто
Київ
Телефон
iPhone 12 Pro Max

Чтобы не путаться с циклами, да и nnCron мне привычен и приятен, стартует сервисом - удобно делать всякие автоматизации на его основе.

Наконец реализовал резервирование, работает. Паук, сенкс за идею!
 
Останнє редагування:

Maxxx

420244
Реєстрація
01.12.08
Місто
Київ
Телефон
iPhone 12 Pro Max
Проблему обратного возврата на основной канал при его поднятии решил следующим образом: раз в 3 часа пингуется внешний IP-адрес (благо он статический, спасибо Трио) и при его ответе ннКрон стартует батник, устанавливающий основной шлюз. Если ничего не пропадало - ну пропишется он же еще раз, ничего страшного, не убудет ))
 

Maxxx

420244
Реєстрація
01.12.08
Місто
Київ
Телефон
iPhone 12 Pro Max
Menwyy, ну доменное имя - то такое, приходяще-уходящее (собирались же наехать на org.ua), и все равно привязано к IP, так что в принципе - какая разница, если статика? :)
 

Kritik

Имею мнение...
Реєстрація
21.09.08
Місто
Odessa <--> Berlin
Я бы привазался через DynDNS или аналогичному - не будет привязки к провайдеру. Но появится привязка к DynDNS ;)
 

Паук

Пивовар
Команда форуму
Реєстрація
27.10.07
Місто
Полтава
Телефон
(M) forever
Проблему обратного возврата на основной канал при его поднятии решил следующим образом:
второй вариант: для 2х айпишек прописать постоянные маршруты через 2 сетки (route -p add _ip_ mask 255.255.255.255 _шлюз_), т.е. на один через одну сетку, на второй - через вторую
И при переключении маршрута на резервный канал периодически пинговать адрес, который идет через основной канал. Если есть ответ - сменить шлюз с резервного на основной
 
Зверху