Резервирование канала связи
Окопы вырыли? Пора идти в атаку! :)
Резервирование канала связи
Дано: связаны две сети выделенным каналом. Внутри сетей есть сервера,
которым надо обмениваться данными. Сети принадлежат разным организациям.
Требование: в случае, сбоя на выделенной линии - востановить связь по дозвону.
При восстановлении связи - повесить трубку.
Server1, Server2, Server4 - Windows 2000 (хотя наверное неважно)
Server3 - IBM OS/2 WSeB, а это важно :)
Настройка TCP/IP серверов понятна из рисунка.
На Server2 требуются следующие настройки:
и
А теперь настраиваем OS/2:
x:\MPTN\BIN\setup.cmd
-------cut--------
ifconfig lan0 10.2.0.1 netmask 255.255.0.0 metric 1 mtu 1492
ifconfig lan1 10.1.0.2 netmask 255.255.255.0 metric 1 mtu 1492
route add default 10.1.0.1 -hopcount 1
ipgate on
-------cut--------
И самое, надеюсь, интересное. Запускаем скрипт на REXX:
-------cut--------
/* */
call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
call SysLoadFuncs
rc = RxFuncAdd("FtpLoadFuncs","rxFtp","FtpLoadFuncs")
rc = FtpLoadFuncs()
call SysCls
call SysCurState OFF
server2='10.1.0.1'
server1='10.0.0.2'
server4='10.2.0.2'
count_err=2 /* количество повторенных подряд ошибок до переключения */
sys.log = "dial.log"
a=0
ppp_enable1=0
ppp_enable2=0
errors=0
rc = stream( sys.log, "c", "open write" )
r=SysCurPos(1,1)
say "Работа по ОСНОВНОМУ каналу - Старт :" date() time()
rn = lineout( sys.log, date() time() "- программа запущена" )
r=SysCurPos(5,1)
say "Контрольные узлы"
do a=1
serv1 = FtpPing(server1,64)
serv2 = FtpPing(server2,64)
serv4 = FtpPing(server4,64)
r=SysCurPos(8,1)
if DATATYPE(serv4)="NUM" then
say "Мой внутренний сервер:" time() "-" server4 "-" serv "msec"
else
say "Мой внутренний сервер:" time() "-" server4 "- НЕТ ОТВЕТА"
r=SysCurPos(9,1)
if DATATYPE(serv1)="NUM" then
say "Удаленный сервер:" time() "-" server1 "-" serv "msec"
else
say "Удаленный сервер:" time() "-" server1 "- НЕТ ОТВЕТА"
r=SysCurPos(13,1)
if DATATYPE(serv2)="NUM" then do
say "Чужой шлюз:" time() "-" server2 "-" rc "msec"
ppp_enable1=0
errors=0
end
else do
errors=errors+1
say "Чужой шлюз:" time() "-" server2 "- НЕТ ОТВЕТА - ошибка N" errors
ppp_enable1=1
end
if errors > count_err then
if ppp_enable1=1 & ppp_enable2=0 then do
ppp_enable2=1
'start /C' startppp.cmd /* старт программы дозвона */
call SysCls
call SysCurState OFF
r=SysCurPos(1,1)
say "Работа по РЕЗЕРВНОМУ каналу - Старт :" date() time()
rn = lineout( sys.log, date() time() "- переключение на резервный канал" )
r=SysCurPos(5,1)
say "Контрольные узлы"
end
if ppp_enable1=0 & ppp_enable2=1 then do
ppp_enable2=0
'start /C' stop_ppp.cmd /* стоп программы дозвона */
call SysCls
call SysCurState OFF
r=SysCurPos(1,1)
say "Работа по ОСНОВНОМУ каналу - Старт :" date() time()
rn = lineout( sys.log, date() time() "- переключение на основной канал")
r=SysCurPos(5,1)
say "Контрольные узлы"
end
rc=SysSleep(30) /* время ожидания перед следующим опросом */
end
rc = stream( sys.log, "c", "close" )
exit
-------cut--------
Пример лога работы этого скрипта:
-------cut--------
15 Jan 2003 16:46:11 - программа запущена
15 Jan 2003 16:46:33 - переключение на резервный канал
15 Jan 2003 16:46:56 - переключение на основной канал
-------cut--------
В качестве программы дозвона я использую SafeFirePPP, но проверял также и с InJoj. Пример файлов START_PPP.CMD (для SafeFire):
-------cut--------
x:\SafeFire\bin\sfppp.exe -Cx:\SafeFire\config\myconfig.cfg
-------cut--------
и STOP_PPP.CMD
-------cut--------
x:\SafeFire\bin\sfkill.exe
-------cut--------
по настройке SafeFire отсылаю Вас к егойной документации, скажу только
что Defaul Gatewey на осевом сервере после дозвона ДОЛЖЕН МЕНЯТСЯ. NAT
не используется.
P.S. Надеюсь это не стоя в лыжах в гамаке.
Ваш Роман Попов
Интересные ссылки:
Комментариев к странице: 0 | Добавить комментарий
Домой | Проект ядро Core/2 | Проект OS/4 Download | Новости | Гостевая книга | Подробно обо всем | Нужные программы | Проекты | OS/2 FAQ | Всячина | За и Против | Металлолом | #OS2Russian | RDM/2 | Весёлые картинки | Наша галерея | Доска объявлений | Карта сайта | ПОИСК | ФОРУМ