在互聯網你的請求是如何被引導、劫持的?

   大多數的引導和劫持都是到cache設備上的,做cache有諸多好處,比如對於運營商而言可以節省網間流量(省錢)、提高用戶體驗(靜態內容、視頻等加速),對於網站主通過CDN做了cache後可以提高用戶體驗(加速),當然也有非法獲利者通過cache設備洗流量加廣告等也掙到了錢,那麼這個過程他們是怎麼把一個請求引導到他們的服務器上的呢??原理是什麼???最近剛好遇到我們的業務被劫持的問題,趁此機會做一個總結,拋磚引玉供大家一起探討。我將其分爲三個大類分別如下:

一、DNS正常引導

  1、cname引導

  此引導方式是大多數CDN廠商的做法,面向各網站主,用cname的方式爲其提供接入CDN系統的入口,在操作上,一般CDN廠家會提供一個域名供網站主做cname使用,在做完cname的那一刻,你連接的服務器就由CDN廠家來控制了,也就成功將用戶請求智能的引導到他們的設備上去了。另外,要正常提供服務,主要得關注兩個問題,一個是cname解析,另一個是網站回源問題。關於cname的介紹可參考之前寫的:說說爲什麼要有CNAME?

 2、forword引導

   此引導方式是大多數運營商的做法,他們有自己的DNS,有自己的寬帶用戶、專線用戶、無線用戶,爲了節省網間流量成本的同時提高用戶體驗,他們會自建或找cache廠家合作進行cache集羣建設,拿cache廠家爲例,在操作上,運營商或cache廠家會先分析出一批可以做緩存的網間域名,然後將這些域名forword到cache廠家自建的DNS(二次開發後適合cache配置的)上,cache廠家的dns根據不同的解析規則(比如輪序、hash等)解析到後端的cache集羣,進而成功的將用戶請求引導到了cache廠家的設備上,每臺緩存代理服務器會安裝bind並配置回源DNS(或者直接根域回源)。當然cache廠家也做了很好的高可用策略,比如說cache集羣掛了訪問直接回源、兩臺DNS做高可用等等。

   有同學問運營商爲什麼要用forword遞歸的方式,而不是迭代指定dns的方式.先說一下迭代和遞歸的區別,舉個例子,你向A詢問什麼是互聯網,A不知道,他告訴我讓我問B或C然後就不管了,這叫迭代,但同樣如果A不知道,但他說雖然我不知道但我向B或C問清楚後再告訴你,這就是遞歸,很清楚了吧。遞歸有個好處,每經過的環節能夠做到信息同步,所以用遞歸處理。下面是一個精簡的業務架構原理圖:


wKiom1eR4xmz6sbJAAEsAivhlhA476.png

 

二、劫持污染

  劫持和污染是運營商進行請求引導的另外一種重要方式,在操作上會在入口鏈路上使用分光設備將流量複製一份,複製後的流量使用流量分析設備進行分析處理,由於更靠近網內網民,設備會將要劫持的請求搶先將僞造的結果回傳給用戶,而這個結果就是欺騙網民去訪問指定的服務器,從而達到將請求劫持到cache服務集羣上的效果,從劫持的請求看分爲dns劫持和http劫持。有些同學叫這種dns引導方式爲dns污染,因爲感覺只是僞裝回覆沒有劫持,反正不管怎麼叫,都是這麼一個理,畫了一張業務流程架構圖如下:

wKioL1eR_F6x6TL_AAEgwTWUOKw036.png

  1、DNS劫持(污染)

  DNS劫持(污染)是指流量分析劫持設備在分析到需要的DNS查詢請求後(一般爲udp53號端口,要抓取的dns的ip地址設置白名單),搶先僞裝一個DNS回覆請求給用戶,爲什麼會搶先呢,因爲用戶和流量分析劫持設備是網內對網內,不管是時延也好還是其它鏈路質量也好,都要比網間要快很多很多,而udp的特點是沒有驗證機制,用戶會接受第一個查詢結果,其餘的將會被拋棄。


  2、http請求劫持

 http請求劫持是指流量分析劫持設備在分析道需要的http請求後,僞裝客戶端給源站發一個reset標記斷開連接,然後僞裝源站給用戶回一個302重定向到cache設備上,比如說你訪問的是www.aaa.com/123.html,cache設備是1.1.1.1,被劫持後會發一個http://1.1.1.1/www.aaa.com/123.html的302重定向給用戶,用戶自然就被引導到1.1.1.1上面了。

 

三、透明代理引導

  透明代理是將cache設備作爲中間網關串聯到鏈路中去的,作爲網關其實說白了cache設備要開啓路由轉發,承擔了路由器的作用,很多大的企事業單位爲什麼節約流量,會在其出口上安裝一臺這樣的設備,比如說原來需要買兩個G帶寬,在做了透明代理後只需要買1.5個G了,的對於用戶而言沒有任何需要操作的,所以叫透明代理。

  透明代理也有兩種方式,都是基於iptable,一種是基於端口轉發,將目的地址是80的請求,轉發到本地啓用的比如說8080的cache應用上,由cache應用處理後爲客戶提供服務,這種方式的弊端是有可能影響一些服務,因爲80端口過來不一定全是http請求。另外一種是採用tcp旁路監聽代理的方式tproxy,此種方式是非常好的,配置iptable的mangle表的PREROUTING鏈,對tcp的socket的連接打上mark標記,然後新建路由表讓打過標記的tcp通過,監聽目的端口是80的tcp通過tproxy代理至8080的cache應用上,由cache應用處理後爲客戶提供服務。

     操作上,服務器要開啓路由轉發、開啓iptable,要安裝緩存代理軟件,然後進行相應的配置,當然在高可用性上要做到對路由的心跳,一旦代理服務器故障,直接跳過代理服務器到下一跳,保證業務的持續性。

自建個人原創站運維網咖社(www.net-add.com),新的博文會在網咖社更新,歡迎瀏覽


  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章