Pooja がリブート後も Amazon EC2
インスタンスに残るカスタム DNS サーバーを
割り当てる方法について解説します

Pooja_BLR0718

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

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

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

Amazon Linux、Amazon Linux 2

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

いずれのオプションを使用する場合でも、ifcfg-eth 0 ファイルの PEERDNS パラメータ値を yes に設定する必要があります。PEERDNS パラメータが no に設定されている場合、システムはインターフェイス設定ごとに指定されたカスタム DNS サーバーまたは DHCP により提供された情報を使用して、/etc/resolv.conf のファイルを更新できなくなります。

オプション 1

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

注: このファイルの編集は root ユーザー権限で行う必要があります。sudo -i で root になるか、すべてのコマンドを「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 コマンドの詳細については、dhclient.conf(5) – Linux man ページを参照してください。

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 ファイルを編集、または作成します。

注: このファイルの編集は root ユーザー権限で行う必要があります。sudo -i で root になるか、すべてのコマンドを「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 コマンドの詳細については、dhclient.conf(5) – Linux man ページを参照してください。

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

Ubuntu 18.04

Ubuntu 18.04 では、ネットワークインターフェイス設定は、デフォルトで netplan.io パッケージで処理され、スタブリゾルバーを使用する DNS クエリを処理するために、systemd-resolved サービスが有効化されます。スタブリゾルバー 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 設定がカスタマイズされていることがわかります。

オプション 1

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

1.    既存の netplan.io パッケージを削除し、その後、次の netplan GitHub から入手できる新しいバージョンをコンパイルしてインストールします。

https://github.com/CanonicalLtd/netplan

注 : Ubuntu リポジトリで利用できる 0.36.3 バージョン用の netplan.io パッケージには、DHCP で提供された DNS サーバー値をオーバーライドするオプションが含まれていません。

2.    通常、/etc/netplan ディレクトリに配置されている netplan インターフェイス設定ファイルを変更します。

3.    /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 サーバーを使用します。

4.    systemd-resolve コマンドを実行し、意図した DNS サーバーの IP アドレスが正しく取得されたことを確認してください。

systemd-resolve --status

オプション 2

1.    既存の netplan.io パッケージを削除し、その後、Ubuntu から ifupdown パッケージをダウンロードして、ネットワークインターフェイス設定を代わりに管理します。

2.    /etc/network/interfaces 設定ファイルと /etc/network/interfaces.d ディレクトリ内のファイルを手動で再作成して事前設定します。

この例は、1 つのインターフェイスを持つ、Ubuntu 18.04 インスタンスのデフォルトのファイルコンテンツです。

/etc/network/interfaces
source /etc/network/interfaces.d/*.cfg

/etc/network/interfaces.d/50-cloud-init.cfg
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

また、cloud-init で /etc/network/interfaces.d のファイルを自動的に再生成することもできます。これを行うには、/etc/network/interfaces ファイルが存在し、内容が次の通りであることを確認してください。

source /etc/network/interfaces.d/*.cfg

3.    clean パラメータとともに cloud-init コマンドを実行して、次回のリブート時に不足しているファイルを再生成します。

cloud-init clean

ご注意! clean パラメータを実行すると、cloud-init コマンドはインスタンスが作成されたばかりであるかのように実行され、cloud-init のマネージドファイルに適用した変更内容が失われる可能性があります。

4.    /etc/netplan ディレクトリが削除されたことを確認し、この記事の前半にある、Amazon Linux、Amazon Linux 2 セクションの下の手順に従ってください。

RHEL 7.5

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

オプション 1

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

注: このファイルの編集は root ユーザー権限で行う必要があります。sudo -i で root になるか、すべてのコマンドを「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 コマンドの詳細については、dhclient.conf(5) – Linux man ページを参照してください。

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

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

オプション 2

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

[main]
dns=none

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


このページは役に立ちましたか? はい | いいえ

AWS サポートナリッジセンターに戻る

サポートが必要ですか? AWS サポートセンターをご覧ください。

公開日: 2015 年 11 月 6 日

更新日: 2019 年 2 月 28 日