VPC DNS スロットリングが、Amazon が提供している DNS サーバーへのDNS クエリの失敗の原因となっているかどうかを判断する方法を教えてください。

最終更新日 : 2019 年 9 月 27 日

Amazon が提供しているDNS サーバーへの DNS クエリが失敗しています。VPC DNS スロットリングが原因で、インスタンスからの DNS クエリが失敗しているのでしょうか?

簡単な説明

Amazon が提供する DNS サーバーでは、Elastic Network Interface (ENI) ごとに 1 秒あたり 1024 パケットという制限が課されます。Amazon が提供する DNS サーバーは、この制限を超えたトラフィックをすべて拒否します。

VPC フローログは、アプリケーションが Amazon が提供する DNS サーバーに送信するトラフィックをキャプチャしません。パケットキャプチャまたはトラフィックミラーリングを使用すれば、DNS クエリの失敗の原因を特定することができます。

解決方法

まず、次のいずれかの方法を使用して、DNS クエリの失敗の原因を特定します。次に、原因が DNS スロットリングであると判断された場合には、以下で推奨する修正のいずれかを適用します。

オプション #1 : tcpdump を使用する (Linux のみ)

1.    次のコマンドを使用して、EC2 インスタンスでパケットキャプチャをローテーションします。次のコマンドは、パケットの最初の 350 バイトをキャプチャするとともに、古いパケットキャプチャを上書きしながら、それぞれ 100 MB の 20のファイルを保存します。

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 クエリの数が 1 秒あたり 1024 以上の場合、それを越すクエリはスロットリングされます。

オプション #2: トラフィックミラーリングを使用する

自分のユースケースで tcpdump を使用できない場合は、トラフィックミラーリングを利用して DNS クエリがスロットリングされているかどうかを確認します。

注意 : トラフィックミラーリングは Nitro ベースのインスタンスでのみ使用できます。トラフィックミラーリングの料金 が適用されます。

まず、トラフィックデータをキャプチャします。

1.    トラフィックミラーリングの前提条件が満たされていることを確認します。
2.    トラフィックミラーのターゲットを作成します。ターゲットの Elastic Network Interface または Network Load Balancer がポート 4789 でインバウンドトラフィックを許可していることを確認します。
3.    Traffic Mirror フィルターを作成しますフィルターの設定で、amazon-dnsNetwork services - optional で有効になっていることを確認します。
4.    Traffic Mirror セッションを作成します。トラフィックミラーリングを設定すると、ミラーリングされたトラフィックが収集され、トラフィックミラーターゲットに保存されます。

次に、Wireshark を使用してキャプチャされたデータを分析します。

1.    Wireshark でキャプチャされたトラフィックを開きます。
2.    [Statistics (統計)] タブを選択します。
3.    [I/O Graph (I/O グラフ)] を選択し、すべてのオプションをオフにします。
4.    (Linux のみ) [Display Filter (フィルターの表示)] で、[VXLAN Network Identifier (VXLAN ネットワーク識別子)] と [DNS] クエリフラグを使用して、フィルターを追加します。たとえば、[VXLAN Network Identifier] が 53 で、DNS クエリフラグが 0x0100 の場合、グラフの表示フィルターを (vxlan.vni == 53) && (dns.flags == 0x0100) にします。
5.    グラフをレビューして、1024 (Amazon が提供する DNS サーバーの 1 秒あたりのパケット数の制限) の付近でグラフに平坦な部分ができているかどうかを確認します。グラフがこの値の付近で平坦になっている場合には、DNS スロットリングが行われています。

DNS スロットリングの問題の修正

DNS エラーの原因が DNS スロットリングである場合、以下を実行します。