關於部落格
最會的事 就是這個不會和那個不會此網誌以 轉貼 文章為主
  • 225072

    累積人氣

  • 13

    今日人氣

    2

    追蹤人氣

FreeBSD NAT 上接兩條 ADSL 若斷線時自動偵測切換路由

最後更新日:2005/12/22

http://freebsd.ntut.idv.tw/document/freebsd_shell_script_change_route.html

FreeBSD NAT 上接兩條 ADSL 若斷線時自動偵測切換路由

Description :

        現今企業對網路的依賴度幾乎到達不可或缺的程度
,當網路一斷線時可說幾乎是完全停擺許多事情都不能做了,而以目前台灣的網路環境來說還是不能確保用戶無斷線之憂,畢竟網路是透過實體線路一個點一個點串起來的,而當中若有任何一個點出現狀況時就不難避免斷線既然會有斷線危機我們何不多花一點錢再拉一條其它固網的 ADSL 來當備援即可減低斷線風險目前台灣 ADSL 價格已經非常便宜,因此多拉一條線路來當備援即可降低斷線的風險有何不可呢?

        這是小弟在網路上找的 shell script 自行修改後使用在 FreeBSD + PF+ NAT 環境,還蠻實用的採用 ping 的回應方式來確認主要線路是否斷線一但斷線就馬上切換到備援線路上,如果主要線路恢復正常後也會再切回主要線路


Environment :

            硬體:i386 PC Intel P3 500
            記憶體網卡:
512M RAM 
            作業系統:
FreeBSD 6.0 Release
         網路卡三片:xl0 vr0 兩片對外 de0 一片對內

Drawing :

           
                   
                    gatewayP:210.xx.xx.254       xl0:210.xx.xx.8        de0:10.77.77.254
                    gatewayS:61.xx.xx.254         vr0:61.xx.xx.6


Setp 1.

先架設 FreeBSD + NAT + PF firewall,Kernel 編譯的部份我就不再說明請參考我之前寫過的 FreeBSD 5.3 Release PF 初體驗 基本環境啟動後,接下來設定這台機器的環境需要。

#vi /etc/rc.conf      
#  設定開機自動啟動檔,注意 getway_enable="YES" 一定要開啟我們在下 route 切換時才會即時生效

defaultrouter="210.xx.xx.254"
hostname="NAT.ntut.idv.tw"
ifconfig_xl0="inet 210.xx.xx.8 netmask 255.255.255.0"
ifconfig_vr0="inet 61.xx.xx.6 netmask 255.255.255.0"
ifconfig_de0="inet 10.77.77.254 netmask 255.255.255.0"
gateway_enable="YES"
sshd_enable="YES"
pf_enable="YES"
dhcpd_enable="YES"
inetd_enable="YES"

#vi /etc/pf.conf    
 #   這邊是設定防火牆 rule 跟 NAT rule 的檔,我們同時設定兩個 WAN port 都可為 LAN 做 NAT 

ext_if="xl0"
ext2_if="vr0"
int_if="de0"
#
nat on $ext_if from $int_if:network to any -> ($ext_if)
nat on $ext2_if from $int_if:network to any -> ($ext2_if)
rdr on $int_if proto tcp from any to any port ftp -> 127.0.0.1 port 8021
#
pass in all
pass out all

#vi /etc/sysctl.conf     #  開啟 NAT 的 IP Forwarding 環境


net.inet.ip.forwarding=1
net.inet.ip.fastforwarding=1

#vi /etc/inetd.conf     #  打開 ftp 的替代 port 如此 NAT 內部才能對外使用 ftp 抓東西


ftp-proxy       stream  tcp     nowait  root    /usr/libexec/ftp-proxy  ftp-proxy


Setp 2.

#vi /usr/local/sbin/change_route.sh      
#  開始編寫這支斷線自動偵測的 shell script ,取個名字叫 change_route.sh

01 #!bin/sh
02
03 dnsserverP="168.95.1.1"

04 gatewayP="210.xx.xx.254"
05 gatewayS="61.xx.xx.254"
06
07 active="P"
08 while [ 1 ]; do
09        response="`/sbin/ping -c 1 $dnsserverP | grep from`"
10        if [ "$response" ]; then
11               if [ "$active" = "S" ]; then
12                       route delete -net 0.0.0.0
13                       route add -net 0.0.0.0 -gateway $gatewayP
14                       active="P"
15               fi
16        else
17               if [ "$active" = "P" ]; then
18                       route delete -net 0.0.0.0
19                       route add -net 0.0.0.0 -gateway $gatewayS
20                       active="S"
21                fi
22        fi
23                sleep 3
24                done

程式說明:

前面行號為自行加入的行號,這些行號與程式碼無關所以使用時請去除


01 定義 shell 的路徑
03~05 自行定義 IP 的變數值
03 是 hinet 的 DNS ip
04 是 hinet ADSL 給的 IP 閘道
05 是 TFN ADSL 給的 IP 閘道
07 給一個 P 的值
08 採用 while 做無限迴圈
09 ping 得通收到 from 就直接跳到 23 行 sleep 3,否則執行第 10~11 行
11 這邊再做一次判斷 active 值如果 = S 就執行 12
1314 行,如果值非 S 就跳到 17 行
17 再做一次判
相簿設定
標籤設定
相簿狀態