如何判斷我對 Amazon 提供的 DNS 伺服器的 DNS 查詢是否因 VPC DNS 限流而失敗?

2 分的閱讀內容
0

我對 Amazon 提供的 DNS 伺服器的 DNS 查詢失敗或逾時。來自我的執行個體的 DNS 查詢是否因 VPC DNS 限流而失敗?

簡短描述

Amazon 提供的 DNS 伺服器會強制執行限制每個彈性網路介面每秒 1024 個封包。Amazon 提供的 DNS 伺服器拒絕任何超過此限制的流量。

VPC 流程日誌不會擷取應用程式傳送至 Amazon 提供的 DNS 伺服器的流量。您可以使用封包擷取或 Traffic Mirroring 識別 DNS 查詢失敗的原因。

注意: Amazon Route 53 查詢日誌只會擷取到達 VPC.2 解析程式的流量 (AmazonProvidedDNS)。但是,DNS 查詢會在彈性網路介面層級受到限流。因此,限流的查詢不會出現在查詢日誌中。

解決方法

首先,使用下列其中一種方法識別 DNS 查詢失敗的來源。然後,如果您判斷原因是 DNS 限流,請使用下列其中一個建議的修正程式。

判斷 DNS 查詢失敗的來源

選項 1: 使用 tcpdump (僅適用於 Linux)

1.    使用下列命令在 EC2 執行個體上取得輪換封包擷取。下列命令會擷取封包的初始 350 個位元組,並在覆寫舊封包擷取時每個儲存 20 個 100 MB 的檔案。

sudo tcpdump -i eth0 -s 350 -C 100 -W 20 -w /var/tmp/$(curl http://169.254.169.254/latest/meta-data/instance-id).$(date +%Y-%m-%d:%H:%M:%S).pcap

2.    執行下列 Linux 命令,以判斷傳送的 DNS 查詢數量。

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

3.    如果 DNS 查詢數量每秒大於或等於 1024,則任何其他查詢會受到限流。

選項 2: 使用 Traffic Mirroring

如果在您的使用案例中使用 tcpdump 不可行,則可以利用 Traffic Mirroring 識別 DNS 查詢是否受到限流。

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

首先,擷取流量資料:

1.    完成 Traffic Mirroring 先決條件

2.    建立流量鏡像目標。確認目標彈性網路介面或 Network Load Balancer 允許連接埠 UDP 4789 上的傳入流量。

3.    建立流量鏡像篩選條件。針對篩選條件設定,確認已為網路服務 - 選用啟用 amazon-dns

4.    建立流量鏡像工作階段。設定 Traffic Mirroring 之後,系統會收集鏡像流量並將其儲存在流量鏡像目標上。

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

然後,使用 Wireshark 分析擷取的資料:

1.    在 Wireshark 中開啟擷取的流量。

2.    選擇統計資料標籤。

3.    選取 I/O 圖表並清除所有選項。

4.    (僅適用於 Linux) 在顯示篩選條件下,使用 VXLAN 網路識別符和 DNS 查詢旗標新增篩選條件。例如,如果 VXLAN 網路識別符為 53,而 DNS 查詢旗標是 0x0100,則圖表的顯示篩選條件為 (vxlan.vni == 53) && (dns.flags == 0x0100)

5.    檢閱圖表以檢查它是否在 1024 (Amazon 提供的 DNS 伺服器的封包每秒限制) 附近企穩。如果圖表在該值附近企穩,則表示鏡像來源上正在進行 DNS 限流。

選項 3: 彈性網路介面卡 (ENA) 驅動程式網路效能指標

如果您的 EC2 執行個體正在執行下列其中一個 ENA 驅動程式版本,您可以使用 linklocal_allowance_exceeded 指標檢閱 DNS 限流的即時指標:

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

linklocal_allowance_exceeded 指標表示由於超出本機服務的 PPS 速率限額而重塑和捨棄的封包數量。本機服務的範例包括 Amazon VPC DNS 服務、執行個體中繼資料服務 (IMDS) 和 Amazon Time Sync Service。您可以用多個間隔驗證此指標,以觀察計數是否增加。由於此指標自上次重新啟動驅動程式 (通常是由於停止和啟動或重新啟動執行個體) 以來是累計的,因此此指標只有在增加時才有意義。

若要擷取指標 linklocal_allowance_exceeded 值,請執行下列命令:

ethtool -S eth0

更正 DNS 限流問題

如果您發現 DNS 失敗的原因是 DNS 限流,您可以:

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

相關資訊

Traffic Mirroring 配額和考量

使用 Traffic Mirroring

監控 EC2 執行個體的網路效能

AWS 官方
AWS 官方已更新 2 年前