Биллинговая система Nodeny
27 Ноября 2024, 02:06:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Прекращена поддержка версии Nodeny 49
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: [1] 2
  Печать  
Автор Тема: Скрипт переключения между каналами  (Прочитано 11783 раз)
kuhar
NoDeny
Постоялец
*

Карма: 0
Offline Offline

Сообщений: 128


Просмотр профиля
« : 16 Июня 2012, 20:36:07 »

Возникла необходимость, реализовать следующее:
Есть два прова идут на сервер, один работает по статике, другой pppoe и один выход на клиентов.
Нужно чтобы по умолчанию работала статика (re1), а при ее отсутствии переключалось на pppoe (tun0), и сервер попрежнему отдавал интернет клиентам по pppoe, а когда на статике появлялся инет, то скрипт обратно переключал с tun0 на re1.
В общем нашел скрипт и сделал под себя:
Код:
#!/bin/sh
###
ng_ip=`ifconfig re1 | grep inet | awk '{print $2}'`
ng_gw=`ifconfig re1 | grep inet | awk '{print $4}'`
tun_ip=`ifconfig tun0 | grep inet | awk '{print $2}'`
tun_gw=`ifconfig tun0 | grep inet | awk '{print $4}'`
def_gw=`netstat -rn | grep default | awk '{print $2}'`
 
if ping -c 3 -S $ng_ip ya.ru > /dev/null
then
    if [ "$ng_gw" != "$def_gw" ] > /dev/null
    then
       /sbin/route change default $ng_gw
    fi
exit 0
else
    /sbin/route change default $tun_gw
    /usr/local/etc/rc.d/mpd5 restart
    if ping -c 3 -S $tun_ip ya.ru > /dev/null
    then
    exit 0
    else
    /sbin/route change default $ng_gw
    sleep 3
    killall -9 ppp
    sleep 5
    killall ppp
    sleep 7
    killall ppp
    sleep 45
    ppp -ddial fregat
    fi
fi
В конфиг mpd и в resolv.conf добавил днс провайдеров, в pf-е прописла следующее:
Код:
set limit states 128000
set optimization aggressive
nat pass on re1 from 10.0.0.0/8 to any -> re1
nat pass on re1 from 192.168.1.0/24 to any -> re1
nat pass on tun0 from 10.0.0.0/8 to any -> tun0
nat pass on tun0 from 192.168.1.0/24 to any -> tun0
В ipfw написал следующее:
Код:
#!/bin/sh -
f='/sbin/ipfw'

ifOut='re1'
ifOut2='tun0'

${f} -f flush

${f} add 50 allow tcp from any to me 23,22,21,20,8088,25,995,5100,5101,10000,143,53,953
${f} add 51 allow tcp from me 23,22,21,20,8088,25,995,5100,5101,10000,143,53,953 to any

${f} add 60 allow tcp from any to me 28560-28570

${f} add 70 allow udp from any 53,7723 to any

${f} add 100 deny tcp from any to any 445

${f} add 110 allow ip from any to any via lo0
${f} add 120 skipto 1000 ip from me to any
${f} add 130 deny icmp from any to any in icmptype 5,9,13,14,15,16,17
${f} add 140 deny ip from any to "table(120)"
${f} add 150 deny ip from "table(120)" to any
${f} add 160 skipto 2000 ip from any to me

${f} add 200 skipto 500 ip from any to any via ${ifOut}
${f} add 201 skipto 500 ip from any to any via ${ifOut2}

${f} add 300 skipto 4500 ip from any to any in

${f} add 400 skipto 450 ip from any to any recv ${ifOut}
${f} add 401 skipto 450 ip from any to any recv ${ifOut2}
${f} add 420 divert 1 ip from any to any
${f} add 450 divert 2 ip from any to any
${f} add 490 allow ip from any to any
${f} add 500 skipto 32500 ip from any to any in
${f} add 510 divert 1 ip from any to any
${f} add 540 allow ip from any to any

${f} add 701 allow tcp from any to any 5100
${f} add 701 allow tcp from any to any 5101

