Есть два прова идут на сервер, один работает по статике, другой 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
Код: Выделить всё
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
Код: Выделить всё
#!/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,1
${f} add 51 allow tcp from me 23,22,21,20,8088,25,995,5100,5101,10000,143,53,9
${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} or via ${ifOut2} }
#${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} or recv ${ifOut2} }
#${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 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} or via ${ifOut2} }
#${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
Может у кого-то есть получше скрипт, или может я что-то не правильно делаю?
PS Фря 9-ая стоит.