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 キャッシュ」を参照してください。
- RHEL については、Red Hat カスタマーポータルの「dnsmasq を使用して RHEL に DNS キャッシュサーバーを設定する方法」を参照してください。
解決策
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
注意: dnsmasq の bogus-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 のインストールおよび設定を自動化するには、以下のオプションのいずれかを使用します:
- AutomateDnsmasq.sh バッシュスクリプト
- AutomateDnsmasq.cloudinit ディレクティブ
他の 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
関連情報
関連するコンテンツ
- 質問済み 2年前lg...
- 質問済み 3ヶ月前lg...
- 質問済み 8ヶ月前lg...
- 質問済み 6年前lg...
- AWS公式更新しました 1年前
- AWS公式更新しました 2年前
- AWS公式更新しました 1年前