#${f} add 1000 allow udp from any 53,7723 to any

${f} add 1010 allow tcp from any to any setup keep-state
${f} add 1020 allow udp from any to any keep-state
${f} add 1100 allow ip from any to any

${f} add 2000 check-state
${f} add 2010 allow icmp from any to any
${f} add 2020 allow tcp from any to any 80,443
${f} add 2050 deny ip from any to any via ${ifOut}
${f} add 2051 deny ip from any to any via ${ifOut2}
${f} add 2060 allow udp from any to any 53,7723

${f} add 2100 deny ip from any to any

${f} add 32490 deny ip from any to any

В общем завел всю эту байду, в итоге срабатывает по умолчанию не re1, а tun0. Когда отключаю tun0 инет не переподлючается, но когда врубаю кабель то фря бутается...
Может у кого-то есть получше скрипт, или может я что-то не правильно делаю?
Записан
0xbad0c0d3
гуру nodeny )
NoDeny
Спец
*

Карма: 116
Offline Offline

Сообщений: 1059



Просмотр профиля
« Ответ #1 : 17 Июня 2012, 01:31:03 »

А покажите вывод ifconfig

Код:
ng_gw=`ifconfig re1 | grep inet | awk '{print $4}'`
И с чего Вы взяли, что в четвертой колонке шлюз!? Какбы в ifconfig'e его (шлюза) никогда не было...
« Последнее редактирование: 17 Июня 2012, 01:33:30 от 0xbad0c0d3 » Записан
Rico-X
NoDeny
Старожил
*

Карма: 7
Offline Offline

Сообщений: 349


Просмотр профиля
« Ответ #2 : 17 Июня 2012, 10:51:53 »

Мой рабочий вариант скрипта переключения каналов, принцип работы скрипта: пингуем шлюз каналов, если пинга до шлюза нет, значит канал лежит, ничего умнее не придумал.
Код:
#!/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin

GW1=Шлюз первого аплинка
GW2=Шлюз второго аплинка
tester=0;
itest1=`/sbin/ping -c 3 $GW1 | grep "64 bytes" | wc -l`;
itest2=`/sbin/ping -c 3 $GW2 | grep "64 bytes" | wc -l`;

if [ ! -f "/tmp/countGW.tmp" ]
then
echo 3 > /tmp/countGW.tmp
fi

oldtest=`cat /tmp/countGW.tmp`

if (test $itest1 -gt "0")
then
let tester=tester+1
fi

if (test $itest2 -gt "0")
        then
let tester=tester+2
        fi

if [ $oldtest = $tester ]; then
exit;
#echo "Canali ne izmenilis"
else
if  [ $oldtest = 3 ]; then
cp /etc/pf.conf /etc/pf.conf3
fi

        if  [ $tester = 3 ]; then
        cp /etc/pf.conf3 /etc/pf.conf
/sbin/route change default $GW1
        fi

        if  [ $tester = 2 ]; then
        cp /etc/pf.conf2 /etc/pf.conf
/sbin/route change default $GW2
        fi

        if  [ $tester = 1 ]; then
        cp /etc/pf.conf1 /etc/pf.conf
/sbin/route change default $GW1
        fi

/etc/rc.d/pf restart

fi
Скрипт изменяет шлюз по умолчанию если основной канал вдруг падает, если канал возвращается на место шлюз также возвращается. В pf имею 3 конфига, активен только канал 1, активен только канал 2 и активны оба канала, что там писать уж на свой вкус. в ipfw заменены правила

Код:
#Kanal 1
ifOut='vlan666'
#Kanal 2
ifOut2='vlan64'
........
${f} add 200 skipto 500 ip from any to any { via ${ifOut} or via ${ifOut2} }
........
${f} add 400 skipto 450 ip from any to any { recv ${ifOut} or recv ${ifOut2} }
........
${f} add 2050 deny ip from any to any { via ${ifOut} or via ${ifOut2} }
........
Записан
kuhar
NoDeny
Постоялец
*

Карма: 0
Offline Offline

