プライベート Amazon EC2 インスタンスが Amazon Linux、Ubuntu、または RHEL で実行中です。再起動中も持続する EC2 インスタンスに静的 DNS サーバーを割り当てる方法を教えてください。

最終更新日: 2021 年 11 月 8 日

静的な DNS サーバーエントリを使用して、再起動中も DNS サーバーが持続されるように Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを設定するにはどうすればよいですか?

簡単な説明

デフォルトで、Amazon Virtual Private Cloud (Amazon VPC) に関連付けられている Amazon EC2 インスタンスは、Dynamic Host Configuration Protocol (DHCP) を使用して起動の際に DNS サーバーアドレスをリクエストします。DHCP 応答は、ローカルの /etc/resolv.conf ファイルに書き込まれた DNS サーバーのアドレスを返します。カスタム DNS サーバーアドレスを使用して resolv.conf ファイルに手動で行った変更は、インスタンスを再起動すると失われます。この問題を解決する方法は、お使いの Linux ディストリビューションによって異なります。VPC と DNS サーバーの詳細については、「Amazon DNS サーバー」を参照してください。

解決方法

重要: Amazon EC2 インスタンスを変更する前に、Amazon マシンイメージ (AMI) または Amazon Elastic Block Store (Amazon EBS) スナップショットを使用して、バックアップを作成してください。インスタンスのネットワーク設定を変更すると、インスタンスに到達できなくなることがあります。

Amazon Linux、Amazon Linux 2

次の 2 つのオプションのいずれかを使用して、Amazon EC2 インスタンスを設定します。両方のオプションを適用すると、ifcfg-eth0 ファイルで指定された DNS サーバーが優先されます (オプション 2)。

いずれのオプションを使用する場合でも、ifcfg-eth0 ファイルの PEERDNS パラメータ値を yes に設定する必要があります。PEERDNS パラメータを no に設定すると、ifcfg-* ファイルで指定されている DNS サーバーまたは DHCP によって指定される DNS サーバーは無視されます。

オプション 1:

1.    /etc/dhcp/dhclient.conf ファイルを編集、または作成します。

注: このファイルを編集するには、ルートユーザー権限が必要です。sudo -i でルートになるか、sudo ですべてのコマンドを実行します。

2.    domain-name-servers を上書きするには、ファイルに supersede コマンドを追加します。次の例では、xxx.xxx.xxx.xxx の部分を DNS サーバー、またはインスタンスで使用したいサーバーの IP アドレスで置き換えます。

supersede domain-name-servers xxx.xxx.xxx.xxx, xxx.xxx.xxx.xxx;

上記の変更の後、インスタンスの再起動時に resolv.conf ファイルが更新され、dhclient ファイルで指定した DNS サーバーのみが含まれます。supersede コマンドの詳細については、Linux マニュアルページの dhclient.conf(5) を参照してください。

3.    インターフェイスごとの設定ファイル (/etc/sysconfig/network-scripts/ifcfg-*) で PEERDNS パラメータを yes に設定します。

4.    EC2 インスタンスを再起動します。

オプション 2:

1.    /etc/dhcp/dhclient.conf ファイル内の DNS サーバー値を上書きするには、インターフェイスごとの設定ファイル (/etc/sysconfig/network-scripts/ifcfg-*) の中で、カスタム DNS サーバーを指定します。

例えば、以下の例では、Amazon Linux インスタンスの /etc/sysconfig/network-scripts/ifcfg-eth0 ファイルはカスタム DNS サーバーを 2 つ (DNS 1 および DNS 2) 持てるように変更されていることが示されています。

DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
TYPE=Ethernet
USERCTL=yes
PEERDNS=yes
IPV6INIT=no
PERSISTENT_DHCLIENT=yes
RES_OPTIONS="timeout:2 attempts:5"
DHCP_ARP_CHECK=no
MTU="9001"
DNS1=8.8.8.8
DNS2=8.8.4.4

2.    インターフェイスごとの設定ファイル (/etc/sysconfig/network-scripts/ifcfg-*) で PEERDNS パラメータを yes に設定します。

Ubuntu 16.04

1.    /etc/dhcp/dhclient.conf ファイルを編集、または作成します。

注: このファイルを編集するには、ルートユーザー権限が必要です。sudo -i でルートになるか、sudo ですべてのコマンドを実行します。

