Amazon EC2 Linux インスタンスで DNS 解決の失敗を回避するにはどうすればよいですか?
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 のすべてのバージョンに適用されます。別のディストリビューションを使用している場合、次のリストから該当するドキュメントを選択してください:
- Debian に関する情報については、debian.org ウェブサイトの「ローカルキャッシュ」を参照してください。
- Ubuntu に関する情報については、Ubuntu ウェブサイトの「ローカル DNS キャッシュ」を参照してください。
- Red Hat Enterprise Linux (RHEL) に関する情報については、Red Hat カスタマーポータルの「dnsmasq を使用して RHEL に DNS キャッシュサーバーを設定する方法」を参照してください。
解決策
dnsmasq を使用してローカル DNS キャッシュを設定する
ローカル DNS キャッシュを設定するには、dnsmasq を使用します。詳細については、thekelleys.org.uk ウェブサイトの「dnsmasq」を参照してください。
次の手順を実行します。
-
次のコマンドを実行して **dnsmasq ** サーバーをインストールします。
sudo yum install -y dnsmasq
-
次のコマンドを実行することで、dnsmasq を実行する専用のシステムユーザーを作成します。
sudo groupadd -r dnsmasq sudo useradd -r -g dnsmasq dnsmasq
注: dnsmasq は通常、ルートユーザー権限で実行されますが、起動後に別のユーザーに切り替わります。デフォルトでは、ユーザーは nobody です。**dnsmasq ** が別のユーザーに切り替わると、ルート権限はドロップされます。
-
次のコマンドを実行して dnsmasq.conf ファイルのコピーを作成します。
sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.ori
次のコマンドを実行してテキストエディターで設定ファイルを開きます。
sudo vim /etc/dnsmasq.conf
-
次のコマンド (例) を実行して /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
注: dnsmasq で bogus-priv オプションを使用すると、/etc/hosts にないプライベート IP 範囲の逆 DNS ルックアップが失敗します。 また、Dynamic Host Configuration Protocol (DHCP) リースファイルの逆 DNS ルックアップも失敗します。逆ルックアップを正常に実行したい場合は、bogus-priv をコメントアウトするか削除してください。
-
/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 で AMI が起動するよう、当該ファイルを調整します。または、DHCP オプションでカスタム DNS サーバーを指定するときにこのファイルを調整します。
-
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
-
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) ...
-
dnsmasq DNS キャッシュをデフォルトの DNS リゾルバーとして設定します。
注: DHCP が提供するデフォルトの DNS リゾルバーを抑制する必要があります。これを実施するには、/etc/dhcp/dhclient.conf ファイルを変更するか、作成します。詳細については、「再起動中も存続する静的 DNS サーバーを Amazon EC2 インスタンスに割り当てるにはどうすればよいですか?」を参照してください。続いて、次のコマンドを実行することで、デフォルトの DNS リゾルバーをフォールバックオプションとして設定します。
sudo bash -c "echo 'supersede domain-name-servers 127.0.0.1, 169.254.169.253;' >> /etc/dhcp/dhclient.conf"
-
変更を適用するため、次のいずれかの操作を行います。次の dhclient コマンドを実行します。
sudo dhclient
または、
ネットワークサービスを再起動する場合は、次のコマンドを実行します。sudo systemctl restart network
または、
インスタンスを再起動する場合は、次のコマンドを実行します。sudo reboot
注: Amazon Linux 2023 の場合は、dhclient の代わりに
sudo systemctl restart systemd-networkd.service
を実行してください。
インスタンスが 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 のインストールおよび設定を自動化するには、次のオプションのいずれかを使用します。
- AutomateDnsmasq.sh バッシュスクリプト
- AutomateDnsmasq.cloudinit ディレクティブ
AutomateDnsmasq.sh bash スクリプトの詳細については、GitHub ウェブサイトの「#!/bin/bash 」を参照してください。
**AutomateDnsmasq.cloudInit ** ディレクティブの詳細については、GitHub ウェブサイトの「#cloud-config」を参照してください。
他の Linux ディストリビューションに対して dnsmasq のインストールを自動化したい場合は、いずれかのファイルを使用して必要なカスタマイズを行います。
どちらのファイルも Amazon DNS サーバーの代替アドレス 169.254.169.253 を使用しているため、VPC インスタンスで実行できます。
起動時にいずれかのファイルを実行するには、ファイルの内容をユーザーデータフィールドに渡します。インスタンスでアクションを実行するには、Bash スクリプトをスタンドアロンスクリプトとして実行するか、AWS Systems Manager の run コマンドを使用することができます。
Bash スクリプトをスタンドアロンスクリプトとして実行するには、次の手順を実行します:
-
スクリプトをインスタンスにダウンロードして実行可能にするには、次のコマンドを実行します。
wget https://raw.githubusercontent.com/awslabs/aws-support-tools/master/EC2/AutomateDnsmasq/AutomateDnsmasq.shchmod +x AutomateDnsmasq.sh
-
ルートユーザーとして次のコマンドを実行するか、sudo を使用してください。
sudo ./AutomateDnsmasq.sh
関連情報
関連するコンテンツ
- 質問済み 24日前lg...
- 質問済み 6ヶ月前lg...
- 質問済み 25日前lg...
- AWS公式更新しました 8ヶ月前
- AWS公式更新しました 2年前