Сообщений: 128


Просмотр профиля
« Ответ #3 : 06 Июля 2012, 10:23:16 »

А почему в скрипте фигурируют аж 4 pf.conf-а?

Мой рабочий вариант скрипта переключения каналов, принцип работы скрипта: пингуем шлюз каналов, если пинга до шлюза нет, значит канал лежит, ничего умнее не придумал.
Код:
#!/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin

GW1=Шлюз первого аплинка
GW2=Шлюз второго аплинка
tester=0;
itest1=`/sbin/ping -c 3 $GW1 | grep "64 bytes" | wc -l`;
itest2=`/sbin/ping -c 3 $GW2 | grep "64 bytes" | wc -l`;

if [ ! -f "/tmp/countGW.tmp" ]
then
echo 3 > /tmp/countGW.tmp
fi

oldtest=`cat /tmp/countGW.tmp`

if (test $itest1 -gt "0")
then
let tester=tester+1
fi

if (test $itest2 -gt "0")
        then
let tester=tester+2
        fi

if [ $oldtest = $tester ]; then
exit;
#echo "Canali ne izmenilis"
else
if  [ $oldtest = 3 ]; then
cp /etc/pf.conf /etc/pf.conf3
fi

        if  [ $tester = 3 ]; then
        cp /etc/pf.conf3 /etc/pf.conf
/sbin/route change default $GW1
        fi

        if  [ $tester = 2 ]; then
        cp /etc/pf.conf2 /etc/pf.conf
/sbin/route change default $GW2
        fi

        if  [ $tester = 1 ]; then
        cp /etc/pf.conf1 /etc/pf.conf
/sbin/route change default $GW1
        fi

/etc/rc.d/pf restart

fi
Скрипт изменяет шлюз по умолчанию если основной канал вдруг падает, если канал возвращается на место шлюз также возвращается. В pf имею 3 конфига, активен только канал 1, активен только канал 2 и активны оба канала, что там писать уж на свой вкус. в ipfw заменены правила

Код:
#Kanal 1
ifOut='vlan666'
#Kanal 2
ifOut2='vlan64'
........
${f} add 200 skipto 500 ip from any to any { via ${ifOut} or via ${ifOut2} }
........
${f} add 400 skipto 450 ip from any to any { recv ${ifOut} or recv ${ifOut2} }
........
${f} add 2050 deny ip from any to any { via ${ifOut} or via ${ifOut2} }
........

Записан
Rico-X
NoDeny
Старожил
*

Карма: 7
Offline Offline

Сообщений: 349


Просмотр профиля
« Ответ #4 : 06 Июля 2012, 16:23:54 »

Не 4 а 3 из за моей лени писать конструкцию на sed и awk проще было так, сделал и забыл. Один конфиг, когда оба канала живые, второй когда жив только первый канал и третий когда жив только второй канал. Также было лень заморачиваться с кучей проверок, по этому критерием доступности сделал банальный пинг шлюза. Писал на коленке минут 10, работает и ладно, не нравится можно переделать под себя Улыбающийся
Записан
kuhar
NoDeny
Постоялец
*

Карма: 0
Offline Offline

Сообщений: 128


Просмотр профиля
« Ответ #5 : 06 Июля 2012, 19:20:46 »

А мона конфиг показать, когда оба канала активно, а то у меня со следующим не работает:
Код:
set limit states 128000
set optimization aggressive
nat pass on re0 from 10.0.24.0/24 to any -> re0
nat pass on re0 from 10.0.0.0/8 to any -> re0
nat pass on re0 from 192.168.1.0/24 to any -> re0
nat pass on xl0 from 10.0.24.0/24 to any -> xl0
nat pass on xl0 from 10.0.0.0/8 to any -> xl0
nat pass on xl0 from 192.168.1.0/24 to any -> xl0

