如何确定对 Amazon 提供的 DNS 服务器的 DNS 查询是否因 VPC DNS 限流失败?

上次更新时间:2019 年 9 月 27 日

我对 Amazon 提供的 DNS 服务器的 DNS 查询失败。从我的实例进行的 DNS 查询是否因 VPC DNS 限流失败?

简短描述

Amazon 提供的 DNS 服务器实施每个弹性网络接口 (ENI) 每秒 1024 个数据包的限制。Amazon 提供的 DNS 服务器拒绝超出此限制的任何流量。

VPC 流日志不捕获您的应用程序向 Amazon 提供的 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:使用流量镜像

如果不能在您的使用案例中采用 tcpdump,您可以利用流量镜像查明 DNS 查询是否被限流。

注意:流量镜像仅适用于基于 Nitro 的实例。将收取流量镜像费用

首先,捕获流量数据:

1.    完成流量镜像先决条件
2.    创建流量镜像目标。确认目标弹性网络接口或网络负载均衡器允许端口 4789 上的入站流量。
3.    创建流量镜像筛选条件。在筛选条件设置下,确认已为网络服务 - 可选启用了 amazon-dns
4.    创建流量镜像会话。配置好流量镜像后,您可以收集镜像的流量并将其存储在流量镜像目标中。

然后,使用 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 限流。

DNS 限流问题的修复

如果您发现 DNS 故障的原因是 DNS 限流,您可以:


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助吗?