落伍者站长论坛's Archiver

verycool 发表于 2007-11-19 12:55

OpenBSD下PF双线带链路检测

一段简单的检测线路是否通,然后自动load入PF规则[code]#!/bin/sh
#Man1和MAN2的网关
gw1=AA.AA.AA.AA
gw2=BB.BB.BB.BB

#默认规则,Man1,MAN2等规则

PF_Default=/etc/pf.conf
PF_Man1=/etc/pf/pf_man1.conf
PF_Man2=/etc/pf/PF_man2.conf

#记录链路状态和线路故障的事件

Link_State=/etc/pf/Link_State
Link_State_Log=/var/log/Link_State_Log

#获取上一次的状态值

Previously_Link_State=`cat $Link_State`


#程序开始

if ping -c1 -w1 $gw1 >/dev/null 2>&1
then
  if ping -c1 -w1 $gw2 >/dev/null 2>&1
        then
        L_State=2 #双线都通
        echo $L_State > $Link_State
        else
        L_State=1 #MAN1 的线路通
        echo $L_State > $Link_State
        fi
else
        if ping -c1 -w1 $gw2 >/dev/null 2>&1
        then
        L_State=0 #  MAN2 通
        echo $L_State > $Link_State
        else
        L_State=-1 #双线都不通
        echo $L_State > $Link_State
        fi
fi

if [ $Previously_Link_State -eq $L_State ]
then
echo " Link State Not Change !"
else

        case $L_State in
        2)
        echo "All Link is UP at `date`! " >> $Link_State_Log
        pfctl -f $PF_Default
        ;;

        1)
        echo "Link MAN1 is UP! Link MAN2 is Down at `date`!" >> $Link_State_Log
       
        #单线路时对默认路由的修改
        route delete default
        route add default $gw1

        pfctl -f $PF_Man1
        ;;

        0)
        echo "Link MAN1 is Down ! Link MAN2 is UP at `date`!" >> $Link_State_Log
        #cat /root/wu/route | xargs -L 1 route delete #删除某些MAN2
        route delete default
        route add default $gw1
        pfctl -f $PF_Man2
        ;;

        -1)
        echo "All Link is Down at `date`!" >> $Link_State_Log
        ;;
        esac

fi[/code]把以上文件保存为:
pf_monitor.sh
修改权限:
chmod +x pf_monitor.sh
然后在 /var/cron/tabs/root 加入以下:
*     *       *       *       *       root    /etc/pf_monitor.sh

spidergood 发表于 2007-11-20 16:50

看的不太懂

fhdiyun 发表于 2007-11-21 11:02

没看懂

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.