Не 4 а 3 из за моей лени писать конструкцию на sed и awk проще было так, сделал и забыл. Один конфиг, когда оба канала живые, второй когда жив только первый канал и третий когда жив только второй канал. Также было лень заморачиваться с кучей проверок, по этому критерием доступности сделал банальный пинг шлюза. Писал на коленке минут 10, работает и ладно, не нравится можно переделать под себя Улыбающийся
Записан
Rico-X
NoDeny
Старожил
*

Карма: 7
Offline Offline

Сообщений: 349


Просмотр профиля
« Ответ #6 : 06 Июля 2012, 21:54:05 »

Да легко
Цитировать
cat /etc/pf.conf
set limit states 128000
set optimization aggressive
ext_if1="vlan666"
ext_if2="vlan64"

ext_gw1="xxx.xxx.xxx.xxx"
ext_gw2="yyy.yyy.yyy.yyy"

table <no_nat> const { 192.168.0.0/16}
scrub in all

#Этих через канал 2
nat on $ext_if1 from 192.168.3.0/24 to !<no_nat> -> $ext_if2
nat on $ext_if1 from 192.168.4.0/24 to !<no_nat> -> $ext_if2
nat on $ext_if1 from 192.168.5.0/24 to !<no_nat> -> $ext_if2
nat on $ext_if1 from 192.168.7.0/24 to !<no_nat> -> $ext_if2
nat on $ext_if1 from 192.168.9.0/24 to !<no_nat> -> $ext_if2
#Остальных через канал 1
nat on $ext_if1 from 192.168.0.0/16 to !<no_nat> -> $ext_if1

pass out on $ext_if1 route-to ($ext_if2 $ext_gw2) from $ext_if2 to !<no_nat>
pass out on $ext_if2 route-to ($ext_if1 $ext_gw1) from $ext_if1 to !<no_nat>
Записан
kuhar
NoDeny
Постоялец
*

Карма: 0
Offline Offline

Сообщений: 128


Просмотр профиля
« Ответ #7 : 07 Июля 2012, 08:13:08 »

В общем то что у меня получилось и осталось самую малость, потому что оно почти работает:)
Добавил скрипт в крон:
Код:
* * * * *        /etc/rc.d/script.sh
Видоизменил скрипт, убрал у него проверку ipv6 и добавил проверку локфайлов в итоге получилось:
Код:
#!/bin/sh
###
if [ -e /tmp/ping_checker.lock ]; then

        #echo "Lockfile exist";

        exit 0;



else

touch /tmp/ping_checker.lock

set ng_ip=`ifconfig re0 | grep "inet "| awk '{print $2}'`
set ng_gw=`ifconfig re0 | grep "inet "| awk '{print $4}'`
set tun_ip=`ifconfig tun0 | grep "inet "| awk '{print $2}'`
set tun_gw=`ifconfig tun0 | grep "inet "| awk '{print $4}'`
def_gw=`netstat -rn | grep default | awk '{print $2}'`

    /sbin/route change default $tun_gw
    /usr/local/etc/rc.d/mpd5 restart
    if ping -c 3 -S $tun_ip ya.ru > /dev/null
    then
    exit 0
    else
    /sbin/route change default $ng_gw
    sleep 3
    killall -9 ppp
    sleep 5
    killall ppp
    sleep 7
    killall ppp
    sleep 45
    ppp -ddial fregat
    fi
else
    if ping -c 3 -S $ng_ip ya.ru > /dev/null
    if [ "$ng_gw" != "$def_gw" ] > /dev/null
    then
       /sbin/route change default $ng_gw
    fi
exit 0
fi
rm -f /tmp/ping_checker.lock

fi

pf.conf сделал следующего вила:
Код:
set limit states 128000
set optimization aggressive
nat pass on re1 from 10.0.0.0/8 to any -> re1
nat pass on re1 from 192.168.1.0/24 to any -> re1
nat pass on tun0 from 10.0.0.0/8 to any -> ip
nat pass on tun0 from 192.168.1.0/24 to any -> ip

