跳至內容

我該如何判斷我對 Amazon DNS 伺服器的 DNS 查詢失敗是否是因為 VPC DNS 限流所導致的?

2 分的閱讀內容
0

我想知道為什麼在 Amazon Virtual Private Cloud (Amazon VPC) 中,我對 Amazon DNS 伺服器發出的 DNS 查詢會失敗或逾時。

簡短描述

對於每個彈性網路介面,Amazon DNS 配額為每秒 1,024 個封包 (PPS)。如果超出配額,Amazon Route 53 將拒絕流量。

VPC 流程日誌不會擷取應用程式傳送至 Amazon DNS 伺服器的流量。若要確定 DNS 查詢失敗的原因,請使用封包擷取或 Traffic Mirroring

注意:Route 53 查詢日誌只會擷取到達 VPC.2 解析程式 AmazonProvidedDNS 的流量。限流的 DNS 查詢不會顯示在查詢日誌中,因為查詢會在網路介面層級受到限流。

解決方法

判斷 DNS 查詢失敗的來源

使用 tcpdump (僅適用於 Linux)

若要使用 tcpdump,請完成以下步驟:

  1. 在您的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體上執行以下命令:

    TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
    INSTANCE_ID=`curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/instance-id`
    sudo tcpdump -i eth0 -s 350 -C 100 -W 20 -w /var/tmp/$INSTANCE_ID.$(date +%Y-%m-%d:%H:%M:%S).pcap

    **注意:**上述命令會擷取封包的初始 350 個位元組,儲存 20 個檔案 (每個 100 MB),並覆寫舊封包擷取。如果您的主要網路介面不是 eth0,請將上述命令中的 eth0 替換為您的主要網路介面。若要尋找您的主要介面,請執行下列命令:

    netstat -i
  2. 執行下列命令來計算已傳送的 DNS 查詢數目:

    tcpdump  -r <file_name.pcap> -nn dst port 53 | awk -F " " '{ print $1 }' | cut -d"." -f1 | uniq -c

使用 Traffic Mirroring

如果您無法使用 tcpdump,請使用 Traffic Mirroring 來識別 DNS 查詢是否受到限流。

**注意:**Traffic Mirroring 適用於 Nitro 型執行個體和某些非 Nitro 執行個體類型需支付 Traffic Mirroring 費用

若要擷取和分析流量資料,請完成下列步驟:

  1. 完成 Traffic Mirroring 先決條件
  2. 建立流量鏡像目標。確認目標網路介面或 Network Load Balancer 允許連接埠 UDP 4789 上的傳入流量。
  3. 建立流量鏡像篩選條件。在 Filter settings (篩選條件設定) 中,請確認已為 Network services - optional (網路服務 - 選用) 啟用 amazon-dns
  4. 建立流量鏡像工作階段

Traffic Mirroring 會收集鏡像流量,並將其儲存在流量鏡像目標上。

**注意:**Traffic Mirroring 是一種即時資料串流。若要擷取目標上的鏡像封包,並將其儲存在 .pcap 檔案中,請擷取 UDP 連接埠 4789 上的流量。

使用 Wireshark

請完成下列步驟:

  1. 在 Wireshark 中開啟擷取的流量
    注意: 若要下載 Wireshark,請參閱 Wireshark 網站上的 Download (下載) 頁面。
  2. 選擇 Statistics (統計資料) 索引標籤。
  3. 選取 I/O Graph (I/O 圖表) 並清除所有選項。
  4. Display Filter (顯示篩選條件) 下,使用 VXLAN 網路識別碼和 DNS 查詢來新增篩選條件。DNS 標頭中的 QR 欄位為 0。例如,如果 VXLAN 網路識別碼為 16777215,則圖表的顯示篩選條件為 (vxlan.vni == 16777215) && (dns.flags.response == 0)
  5. 檢閱圖表。如果其保持在 1024 PPS 左右,表示鏡像來源正遭受限流。

檢查 ENA 驅動程式網路效能指標

如果 EC2 執行個體執行下列其中一個彈性網路介面卡 (ENA) 驅動程式版本,請檢查 DNS 限流的即時指標:

  • Linux: 2.2.10 或更新版本
  • Windows: 2.2.2.0 或更新版本

請檢查 linklocal_allowance_exceeded 指標,以判斷因流量超過以下本機服務的 PPS 配額而導致的封包丟失數量:

  • Amazon VPC DNS Service
  • 執行個體中繼資料服務 (IMDS)
  • Amazon Time Sync Service

以多個時間間隔檢查指標,以確定計數是否增加。linklocal_allowance_exceeded 指標是從上次驅動程式重新啟動 (因為停止並啟動或重新開機) 後開始累計的。只有在指標增加時才會出現問題。

若要取得 linklocal_allowance_exceeded 值,請對 eth0 執行下列命令:

ethtool -S eth0 | grep link

對於介面名為 ens5 的執行個體:

ethtool -S ens5 | grep link

解決 DNS 限流問題

如果 DNS 限流導致失敗,請執行下列其中一個動作來解決問題:

  • 在執行個體上啟用 DNS 快取
  • 增加應用程式上的 DNS 重試計時器。

相關資訊

了解流量鏡像目標概念

使用 Traffic Mirroring 來複製網路流量

AWS 官方已更新 9 個月前