如果你於RouterOS中使用負載平衡時,你會發現要從RapidShare下載檔案有很大的機會失敗
這是因為當你第1次連到RapidShare上的IP,然後等完看廣告的時間之後要下載檔案的IP不一樣所造成的
舉個例來說,假設第1次連上到RapidShare上的IP是123.1.1.1,但是要下載檔案時
因為負載平衡的關係,使得本次連到RapidShare 的已經變成123.1.1.2
這時就會發生無法下載的情況。
最簡單的解決方式就是,把要連到RapidShare上的連線全部走同1條線路
那麼要怎麼判斷那些連線是要到RapidShare的呢
就是看RouterOS DNS快取裡的Doman與IP的對照表
這個時候就需要使用Script來自動把RapidShare相關的IP濾出來,放到Address List供我們使用
相關的Script如下。新增Script的方式為到Winbox裡 System -> Scripts -> 按介面上的 +
把下面這個Script命名為 Update_RapidShare_IP ,後面會用到
# 把DNS快取裡資料全部讀出來 :foreach i in=[/ip dns cache find] do={ :local bNew "true"; # 檢查DNS快取裡是否有包含rapidshare的關鍵字 :if ([:find [/ip dns cache get $i name] "rapidshare"] != 0) do={ :local tmpAddress [/ip dns cache get $i address] ; # 轉換rapidshare的IP到"/16"的網段 :local mjesto ([:find $tmpAddress "."]); :set mjesto ([:find $tmpAddress "." $mjesto]); :local tmpAddress ([:pick $tmpAddress 0 $mjesto]); :set tmpAddress ($tmpAddress . ".0.0/16"); #---- 如果address list是空的就不用查檢了(直接把IP加入) :if ( [/ip firewall address-list find ] = "") do={ /ip firewall address-list add address=$tmpAddress list=RapidShare_IP disabled=no; } else={ #------- 檢查每一列的值 :foreach j in=[/ip firewall address-list find ] do={ #---------- 如果IP已經存在address list就不用新增了 :if ( [/ip firewall address-list get $j address] = $tmpAddress ) do={ :set bNew "false"; } } #------- 如果IP不存在就新增一筆上去address list :if ( $bNew = "true" ) do={ /ip firewall address-list add address=$tmpAddress list=RapidShare_IP disabled=no } } } }
接下來則是設定每30秒自動執行1次(相關設定如圖所示),隨時更新
System -> Scheduler -> 按介面上的 +
把這個 Scheduler 命名為 Auto_Update_RapidShare_IP
/system script run Update_RapidShare_IP
最後一個步驟就是判斷只要目的位置是在RapidShare_IP這個Address List裡的話
就強迫走單一路由。怎麼設定就因人而異了,不過大方向是不變的
有了RapidShare的相關IP,要針對RapidShare做限速、擋掉….等,都很方便了
相關參考資料:
Fight against P2P on port 80