FreeBSD + PF + Shell Scritp + Load Sharing + …

2009-05-13 13:08:45来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

Description :

        上星期做了在
兩條 ADSL 上自動切換路由
的測試後,有個朋友就跟我說光兩條線路做 Redundant 是不是有點浪費?我想想也對,於是我想到了FreeBSD 中的 PF 有個 round-robin 的功能,它可做 Triffic Outgoing 的 Load Balancing 流量平均的分配,因此再把這功能的應用加上,這下子不但不會斷線還可以於平常就同時使用兩條 ADSL,真的太棒了 ^^
        這次的 shell script  有些許的改變,我還是使用 ping 的方式來判斷是否斷線,但是所 ping 的標地物 IP 改變了,不再是 ping 固網的 DNS,而是改 ping 固網內部的 ADSL 之 ATM 設備的虛擬 IP 為判斷標準,這樣的用意是讓我們在切換路由到另一家固網時才能精準判斷是否 100% loss。
        以下我只把使用過的設定檔 pf.conf、pf2.conf 及 loadsharing.sh 這個 shell script  檔貼出來,至於 Firewall + NAT 的安裝過程就不贅述,請參考之前的文章:
兩條 ADSL 上自動切換路由
。   
Environment :
            硬體:i386 PC Intel P3 500
            記憶體網卡:512M RAM
            作業系統:FreeBSD 6.0 Release
         網路卡三片:xl0 vr0 兩片對外 de0 一片對內
Drawing :
   

   Hinet ADSL ATM 內部的虛擬 IP:10.88.88.56          ext_gw1:210.xx.xx.254       xl0:210.xx.xx.8      de0:10.77.77.254
   TFN  ADSL  ATM 內部的虛擬 IP:10.36.128.10        ext_gw2:61.xx.xx.254         vr0:61.xx.xx.6
Setp 1.
#vi /usr/local/sbin/loadsharing.sh      #   開始編寫 5 秒鐘於背景跑一次的 shell script
#!/bin/shH_ATM_IP="10.88.88.50"H_GW1_IP="210.xx.xx.254"H_EXT_IP="210.xx.xx.8"T_ATM_IP="10.36.128.10"T_GW2_IP="61.xx.xx.254"T_EXT_IP="61.xx.xx.6"active="P"while [ 1 ]; doSTATUS1=`ping -c 1 $H_ATM_IP |grep loss |awk '{ print $7; }'`STATUS2=`ping -c 1 $T_ATM_IP |grep loss |awk '{ print $7; }'`if [ "$STATUS1" = "100%" ]; then   if [ "$STATUS2" = "100%" ]; then  # ALL line down      if [ "$active" = "P" ]; then         echo -e "\n\         ALL ADSL DOWN!\n\         Date: $(date)\n\         Host: $(hostname)\n\         " | /usr/bin/mail -s "$(date) ALL ADSL DOWN!" root         active="S"       else         echo -e "ALL ADSL DOWN!"       fi   else  # Hinet down, TFN up       if [ "$active" = "P" ]; then          echo -e "\n\          ADSL $H_ATM_IP DOWN!\n\          Date: $(date)\n\          Host: $(hostname)\n\          " | /usr/bin/mail -s "$(date) ADSL Hinet DOWN!" root          route delete -net 0.0.0.0          route add -net 0.0.0.0 -gateway $T_GW2_IP          pfctl -f /etc/pf2.conf          active="S"        else          echo -e "Hinet ADSL DOWN!"       fi   fielse    if [ "$STATUS2" = "100%" ]; then   # Hinet up, TFN down       if [ "$active" = "P" ]; then          echo -e "\n\          ADSL $T_ATM_IP DOWN!\n\          Date: $(date)\n\          Host: $(hostname)\n\          " | /usr/bin/mail -s "$(date) ADSL TFN DOWN!" root          route delete -net 0.0.0.0          route add -net 0.0.0.0 -gateway $H_GW1_IP          pfctl -f /etc/pf2.conf          active="S"        else          echo -e "TFN ADSL DOWN!"        fi    else   # All line up        if [ "$active" = "S" ]; then           echo -e "\n\           ALL ADSL UP!\n\           Date: $(date)\n\           Host: $(hostname)\n\           " | /usr/bin/mail -s "$(date) ALL ADSL UP!" root           pfctl -f /etc/pf.conf           active="P"        else          echo -e "ALL ADSL UP!"        fi     fifisleep 5done

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:802.1x 認證 + 無線 AP ( Access Point ) + FreeRadius Se

下一篇:自行架設 FreeBSD 無線防火牆 + 無線 AP ( Access Point )