Фаервол пока не трогал, поставил там allow from any to any.
После чего наблюдается следующая картина: по умолчанию уже работает статика (и это хорошо), при ее выдергивании канал переключается на второго прова, который работает через pppoe и тут начинается веселье, с клиентской тачки пинг никуда не идет, страницы не открываются, но сцуко скайп та работает.
Помогите плизз с этим справиться.
Записан
kuhar
NoDeny
Постоялец
*

Карма: 0
Offline Offline

Сообщений: 128


Просмотр профиля
« Ответ #8 : 07 Июля 2012, 08:32:23 »

Кстати ведь нельзя юзать два шлюза, может трабл в том что когда работал по статике был один шлюз, при ее вытыкании фря юзает старый шлюз, который уже не пашет и не меняет на новый, что-то мне кажется загвостка тут.
Скорее всего на обробатывается /sbin/route change default $tun_gw скоро похимичу и отпишусь;)
Записан
Rico-X
NoDeny
Старожил
*

Карма: 7
Offline Offline

Сообщений: 349


Просмотр профиля
« Ответ #9 : 07 Июля 2012, 09:41:06 »

Вдумчиво читаем эти 2 строки
Цитировать
pass out on $ext_if1 route-to ($ext_if2 $ext_gw2) from $ext_if2 to !<no_nat>
pass out on $ext_if2 route-to ($ext_if1 $ext_gw1) from $ext_if1 to !<no_nat>
Записан
Андрій
NoDeny
Старожил
*

Карма: 3
Offline Offline

Сообщений: 294


Просмотр профиля
« Ответ #10 : 07 Июля 2012, 11:29:52 »

ось мій скрипт переключення каналів, потрібно перекомпілювати ядро з підтримкою setfib (кілька таблиць маршрутизації)

Код:
#!/usr/local/bin/bash

/sbin/ping -q -c 10 4.0.0.8 > /dev/null 2>&1            # пінгуєм 10 разів
if [ $? -ne  "0" ] ; then                               # якщо пінгу нема і повертається значення не 0, тоді:
    /sbin/ipfw show | grep 00321 > /dev/null 2>&1       # дивимся чи є правило 321 у феєрволі - тобто чи переключення вже не відбулося
    if [ $? -ne "0" ] ; then                            # якщо нема тоді:
        /sbin/ipfw add 321 setfib 3 ip from "table(0)" to not me in              # добавляєм правило в феєрволі для перенаправлення трафіку через інший канал
          echo `date` "channel 1 down, switched to the backup"  >> /usr/local/www/apache22/data/mon # записуєм що канал пропав у файлик
     fi
else                                                    # якщо пінг є
    /sbin/ipfw show 321                                 # дивимся чи є правило перенаправлення в феєрволі
    if [ $? -eq "0" ] ; then                            # якщо воно є
        /sbin/ipfw delete 321   > /dev/null 2>&1                # то видаляєм
           echo `date` "channel 1 up"  >> /usr/local/www/apache22/data/mon # записуєм що канал відновився у файлик
    fi
fi


Працює без проблем вже кілька років
Записан
kuhar
NoDeny
Постоялец
*

Карма: 0
Offline Offline

Сообщений: 128


Просмотр профиля
« Ответ #11 : 18 Августа 2012, 17:57:03 »

