私のプライベート Amazon EC2 インスタンスは Amazon Linux、Ubuntu、または RHEL を実行しています。再起動中も存続する静的 DNS サーバーを EC2 インスタンスに割り当てるにはどうすればよいですか?

所要時間3分
0

Amazon Elastic Compute Cloud (Amazon EC2) インスタンスに、再起動中も持続する静的 DNS サーバーエントリを設定したいと考えています。

簡単な説明

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

解決策

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

Amazon Linux 2023

Amazon Linux 2023 には systemd-resolvedが使用されています。詳細については、archlinux.org ウェブサイトの「resolved.conf (5)」を参照してください。

リゾルバーの設定

[/etc/systemd/resolved.conf] ファイルを編集し、[DNS] オプションと **[ドメインオプション]**を変更します。

# /etc/systemd/resolved.conf

[Resolve]
DNS=8.8.8.8
Domains=~.

または、ドロップインを作成してください。例えば、**[/etc/systemd/resolved.conf.d/dns\ _servers.conf]**などです。

#/etc/systemd/resolved.conf.d/dns_servers.conf

[Resolve]
DNS=8.8.8.8 8.8.4.4
Domains=~.

注: resolved.conf(5) で [Domains=~ .] オプションを設定するときは、次の点に注意してください。

  • [Domains=~.] オプションが設定されていない場合、systemd-solved はリンクごとの設定で指定されたリンクごとの DNS サーバーを使用する可能性があります。
  • [Domains=~.] オプションは、リンクごとの設定で指定されたより具体的な検索ドメインと一致するドメイン名のクエリには影響しません。ドメイン名は引き続きそれぞれのリンクごとの DNS サーバーを使用して解決されます。

リンクごとの設定の詳細については、archlinux.org ウェブサイトの systemd-networkd #network ファイルを参照してください。

/etc/resolv.conf がポイントする場所を変更する

デフォルトでは、/etc/resolv.conf はローカルホストのスタブリゾルバーをポイントします。これを変更するには、別の内容でファイルを再作成するか、ローカルホストスタブリゾルバー以外の場所をポイントするファイルを再作成します。たとえば、/run/systemd/resolve/resolv.conf を指定すると、systemd-solve が使用するサーバーのリストがフラット化されて表示されます。

resolvectl status コマンドを使用して設定をテストできます。例えば、resolvectl で amazonaws.com にクエリを実行し、出力を確認できます。

Amazon Linux、Amazon Linux 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.    supersede コマンドをファイルに追加して、domain-name-servers をオーバーライドします。次の例では、xxx.xxx.xxx.xxx を、インスタンスで使用する 1 つまたは複数の 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 サーバーを指定します。

例えば、次の例は 2 つのカスタム DNS サーバー (DNS1DNS2) を含むように変更された Amazon Linux インスタンスの /etc/sysconfig/network-scripts/ifcfg-eth0 ファイルを示しています。

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.    supersede コマンドをファイルに追加して、domain-name-servers をオーバーライドします。次の例では、xxx.xxx.xxx.xxx を、インスタンスで使用する 1 つまたは複数の 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 ファイルへのシンボリックリンクになります。/etc/dhcp/dhclient.conf ファイルで次のいずれかが当てはまる場合、/etc/dhcp/dhclient.conf の置き換えステートメントが想定どおりに機能しない可能性があります。

  • このファイルはインスタンスのシンボリックリンクではありません。
  • このファイルは、/run/systemd/resolve/resolv.confなどの別のファイルをポイントするシンボリックリンクです。

これらの条件はいずれも、デフォルトの Ubuntu 18.04 構成のカスタマイズを示しています。

DNS サーバーの値を上書きするには、次の手順を実行します。

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

cat << 'EOF' | sudo tee /etc/netplan/99-custom-dns.yaml
network:
  version: 2
  ethernets:
    ens5:
      nameservers:
        addresses: [1.1 .1 .1, 1.0 .0 .1]
      dhcp4-overrides:
        use-dns: false
        use-domains: false
EOF

注: 前の例では、インターフェイスが ens5として指定されています。インターフェイス名がセットアップのインターフェイスと一致するようにしてください。インターフェイス名を確認するには、ip a コマンドを使用します。

2.    以下のコマンドを実行します。

netplan generate

これらの変更を行った後も、/etc/resolv.confでスタブリゾルバー IP を引き続き確認できます。これは想定どおりです。スタブリゾルバー IP は、ご使用のオペレーティングシステムに固有です。スタブリゾルバーはバックグラウンドで、前述の 99-custom-dns.yaml ファイルで指定した DNS サーバーを使用します。

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

4.    systemd-resolve コマンドを実行して、システムが目的の DNS サーバの IP アドレスを正しく取得していることを確認します。

systemd-resolve --status

RHEL 7.5

デフォルトでは、NetworkManager サービスが [resolv.conf] ファイルを管理します。次に、サービスは DHCP が提供する DNS サーバーをファイルに入力します。NetworkManager が resolv.conf ファイルを管理しないようにして、DHCP が提供する DNS サーバーが resolv.conf ファイルで無視されるようにします。

オプション 1:

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

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

2.    supersede コマンドをファイルに追加して、domain-name-servers をオーバーライドします。次の例では、xxx.xxx.xxx.xxx を、インスタンスで使用する 1 つまたは複数の 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/90-DNS-None.conf ファイルを以下の内容で作成します。

[main]
dns=none

2.    インスタンスを再起動し、/etc/resolv.conf ファイルに手動でデータを入力します。

関連情報

networkmanager.conf(5) (Linux メインページ)

AWS公式
AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