大多數的引導和劫持都是到cache設備上的,作cache有諸多好處,好比對於運營商而言能夠節省網間流量(省錢)、提升用戶體驗(靜態內容、視頻等加速),對於網站主經過CDN作了cache後能夠提升用戶體驗(加速),固然也有非法獲利者經過cache設備洗流量加廣告等也掙到了錢,那麼這個過程他們是怎麼把一個請求引導到他們的服務器上的呢??原理是什麼???最近恰好遇到咱們的業務被劫持的問題,趁此機會作一個總結,拋磚引玉供你們一塊兒探討。我將其分爲三個大類分別以下:html
1、DNS正常引導後端
一、cname引導緩存
此引導方式是大多數CDN廠商的作法,面向各網站主,用cname的方式爲其提供接入CDN系統的入口,在操做上,通常CDN廠家會提供一個域名供網站主作cname使用,在作完cname的那一刻,你鏈接的服務器就由CDN廠家來控制了,也就成功將用戶請求智能的引導到他們的設備上去了。另外,要正常提供服務,主要得關注兩個問題,一個是cname解析,另外一個是網站回源問題。關於cname的介紹可參考以前寫的:說說爲何要有CNAME?服務器
二、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問清楚後再告訴你,這就是遞歸,很清楚了吧。遞歸有個好處,每通過的環節可以作到信息同步,因此用遞歸處理。下面是一個精簡的業務架構原理圖:socket
2、劫持污染tcp
劫持和污染是運營商進行請求引導的另一種重要方式,在操做上會在入口鏈路上使用分光設備將流量複製一份,複製後的流量使用流量分析設備進行分析處理,因爲更靠近網內網民,設備會將要劫持的請求搶先將僞造的結果回傳給用戶,而這個結果就是欺騙網民去訪問指定的服務器,從而達到將請求劫持到cache服務集羣上的效果,從劫持的請求看分爲dns劫持和http劫持。有些同窗叫這種dns引導方式爲dns污染,由於感受只是假裝回覆沒有劫持,反正無論怎麼叫,都是這麼一個理,畫了一張業務流程架構圖以下:ide
一、DNS劫持(污染)網站
DNS劫持(污染)是指流量分析劫持設備在分析到須要的DNS查詢請求後(通常爲udp53號端口,要抓取的dns的ip地址設置白名單),搶先假裝一個DNS回覆請求給用戶,爲何會搶先呢,由於用戶和流量分析劫持設備是網內對網內,不論是時延也好仍是其它鏈路質量也好,都要比網間要快不少不少,而udp的特色是沒有驗證機制,用戶會接受第一個查詢結果,其他的將會被拋棄。
二、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上面了。
3、透明代理引導
透明代理是將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),新的博文會在網咖社更新,歡迎瀏覽。