Re: Freebsd 5.5 multipath routing

From
Eugene Grosbein (2:5006/1)
To
Vassily Kiryanov
Date
2007-01-09T20:46:34Z
Area
RU.UNIX.BSD
Reply-To: eugen@grosbein.pp.ru

09 янв 2007, вторник, в 18:04 KRAST, Vassily Kiryanov написал(а):

 EG>> Чем именно криво 3 (кроме эстетического неудовлетворения)?
 EG>> У меня сейчас в одном месте система работает через три канала
 EG>> одновременно, причем один из них - туннель на серых адресах, который
 EG>> там дальше имеет выход в мир, уже после туннеля, и через NAT.
 VK> А как реализовано? Какие модули/в какой связке?

Не netgraph, а ipfw fwd + скрипт:

#!/bin/sh

PATH=/bin:/sbin:/usr/bin:/usr/sbin

probe() {
  # если еще не тестировали, добавить в список протестированных
  # и протестировать, а если уже тестировали - вернуть истину

  [ "$1" = "$gw1" ] && l=c1
  [ "$1" = "$gw2" ] && l=c2
  [ "$1" = "$gw3" ] && l=c3
  if eval [ -z \"\$$l\" ]; then
    ping -q -c 10 -i 0.3 -t 3 $1 >/dev/null 2>&1
    eval $l=$?
  fi
  eval return \"\$$l\"
}

switch_d() {
  route -q delete default
  route -q add default $1
  echo $0: default route changed to $1
}

select_route() {
  # проверяем маршруты по приоритету
  for g in $defaultrouter $backupdefault $backupdefault2
  do
    # если нашелся живой шлюз
    if probe $g; then
      # если текущий шлюз другой, переключиться на найденный
      [ $gw != $g ] && switch_d $g
      # прекратить перебор
      return
    fi
  done
}

. /etc/rc.conf || exit 1

gw=`route -n get default | awk '/gateway:/ { print $2}'`
if [ "$gw" = '' ]; then
  gw=$defaultrouter
  route add default $gw
  echo $0: no default route, using $gw
fi

select_route
exit 0

Запускать по крону.

Eugene
-- 
Знаете ли вы, что...
Иисус имел не менее 4 братьев и 2 сестер (Матф.13:54)
--- slrn/0.9.8.0 (FreeBSD)
 * Origin: Svyaz Service JSC (2:5006/1@fidonet)
SEEN-BY: 50/12 400/814 450/159 1024 461/43 132 640 469/999 4616/3 4625/8
SEEN-BY: 4641/444 5000/76 5000 5006/1 8 9 14 16 17 5007/1 5010/70 5011/13
SEEN-BY: 5012/46 5015/28 5019/26 5020/18 175 194 400 545 982 1057 1909 1922
SEEN-BY: 5020/2238 2395 2871 4441 5021/29 5025/3 5026/14 45 5027/12 5030/1080
SEEN-BY: 5030/1957 5034/10 13 5035/38 5036/1 5045/7 5049/1 5051/15 5054/1 4 8
SEEN-BY: 5054/9 11 28 35 36 37 45 66 67 70 75 84 85 5059/9 5060/88 5061/15
SEEN-BY: 5062/10 5063/3 5064/7 5066/18 5075/5 5076/1 5077/70 5084/9 5085/13
SEEN-BY: 5095/20 5096/18 6001/10
PATH: 5006/1 5020/400 545 5054/1 37