2.    domain-name-servers を上書きするには、ファイルに supersede コマンドを追加します。次の例では、xxx.xxx.xxx.xxx の部分を DNS サーバー、またはインスタンスで使用したいサーバーの IP アドレスで置き換えます。

supersede domain-name-servers xxx.xxx.xxx.xxx, xxx.xxx.xxx.xxx;

この変更の後、インスタンスの再起動時に resolv.conf ファイルが更新され、dhclient ファイルで指定した DNS サーバーのみが含まれます。supersede コマンドの詳細については、Linux マニュアルページの dhclient.conf(5) を参照してください。

3.    インスタンスを再起動します。

Ubuntu 18.04

Ubuntu 18.04 では、デフォルトで netplan.io パッケージはネットワークインターフェイス設定を処理し、systemd-resolved サービスはスタブリゾルバーを使用して DNS クエリを処理します。スタブリゾルバー IP は /etc/resolv.conf に配置されています。

そして、/etc/resolv.conf ファイルは /run/systemd/resolve/stub-resolv.conf ファイルへの symlink です。/etc/dhcp/dhclient.conf の supersede ステートメントは、/etc/resolv.conf ファイルが次のいずれかに該当する場合、予期したとおりに動作しない場合があります。

  • ファイルがご使用のインスタンスの symlink でない。
  • このファイルは /run/systemd/resolve/resolv.conf など、別のファイルをポイントする symlink です。

これらの条件のいずれの場合においても、デフォルトの Ubuntu 18.04 設定がカスタマイズされていることがわかります。

DNS サーバー値を上書きするには、以下のステップを実行します。

1.    通常、Netplan は設定ファイルを /etc/netplan ディレクトリに保存します。/etc/netplan/99-custom-dns.yaml という名前のファイルを作成し、次の行とともに、事前設定します。プレースホルダー DNS サーバーの IP アドレスをご希望のアドレスに置き換えてください。

network:
    version: 2
    ethernets:
        eth0:         
            nameservers:
                    addresses: [1.2.3.4, 5.6.7.8]
            dhcp4-overrides:
                    use-dns: false

これらの変更をすべて行ったあとも、/etc/resolv.conf にはスタブリゾルバーの IP が表示されています。これは予想通りです。スタブリゾルバーの IP はご使用のオペレーティングシステムに対しローカルであり、バックグラウンドでは、スタブリゾルバーは前述の 99-custom-dns.yaml ファイルで指定した DNS サーバーを使用します。

2.    インスタンスを再起動します。

3.    systemd-resolve コマンドを実行し、システムが意図した DNS サーバーの IP アドレスを正しく取得したことを確認します。

systemd-resolve --status

RHEL 7.5

デフォルトでは、NetworkManager サービスが resolv.conf ファイルを管理します。このサービスは、その後、DHCP によって指定される DNS サーバーを使用してファイルを事前設定します。NetworkManager が resolv.conf ファイルの管理を停止することで、resolv.conf ファイルは DHCP によって指定される DNS サーバーを無視します。

オプション 1:

1.    /etc/dhcp/dhclient.conf ファイルを編集、または作成します。

注: このファイルを編集するには、ルートユーザー権限が必要です。sudo -i でルートになるか、sudo ですべてのコマンドを実行します。

2.    domain-name-servers を上書きするには、ファイルに supersede コマンドを追加します。次の例では、xxx.xxx.xxx.xxx の部分を DNS サーバー、またはインスタンスで使用したいサーバーの IP アドレスで置き換えます。

supersede domain-name-servers xxx.xxx.xxx.xxx, xxx.xxx.xxx.xxx;

この変更の後、インスタンスの再起動時に resolv.conf ファイルが更新され、dhclient ファイルで指定した DNS サーバーのみが含まれます。supersede コマンドの詳細については、Linux マニュアルページの dhclient.conf(5) を参照してください。

3.    インターフェイスごとの設定ファイル (/etc/sysconfig/network-scripts/ifcfg-*) で PEERDNS パラメータを yes に設定します。

4.    インスタンスを再起動します。

オプション 2:

1.    次の内容で /etc/NetworkManager/conf.d/disable-resolve.conf-managing.conf ファイルを作成します。

[main]
dns=none

2.    インスタンスを再起動し、手動で /etc/resolv.conf ファイルを設定します。


この記事は役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?