七月 17

如果你於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