作者 主題: 關於網路幹道備援機制的建立  (閱讀 6577 次)

0 會員 與 1 訪客 正在閱讀本文。

don

  • 可愛的小學生
  • *
  • 文章數: 3
    • 檢視個人資料
關於網路幹道備援機制的建立
« 於: 2005-12-01 17:59 »
關於網路幹道備援機制的建立 LINUX+IPTABLES+SHELL SCRIPT


一,緣由:為建立更加自動化網路環境,達成Failover之目的,並且,能夠除了自動切換至備援線路 外,更重要是當主線路網路恢復正常時,可以自動而立即地切換回來,以節省及減少人力之操控


二,作業環境 Fedora 3

主控機共有三個網路介面兩個WAN一個LAN

WAN1為主幹道介面eth1 IP = 10.0.2.5/32 GW=10.0.2.1/32

WAN2為備援介面 eth2 IP=10.0.3.2/32 GW=10.0.3.1/32

LAN為內部介面 eth0 IP=192.168.1.1/32 GW=192.168.1.1/32

本機不做NAT位址轉換,直接將Client之IP 帶上至上層網路介面,於其上層介面 做NAT,故本機防火牆規則為

iptables -I FORWARD -p all -s 192.168.1.0/24 -d 10.0.2.1/32 -j ACCEPT

並啟動轉遞功能

echo 1 >/proc/sys/net/ipv4/ip_forward


三,實作過程

               1.

                  於主控機上,其網路設定不需填寫路由閘道器之位址,請先刪除之
               2.

                  撰寫多路徑之script內容,並儲存為/etc/rc.d/rc.local.route,如下

                  #!/bin/bash

                  #/etc/rc.d/rc.local.route

                  /sbin/ip rule add from 10.0.2..5 lookup 1

                  /sbin/ip rule add from 10.0.3.2 lookup 2

                  /sbin/ip route add to default via 10.0.2.1 metric 0

                  /sbin/ip route add to default via 10.0.3.1 metric 1

                  /sbin/ip route add table 1 to 10.0.2.0/24 dev eth1

                  /sbin/ip route add table 1 to 10.0.3.0/24 dev eth2

                  /sbin/ip route add table 1 to default via 10.0.2.1

                  /sbin/ip route add table 2 to 10.0.2.0/24 dev eth1

                  /sbin/ip route add table 2 to 10.0.3.0/24 dev eth2

                  /sbin/ip route add table 2 to default via 10.0.3.1

                  此可建立多對路徑之路由規則
               3.

                  為了能在主幹道網路斷線時,自動地切換,並透過郵件提醒管理者,故需撰寫一個Script,儲存的路徑為/root/check_out,其內容如下

                  #!/bin/bash

                  COUNT=”5”

                  GATEWAY=”10.0.2.1”

                  LOSS=`ping -c $COUNT -q $GATEWAY |grep loss |awk '{print $8}'`

                  if [ “$LOSS” == “100%” ]; then

                        echo “network in eth1 is not ok” >bad

                        ifdown eth0

                        /sbin/iptables -D FORWARD -p all -s 192.168.1.0/24 -d 10.0.2.1/32 -j ACCEPT

                        sh /etc/rc.d/rc.local.ex #為切換所設定之防火牆規則下文會說明

                        mail -s “network is change to eth2” your email address <bad

                        sleep 185

                        /sbin/ifup eth1

                        sh /root/check_out #此連續兩行為測試原主幹道是否恢復連線,下文會說明

else

echo “network ok”

fi

4.上文提到/etc/rc.d/rc.local.ex這個程式,乃是將切換至備援線路之所有防火牆規則之設定寫入執行檔中,其內容如下

#!/bin/bash

echo 1 >/proc/sys/net/ipv4/ip_forward

/sbin/iptables -A FORWARD -p all -s 192.168.1.0/24 -d 10.0.3.1/32 -j ACCEPT


5.以上寫入完畢後,便可以當主線路段線時,自動切換過去,但為了自動化執行,可以將其 寫入crontab中,使定期執行,我再此設定每分鐘稽核一次主幹道網路是否連線,內容如 下

*/1 0 0 0 0 root /root/check_out


6.接著,是當主幹道恢復連線後,將其由備援線路切換回主幹道線路之Script,儲存檔案 為/root/check_eth0 ,內容如下

#!/bin/bash

/sbin/ifup eth0

COUNT=”5”

GATEWAY=”10.0.2.1”

SUCCESS=`ping -c $COUNT -q $GATEWAY |grep loss |awk '{print $6}'`

if [ “$SUCCESS” == “0%” ]; then

UP=`tail /var/log/messages |grep “link up” |awk '{print $6 $9,$10}'`

if [ -n “$UP” ]; then

sh /etc/rc.d/rc.local.route

iptables -F

iptables -A FORWARD -p all -s 192.168.1.0/24 -d 10.0.2.1/32 -j ACCEPT

echo “network is change to eth0 again” >gut

mail -s “network is change to eth0 again” your email address <gut

fi

else

echo “network is still broken”

fi

7.以上便是有關於網路備援機制的建立實作方式,其實之前一直卡在主幹道斷線切換 至備援線路後,俟主線路恢復連線後,使其再自動由備援線路切回至主線路的有關問 題上,當然本實作參考了許多網路上高手的資料,再此亦非常感謝有他們的提供,才讓 我的實作得以完成