В общем с горем пополам при помощи знакомого написал скрипт, который переключает каналы, как описано ранее.
Выкладываю сам скрипт:
Код:
#!/bin/sh

 stat_gw="11.11.11.11"
 stat_ip="22.22.22.22"
 ip_8="8.8.8.8"
 flag_file="/tmp/ping_checker.lock"


 [ -r "${flag_file}" ] && {
     echo "Lockfile exist";
     exit 0;
 }
 > ${flag_file}

 tun_ip=`ifconfig tun0 | grep "inet " | cut -d" " -f2`
 tun_gw=`ifconfig tun0 | grep "inet " | awk '{print $4}'`
 def_gw=`netstat -rn | grep default | awk '{print $2}'`

 echo "tun_ip=${tun_ip} tun_gw=${tun_gw} def_gw=${def_gw}"

 [ -z "${tun_gw}" ] && {
    echo "Gate PPPoE is empty! Stop."
    ifconfig tun0
    rm -f ${flag_file}
    exit 10
 }

 check=`netstat -rn | grep "${ip_8}[ ]*${stat_gw}"`
 [ -z "${check}" ] && route add ${ip_8} ${stat_gw}

  /sbin/ping -c 3 ${ip_8} #> /dev/null
 if [ $? -eq 0 ]; then
     echo "Static line is UP"

     /sbin/route delete default ${tun_gw}
     echo "PPPoE line is deactive"
     if [ "${def_gw}" != "${stat_gw}" ]; then
         /sbin/route add default ${stat_gw}
     fi
     /etc/rc.d/pf restart

     rm -f ${flag_file}

 else
     echo "Static line is DOWN"
     /sbin/route delete default ${stat_gw}
     [ "${def_gw}" != "${tun_gw}" ] && {
        /sbin/route add default ${tun_gw}
     }
     /etc/rc.d/pf restart

         echo "PPPoE line is active"

    [ `ifconfig tun0 | grep "inet " | wc -l` -gt 1 ] && {
        sleep 3
        killall -9 ppp
        sleep 5
        killall ppp
        sleep 7
        killall ppp
        sleep 45
        ppp -ddial ispname
    }

 fi

 rm -f ${flag_file}
 exit 0

Где
stat_gw="11.11.11.11" - шлюз статики
stat_ip="22.22.22.22" - ip статики

Код:
tun_ip=`ifconfig tun0 | grep "inet " | cut -d" " -f2`
 tun_gw=`ifconfig tun0 | grep "inet " | awk '{print $4}'`
код определяет ip и шлюза провайдера, который работает по pppoe.

Ну и собственно добавил в крон, чтобы скрипт запускался каждую минуту:
Код:
ee /etc/crontab
*/1    *       *       *       *       root    /etc/rc.d/script.sh
Записан
kuhar
NoDeny
Постоялец
*

Карма: 0
Offline Offline

Сообщений: 128


Просмотр профиля
« Ответ #12 : 18 Августа 2012, 18:03:29 »

Ребята, помогите плизз разобраться с фаерволом и pf.
Сейчас в pf:
Код:
set limit states 128000
set optimization aggressive
nat pass on re0 from 10.0.0.0/8 to any -> ip isp
nat pass on re0 from 192.168.1.0/24 to any -> ip isp
nat pass on tun0 from 10.0.0.0/8 to any -> ip isp
nat pass on tun0 from 192.168.1.0/24 to any -> ip isp

В rc.firewall:
Код:
#!/bin/sh -
f='/sbin/ipfw'

ifOut='re0'
ifOut2='tun0'

${f} -f flush

${f} add 50 allow tcp from any to me 23,22,21,20,8088,25,995,5100,5101,10000,143,53,953
${f} add 51 allow tcp from me 23,22,21,20,8088,25,995,5100,5101,10000,143,53,953 to any

${f} add 60 allow tcp from any to me 28560-28570

${f} add 70 allow udp from any 53,7723 to any

${f} add 100 deny tcp from any to any 445

${f} add 110 allow ip from any to any via lo0
${f} add 120 skipto 1000 ip from me to any
${f} add 130 deny icmp from any to any in icmptype 5,9,13,14,15,16,17
${f} add 140 deny ip from any to "table(120)"
${f} add 150 deny ip from "table(120)" to any
${f} add 160 skipto 2000 ip from any to me

${f} add 200 skipto 500 ip from any to any via ${ifOut}
${f} add 201 skipto 500 ip from any to any via ${ifOut2}

${f} add 300 skipto 4500 ip from any to any in

${f} add 400 skipto 450 ip from any to any recv ${ifOut}
${f} add 401 skipto 450 ip from any to any recv ${ifOut2}
${f} add 420 divert 1 ip from any to any

${f} add 450 divert 2 ip from any to any
${f} add 490 allow ip from any to any
${f} add 500 skipto 32500 ip from any to any in
${f} add 510 divert 1 ip from any to any
${f} add 540 allow ip from any to any

