FreeBSD + PF + Shell Scritp + Load Sharing + …
2009-05-13 13:08:45来源:未知 阅读 ()
上星期做了在
兩條 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
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Freebsd oracle 10g 2009-05-13
- KDE/FreeBSD 测试 QT-4.5.1. 2009-05-13
- 提示:bad kernel: arp : 内网IP地址 is on em0 but got rep 2009-05-13
- OpenBSD 4.5下安装Gnome 2.24成功! 2009-05-13
- OpenBSD 4.5 2009-05-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash