Amazon EC2 Linux インスタンスで DNS 解決の失敗を回避するにはどうすればよいですか?

所要時間3分
0

Amazon Elastic Compute Cloud (Amazon EC2) Linux インスタンスを使用して DNS 解決の失敗を回避したいと考えています。

簡単な説明

CPU とネットワークの使用量を減らし、DNS 解決の失敗を回避するには、DNS キャッシュを適用します。

DNS キャッシュを使用して外部 DNS リソースをクエリする場合、キャッシュは、繰り返される DNS クエリのほとんどにローカルで応答します。キャッシュがこれを行う場合、ネットワーク経由の DNS リゾルバーとのやり取りは実施しません。次の例のような外部 DNS リソースをクエリできます:

  • Amazon Relational Database Service (Amazon RDS)
  • Amazon ElastiCache
  • Amazon Simple Storage Service (Amazon S3)

以下の手順は Amazon Linux のすべてのバージョンに適用されます。別のディストリビューションを使用している場合、次のリストから該当するドキュメントを選択してください:

解決策

dnsmasq を使用してローカル DNS キャッシュを設定する

ローカル DNS キャッシュを設定するには、dnsmasq (DHCP およびキャッシュ DNS サーバー) を使用します。dnsmasq の概要については、dnsmasq のドキュメントを参照してください。

1.    次の dnsmasq サーバーをインストールします:

sudo yum install -y dnsmasq

2.    dnsmasq を実行する専用のシステムユーザーを作成します:

sudo groupadd -r dnsmasqsudo useradd -r -g dnsmasq dnsmasq

注意: dnsmasq は通常 root ユーザーとして実行されますが、起動後に別のユーザーに変更されます (デフォルトのユーザーは nobody です)。これにより root 権限がドロップされます。

3.    dnsmasq.conf ファイルのコピーを作成します:

sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig

4.    設定ファイルをテキストエディタで開きます (例: vim):

sudo vim /etc/dnsmasq.conf

5.    /etc/dnsmasq.conf ファイルを次の例のように編集します:

# Server Configurationlisten-address=127.0.0.1
port=53
bind-interfaces
user=dnsmasq
group=dnsmasq
pid-file=/var/run/dnsmasq.pid

# Name resolution options
resolv-file=/etc/resolv.dnsmasq
cache-size=500
neg-ttl=60
domain-needed
bogus-priv

注意: dnsmasqbogus-priv オプションを使用すると、/etc/hosts または DHCP リースファイルにないプライベート IP 範囲の逆 DNS ルックアップが失敗します。逆ルックアップを正常に実行したい場合は、bogus-privをコメントアウトするか削除してください。詳細については、dnsmasq マニュアルページの**-b,--bogus-priv** を参照してください。

6.    /etc/resolv.dnsmasq ファイルを作成し、 Amazon DNS サーバー または DHCP オプションセットで指定したカスタムドメイン名サーバーを設定します:

sudo bash -c "echo 'nameserver 169.254.169.253' > /etc/resolv.dnsmasq"

注意: DNS サーバーの場所の詳細については、 「DHCP とは?」を参照してください。場合によっては、このネットワークのネームサーバーを使用する場合、 /etc/resolv.dnsmasq ファイルを調整する必要があります。dnsmasq キャッシュを持つインスタンスから AMI を作成する場合、別の CIDR を持つ別の VPC で起動するようファイルを調整します。または、DHCP オプションでカスタム DNS サーバーを指定するときにファイルを調整します。

7.    dnsmasq サーバーを再起動し、起動時にサービスが開始されるように設定します:

Amazon Linux 1

sudo service dnsmasq restart
sudo chkconfig dnsmasq on

Amazon Linux 2 と Amazon Linux 2023

sudo systemctl restart dnsmasq.service
sudo systemctl enable dnsmasq.service

8.    dnsmasq が正しく動作することを確認するには、dig コマンドを使用します:

dig aws.amazon.com @127.0.0.1

応答が次の例のようであれば、 dnsmasq キャッシュは正しく機能します:

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.56.amzn1 <<>> aws.amazon.com @127.0.0.1;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25122
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;aws.amazon.com.            IN    A

;; ANSWER SECTION:
aws.amazon.com.        41    IN    A    54.239.31.69

;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
...

9.    dnsmasq DNS キャッシュをデフォルトの DNS リゾルバーとして設定します。

注意:DHCP が提供するデフォルトの DNS リゾルバーを抑制する必要があります。これを実施するには、/etc/dhcp/dhclient.conf ファイルを変更または作成してください。詳細については、「プライベート Amazon EC2 インスタンスは Amazon Linux、Ubuntu、または RHEL を実行しています」を参照してください。DNS サーバーを再起動中も存続する静的 EC2 インスタンスに割り当てるにはどうすればよいですか?

10.    デフォルトの DNS リゾルバーをフォールバックオプションとして設定します:

sudo bash -c "echo 'supersede domain-name-servers 127.0.0.1, 169.254.169.253;' >> /etc/dhcp/dhclient.conf"

11.    変更を適用するには、dhclient コマンドを実行するか、ネットワークサービスを再起動するか、インスタンスを再起動します:

sudo dhclient

-or-

sudo systemctl restart network

-or-

sudo reboot

インスタンスが DNS キャッシュを使用していることを確認するには、dig コマンドを実行します:

dig aws.amazon.com

応答が、応答サーバーが 127.0.0.1 であることを示している場合、DNS キャッシュは正しく機能しています:

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.56.amzn1 <<>> aws.amazon.com;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1028
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;aws.amazon.com.            IN    A

;; ANSWER SECTION:
aws.amazon.com.        55    IN    A    54.239.31.69

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1) <<<-------
...

自動 dnsmasq

Amazon Linux で DNS リゾルバーとして dnsmasq のインストールおよび設定を自動化するには、以下のオプションのいずれかを使用します:

他の Linux ディストリビューションに対して dnsmasq のインストールを自動化したい場合は、いずれかのファイルを使用して必要なカスタマイズを行います。

どちらのファイルも Amazon DNS サーバーの代替アドレス 169.254.169.253 を使用しているため、VPC インスタンスで実行できます。

起動時にいずれかのファイルを実行するには、ファイルの内容をユーザーデータフィールドに渡します。Bash スクリプトはインスタンス上で、スタンドアロンスクリプトとして、またはAWS Systems Manager の実行コマンドを使用して、アクションを実行することができます。

Bash スクリプトをスタンドアロンスクリプトとして実行するには、次の手順を実行します:

1.    インスタンスにスクリプトをダウンロードし、実行可能にします:

wget https://raw.githubusercontent.com/awslabs/aws-support-tools/master/EC2/AutomateDnsmasq/AutomateDnsmasq.shchmod +x AutomateDnsmasq.sh

2.    ルートユーザーとして次のコマンドを実行するか、 sudo を使用してください:

sudo ./AutomateDnsmasq.sh

関連情報

Amazon EC2 インスタンスの IP アドレス

AWS公式
AWS公式更新しました 9ヶ月前
コメントはありません

関連するコンテンツ