${f} add 701 allow tcp from any to any 5100
${f} add 701 allow tcp from any to any 5101

${f} add 1000 allow udp from any 53,7723 to any

${f} add 1010 allow tcp from any to any setup keep-state
${f} add 1020 allow udp from any to any keep-state
${f} add 1100 allow ip from any to any

${f} add 2000 check-state
${f} add 2010 allow icmp from any to any
${f} add 2020 allow tcp from any to any 80,443
${f} add 2050 deny ip from any to any via ${ifOut}
${f} add 2051 deny ip from any to any via ${ifOut2}
${f} add 2060 allow udp from any to any 53,7723

${f} add 2100 deny ip from any to any

${f} add 32490 deny ip from any to any

При этом когда основной канал пропадает на интерфейсе re0, скрипт переключает канал на tun0, но у клиента нет интернета.
Помогите плизз разобраться.
Записан
Rico-X
NoDeny
Старожил
*

Карма: 7
Offline Offline

Сообщений: 349


Просмотр профиля
« Ответ #13 : 19 Августа 2012, 08:48:54 »

Фух, ну повторю свой верхний пост еще раз, а точнее что должно быть:
1) При пропадании канала должен меняться шлюз по умолчанию
Код:
/sbin/route change default $GW1
2) В правилах фаирвола должны существовать оба направления
Код:
#Kanal 1
ifOut='vlan666'
#Kanal 2
ifOut2='vlan64'
........
${f} add 200 skipto 500 ip from any to any { via ${ifOut} or via ${ifOut2} }
........
${f} add 400 skipto 450 ip from any to any { recv ${ifOut} or recv ${ifOut2} }
........
${f} add 2050 deny ip from any to any { via ${ifOut} or via ${ifOut2} }
3) В правилах ната на pf должна быть конструкция, работающая через оба канала
Код:
ext_if1="ip канала 1"
ext_if2="ip канала 2"
ext_gw1="Шлюз канала 1"
ext_gw2="Шлюз канала 2"
{Тут какую сеть на какой канал, либо текущий рабочий канал для всех сетей}
pass out on $ext_if1 route-to ($ext_if2 $ext_gw2) from $ext_if2 to !<no_nat>
pass out on $ext_if2 route-to ($ext_if1 $ext_gw1) from $ext_if1 to !<no_nat>

Как расписать подробней даже не знаю, если не выйдет, стучите в skype, попробую помочь.
Записан
kuhar
NoDeny
Постоялец
*

Карма: 0
Offline Offline

Сообщений: 128


Просмотр профиля
« Ответ #14 : 19 Августа 2012, 19:49:54 »

Фух, ну повторю свой верхний пост еще раз, а точнее что должно быть:
1) При пропадании канала должен меняться шлюз по умолчанию
Код:
/sbin/route change default $GW1
2) В правилах фаирвола должны существовать оба направления
Код:
#Kanal 1
ifOut='vlan666'
#Kanal 2
ifOut2='vlan64'
........
${f} add 200 skipto 500 ip from any to any { via ${ifOut} or via ${ifOut2} }
........
${f} add 400 skipto 450 ip from any to any { recv ${ifOut} or recv ${ifOut2} }
........
${f} add 2050 deny ip from any to any { via ${ifOut} or via ${ifOut2} }
3) В правилах ната на pf должна быть конструкция, работающая через оба канала
Код:
ext_if1="ip канала 1"
ext_if2="ip канала 2"
ext_gw1="Шлюз канала 1"
ext_gw2="Шлюз канала 2"
{Тут какую сеть на какой канал, либо текущий рабочий канал для всех сетей}
pass out on $ext_if1 route-to ($ext_if2 $ext_gw2) from $ext_if2 to !<no_nat>
pass out on $ext_if2 route-to ($ext_if1 $ext_gw1) from $ext_if1 to !<no_nat>

Как расписать подробней даже не знаю, если не выйдет, стучите в skype, попробую помочь.
Спасибо, помогло все работает.
Записан
Страниц: [1] 2
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.20 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!