雲計算

那些年移動App域名解析踩過的坑

一、摘要

移動應用出現域名劫持、解析結果修改生效慢、跨運營商跨地域訪問問題?阿里雲HTTPDNS可以解決這類問題。

二、域名解析阿喀琉斯之踵

域名解析是終端設備訪問互聯網的第一步,扮演著至關重要的角色。同時,域名解析服務是當前整個互聯網基礎設施中最脆弱的幾個環節之一。移動互聯網時代,由於接入智能終端數量激增,問題愈加嚴重。

案例1: 域名解析問題導致訪問流量減半

2017年2月24日21:20-2月25日1:00之間,某App A在江蘇省某ISP訪問流量減半,排查後發現為遞歸DNS故障導致。
image.png
圖1 遞歸DNS故障導致業務訪問受害

如圖1所示,正常訪問期間,App業務訪問大致分為四步:
• Step 1: App發起業務域名解析
• Step 2: 遞歸DNS返回域名解析結果IP
• Step 3: App根據返回的IP向業務服務器發起請求
• Step 4: 業務服務器返回響應,交互結束。
故障發生時,遞歸DNS在第二步無法返回解析結果或者返回錯誤的結果,導致App無法正確獲取業務服務器的IP,最終業務訪問受到巨大影響。

案例2: 域名解析結果修改不生效導致流量無法遷移

2016年11月中旬,由於某App B訪問的節點存在服務質量方面問題,計劃通過修改域名解析記錄將流量切走,但由於域名解析不生效,導致流量無法調走,最終4個小時後節點服務質量恢復了業務才回歸正常。
image.png
圖2 域名解析不生效的惡果

如圖2所示,正常訪問期間,App業務訪問的細化步驟可以分解成六步:
• Step 1: App發起業務域名解析
• Step 2: 遞歸DNS向權威DNS發起域名解析結果
• Step 3: 權威DNS返回域名對應的IP給遞歸DNS
• Step 4: 遞歸DNS給App返回域名解析結果
• Step 5: App根據返回的IP向業務服務器發起請求
• Step 6: 業務服務器返回響應,交互結束。
故障發生時,儘管權威DNS的解析記錄已經修改,但遞歸DNS的解析結果卻沒有任何變化(常見原因是遞歸DNS不遵循返回結果的TTL,私自設置緩存時間),仍然返回之前的結果,導致了故障的發生。

案例3: 不能碰的遞歸DNS節點

2011年,某公司流量峰值期間,運維人員計劃通過修改CDN的智能DNS系統配置將某一地區的部分流量從負載高的CDN節點到相對流量小的CDN節點去。實施過程中,發現某一個DNS IP對應的流量到達5G+,無法實現“調部分流量”的目標。
案例4: 客戶端調度不準
客戶反饋的服務質量問題往往是由於調度不準確導致的。參見以下案例。
image.png
圖3 手機DNS配置不準導致跨ISP跨地域訪問

根據IP地址來判斷,案例中的用戶位於武漢聯通,而遞歸DNS卻配置成了上海電信的DNS服務器,導致最終調度系統會按照上海電信區域來做就近接入,出現了跨運營商、跨地域訪問問題。

三、問題溯源

3.1 域名劫持問題

現網上DNS解析一般基於UDP來實現,由於UDP自身的脆弱性,很容易被劫持。
image.png
圖4 域名劫持原理

根據多種渠道統計數據,國內現網的周劫持率在3%-5%左右(對於某一個業務,一週之內曾經被劫持過的用戶佔比),部分地區部分時段的劫持率超過20%。
基於國內嚴重的流量劫持情況,騰訊、小米等六公司與2015年底聯合聲明抵制流量劫持等違法行為,但當前的形式仍不容樂觀。
域名劫持的危害性在於隱蔽性強、品牌傷害嚴重、解決難度大。
• 隱蔽性強。 劫持偶發,難以復現,舉證難。
• 品牌傷害嚴重。 劫持後往往彈出涉黃、涉賭等內容,嚴重傷害應用品牌。
• 解決難度大。 確認域名劫持後,一般開發者沒有渠道去解決問題。

3.2 遞歸DNS數量少且分佈不均導致無法就近接入

在國內,遞歸DNS數量較少且分佈不均。據統計,top 200的遞歸DNS承擔國內90%+的DNS訪問流量。這樣少的遞歸DNS是無法承載就近接入需求的。

3.3 終端手機的Local DNS配置錯誤導致無法就近接入

上節的案例4就是典型的遞歸服務器配置錯誤導致的就近接入問題。

四、阿里雲飛天的解決之道

4.1 小工具大本領:HTTPDNS

HTTPDNS原理
image.png
圖5 HTTPDNS服務原理

如圖5所示,HTTPDNS與傳統的DNS對比起來,有以下幾項功能:
• 使用HTTP協議進行域名解析,極大增強了域名解析的安全性
• 繞過了遞歸DNS服務器,最大限度防止域名劫持的發生
• HTTPDNS服務自身利用IP地址而非域名對外提供服務,防止HTTPDNS自身域名被劫持
• HTTPDNS想權威請求解析結果時,使用客戶端IP進行解析
• HTTPDNS優勢:
• 零劫持
• 域名解析結果修改秒級生效
• 零延遲解析
• 基於手機IP就近接入
• 支持https接口
• 批量域名解析接口
• Android/iOS SDK

4.2 適用對象

有自己App的開發者,並且需要一定的App編碼能力(接入HTTPDNS必須修改App源碼)。

4.3 如何使用

• Step 1: 開通HTTPDNS
• Step 2: 到HTTPDNS產品控制檯配置待解析域名
• Step 3: 通過Android/iOS SDK或者HTTP API將App接入HTTPDNS服務
請參見HTTPDNS的幫助文檔

五、案例

手機淘寶、支付寶錢包等阿里系App都已經接入HTTPDNS產品,治癒了上面提到的一系列頑疾。
案例中App B嘗試接入阿里雲飛天HTTPDNS後,在2017年2月24日的故障中,新版本未受任何影響,老版本則遇到了App A類似的問題。

釘釘搜索35248489,加入阿里云云原生應用研發平臺EMAS技術交流群,探討最新最熱門的應用研發技術和實踐。(或釘釘掃碼加入)

釘釘群二維碼.png

Leave a Reply

Your email address will not be published. Required fields are marked *