Резервирование канала связи


Окопы вырыли? Пора идти в атаку! :)

Резервирование канала связи

Дано: связаны две сети выделенным каналом. Внутри сетей есть сервера, которым надо обмениваться данными. Сети принадлежат разным организациям.
Требование: в случае, сбоя на выделенной линии - востановить связь по дозвону. При восстановлении связи - повесить трубку.



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 | Весёлые картинки | Наша галерея | Доска объявлений | Карта сайта | ПОИСК | ФОРУМ