Страница 1 из 1

Два канала интернет и шлюз на FREEBSD 6.2

Добавлено: 2007-03-27 12:32:44
andy3000
Народ, кто нить озадачивался таким вопросом:
Имеется два выделенных канала интернет, сервер (в нем три сетевые карточки, одна для внутренней сети, и две карточки для двух выделенных каналов), задача такая при падении основного первого канала , автоматически включать резервный второй канал, а когда первый канал востанавливает свое рабочее состояние, автоматически подключать его обратно.
Есть ли решения данного вопроса?

Добавлено: 2007-03-27 12:35:54
Alex Keda

Код: Выделить всё

man ping
man shell
man route

Добавлено: 2007-03-28 8:14:15
alex3
В "Системном администраторе" есть статья по этому вопросу. С примерами скриптов.

Добавлено: 2007-03-28 9:51:26
Гость
я как раз февральский номер задолбался искать нигде в Питере нет, ужо согласен был в инете купить, так тож проблема январский и мартовский есть, а вот февральского нет, как всегда закон подлости :cry:

Добавлено: 2007-03-28 12:19:53
Abigor
так чего там трудного?
сам чтоль не можешь их написать, там три-четыре строчки

Добавлено: 2007-03-28 13:57:42
alex3
если не ошибаюсь, то я выкладывал на фтп к лисяре все выпуски 2002-2006

Re: Два канала интернет и шлюз на FREEBSD 6.2

Добавлено: 2007-10-27 10:47:36
votuanr
апну тему: немного другие условия:

есть 3 сетевых интерфейса: dc0,rl0 - каналы в интернет от разных провайдеров, xl0 -локалка
dc0 имеет внешний ip, rl0 - внутренний (непересекается с xl0), xl0 - обычная серая локалка.

шлюз по умолчанию rl0 (он просто быстрее на порядок).

Задача: выставить наружу 1723 порт (pptp) и radmin (4899).
Если шлюз по умолчанию dc0 - то проблем нет, все работает и перенаправляется (radmin внутрь локалки), если же шлюз по умолчанию rl0, то ответы на запросы (внешние соединения) возвращаются не через тотинтерфейс (dc0) через который они принимались, а через default gateway, т.е. через xl0 и нефига не работает :(
Если я жестко прописываю маршрут к внешнему хосту через dc0, а потом с этого хоста соединяюсь, то все работает, но проблема в том, что я не могу знать всех ip с которых будет соединение инициироваться.


изложил все для себя, чтоб так сказать структурировать в голове, но и от помощи не откажусь.

6.2-RELEASE-p4 FreeBSD 6.2-RELEASE-p4 #0: Tue May 29 12:53:25 MSD 2007


Oct 27 12:31:55 gw kernel: ipfw: 509 Accept TCP 175.59.051.117:1310 181.294.59.63:1723 in via dc0
Oct 27 12:31:55 gw kernel: ipfw: 509 Accept TCP 181.294.59.63:1723 175.59.051.117:1310 out via rl0

ткните в ман

Re: Два канала интернет и шлюз на FREEBSD 6.2

Добавлено: 2007-10-28 12:32:35
dikens3
Перехватывай нужный порт и отправляй всегда через dc0. (ipfw add fwd .. . . . ..

http://www.lissyara.su/?id=1330

Re: Два канала интернет и шлюз на FREEBSD 6.2

Добавлено: 2007-10-29 23:58:55
in7rude
andy3000 писал(а):Народ, кто нить озадачивался таким вопросом:
Имеется два выделенных канала интернет, сервер (в нем три сетевые карточки, одна для внутренней сети, и две карточки для двух выделенных каналов), задача такая при падении основного первого канала , автоматически включать резервный второй канал, а когда первый канал востанавливает свое рабочее состояние, автоматически подключать его обратно.
Есть ли решения данного вопроса?

Код: Выделить всё

#/usr/local/bin/bash

DGW="xx.xx.xx.xx"
GW1="xx.xx.xx.xx"
GW2="yy.yy.yy.yy"

DATE=`date`

while sleep 15; do
   ping -c 1 -s 2 -q -r $DGW > /dev/null
   STATE=$?

   ROUTEDEF=` netstat -rn | grep default | grep -v grep | awk '{print $2}' `

   if [ ! "$STATE" = "0" ]; then
    if [ "$ROUTEDEF" = "$GW1" ]; then
         route -q delete default
         route -q add default $GW2
         sh /etc/rc.firewall LAC
         echo "Switch to gw $GW2 in $DATE" >> /var/log/switchlog
    fi
   else
    if [ "$ROUTEDEF" = "$GW2" ]; then
         route -q delete default
         route -q add default $GW1
         sh /etc/rc.firewall USP
         echo "Switch to gw $GW1 in $DATE" >> /var/log/switchlog
    fi
   fi
done
У меня норм работает, только бывает косяк, когда отпадет линия не от меня до прова, а гденибудь уже у самого прова, то приходится руками каюло выдергивать :?

Re: Два канала интернет и шлюз на FREEBSD 6.2

Добавлено: 2007-10-30 1:43:39
Гость
А никто не пробовал прикрутить routed(8) для этих целей?

in7rude, в чем прикол использовать быдлобаш ради sh-скрипта? Лишнюю зависимость тянуть?

Код: Выделить всё

if [...]
  if ...
else ...
  if [...]
Может проще?

Код: Выделить всё

if [ ... -a ... ]
elif [ ... ]
> /dev/null... а чем >&- не угодил?
ROUTEDEF=` netstat -rn | grep default | grep -v grep | awk '{print $2}' `, можно короче ROUTEDEF=$(route -n get -inet default | awk '/gateway/ { print $2 }')
А вот эту конструкцию

Код: Выделить всё

ping -c 1 -s 2 -q -r $DGW > /dev/null
STATE=$?
<snip>
if [ ! "$STATE" = "0" ]; then
можно сократить до

Код: Выделить всё

if ! ping -c 1 -s 2 -q -r $DGW >&-; then
И что за опция (-r) такая у ping(8)'а? Согласно man'у она не требует никаких аргументов.
Ах да, #/usr/local/bin/bash... восклицательный знак после решеточки не забыли (#!)?
Вообщем скрипт кривой, но он все же лучше чем управлять роутингом из фаервола. Так что +1.