在了解CDN的用途後,顧問緊接著說明使用者的流量,如何透過DNS的轉導,從原本直連的企業資訊中心入口,改由CDN網路連入。
當使用者輸入要前往的網址後,DNS會針對FQDN進行解析,在得到DNS的A Record後,就會透過路由逐步將請求送往該處。
指向CDN入口
要如何將FQDN改指向CDN的入口,此時就要利用DNS CNAME的機制。
CNAME是一種DNS記錄類型,用於將一個域名(同名)映射到另一個域名(真實名稱),域名解析伺服器遇到CNAME記錄會以映射到的目標重新開始查詢。
CNAME解析的工作原理:
-使用者發起查詢:使用者端在瀏覽器中輸入一個設定了CNAME記錄的域名,例如 www[.]lekuza[.]com 。
-接收並識別CNAME:DNS解析器接收到請求,並找到包含 www[.]lekuza[.]com 的CNAME記錄。 解析器辨識出 www[.]lekuza[.]com 是另一個網域edgekey[.]net的別名。
-發起新查詢: DNS解析器會啟動一個針對別名目標網域 edgekey[.]net的新查詢。
-CDN的負載均衡機制:再轉導至離使用者距離較佳的別名目標網域akamaiedge[.]net的新查詢。
-取得A記錄和IP位址:解析器找到akamaiedge[.]net的A記錄,並從中取得對應的IP位址。
-建立連線:使用者端最終拿到IP位址,並以此位址連接到對應的CDN伺服器。
CDN連接你的網站
那CDN商如何又如何連接你的網站入口呢?
CDN商也是採取同樣的方式透過DNS查詢得知網站的A Record後,再將請求的流量轉導過去。
此時,Jerry詢問可以只設定IP嗎?那網站有多條線路時又會是什麼樣的情況呢?
顧問回覆,可以只設定單一IP,這通常會是測試站台沒有可用性考量的服務。
而正式的服務,考量可用性大多會是2個以上的ISP線路進行備援。因此CDN要連去哪一個ISP線路,同樣也會利用CNAME的機制,透過地端資訊中心的DNS並搭配網路負載均衡設備機制,回應給CDN主機可接收請求的IP位置。
如何提供最佳節點
CDN會根據用戶端的 DNS 解析器 IP 位址,將一般使用者對應至最佳邊緣伺服器,這個技術稱之為EDNS0 Client Subnet (ECS),可以參考RFC 7871 - Client Subnet in DNS Queries文件的描述。
簡單的說,就是讓client在發起 DNS resolve 時可以在 query 中夾帶自己ECS資料,這些資料可以提供有關用戶端位置的更好資訊,作為決定將流量引導到何處的輸入。
主要是傳統的Recursive Resolver在遞迴查詢時,會將Source IP修改為自己的主機IP而不是發起請求Client端的IP,而當Recursive Resolver跟Client端在網路拓墣上的距離很遠的時候,就會得到不佳的回應,因此需要ECS的機制來解決此問題。 參考文章-Yuanchieh
另外,有興趣的人可以閱讀Akamai的Blog文章 參考更多內容。
可以繞過CDN防護嗎
此時,Jerry又發問駭客可以繞過CDN來攻擊網站嗎?既然你都設定了一堆防護,想必要攻擊駭客也要準備額外的資源來應付。
顧問回答說,不是不行但前提是 "駭客要先知道你原先主機的DNS A Record位置",那這個很難嗎?
如果貴司的服務只有一個站台導入CDN防護,然後其他的仍維持原來架構,駭客可以透過掃描網段的方式逐步找到這個站台。
另外透過一些工具或服務可以查看IP與域名綁定的歷史記錄,這個也可以也可以讓駭客找到可能的位置。
因此最佳的方式,就是將導入CDN的服務申請新的ISP網段,透過新IP來進行介接。
Jerry此時瞪大著眼睛看著顧問,怎麼可能~~~~~~~
顧問笑著回答,對!我還沒聽過有甲方這麼做,所以你要用防火牆限縮只有CDN的主機IP可以連線,這樣就只能強迫外部的連線都要通過CDN啦。