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 を使用します。詳細については、thekelleys.org.uk ウェブサイトの「dnsmasq」を参照してください。

次の手順を実行します。

  1. 次のコマンドを実行して **dnsmasq ** サーバーをインストールします。

    sudo yum install -y dnsmasq
  2. 次のコマンドを実行することで、dnsmasq を実行する専用のシステムユーザーを作成します。

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

    注: dnsmasq は通常、ルートユーザー権限で実行されますが、起動後に別のユーザーに切り替わります。デフォルトでは、ユーザーは nobody です。**dnsmasq ** が別のユーザーに切り替わると、ルート権限はドロップされます。

  3. 次のコマンドを実行して dnsmasq.conf ファイルのコピーを作成します。

    sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.ori

    次のコマンドを実行してテキストエディターで設定ファイルを開きます。

    sudo vim /etc/dnsmasq.conf
  4. 次のコマンド (例) を実行して /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 にないプライベート IP 範囲の逆 DNS ルックアップが失敗します。 また、Dynamic Host Configuration Protocol (DHCP) リースファイルの逆 DNS ルックアップも失敗します。逆ルックアップを正常に実行したい場合は、bogus-priv をコメントアウトするか削除してください。

  5. /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 サーバーを指定するときにこのファイルを調整します。

  6. 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
  7. 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)
    ...
  8. 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"
  9. 変更を適用するため、次のいずれかの操作を行います。次の 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 スクリプトをスタンドアロンスクリプトとして実行するには、次の手順を実行します:

  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公式更新しました 1年前
コメントはありません

関連するコンテンツ