私のプライベート Amazon EC2 インスタンスは Amazon Linux、Ubuntu、または RHEL を実行しています。再起動中も存続する静的 DNS サーバーを EC2 インスタンスに割り当てるにはどうすればよいですか?
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 サーバーの詳細については、Amazon VPC の DHCP オプションセット を参照してください。
解決策
**重要:**EC2 インスタンスを変更する前に、Amazon マシンイメージ (AMI) または Amazon Elastic Block Store (Amazon EBS) スナップショットを使用してバックアップを作成してください。インスタンスのネットワーク設定を変更すると、そのインスタンスにアクセスできなくなる可能性があります。
Amazon Linux 2023
Amazon Linux 2023 はシステム解決方式を採用しています。詳細については、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] ファイルを編集または作成します。
**注:**このファイルを編集するには、root ユーザー権限が必要です。[sudo -i] で root になるか、すべてのコマンドを [sudo] で実装します。
2. [supersede] コマンドをファイルに追加して、ドメイン名サーバーをオーバーライドします。次の例では、[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 サーバー ([DNS1] と[** DNS2**]) を含むように変更された 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] ファイルを編集または作成します。
**注:**このファイルを編集するには、root ユーザー権限が必要です。[sudo -i] で root になるか、すべてのコマンドを [sudo] で実装します。
2. [supersede] コマンドをファイルに追加して、[ドメイン名サーバー] をオーバーライドします。次の例では、[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 サーバーをファイルに入力します。ネットワークマネージャーが [resolv.conf] ファイルを管理しないようにして、[resolv.conf] ファイルが DHCP が提供するDNS サーバーを無視するようにします。
オプション 1:
1. [/etc/dhcp/dhclient.conf] ファイルを編集または作成します。
**注:**このファイルを編集するには、root ユーザー権限が必要です。[sudo -i] で root になるか、すべてのコマンドを [sudo] で実装します。
2. [supersede] コマンドをファイルに追加して、ドメイン名サーバーをオーバーライドします。次の例では、[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 メインページ)
関連するコンテンツ
- 質問済み 5年前lg...
- 質問済み 4年前lg...
- 質問済み 5年前lg...
- 質問済み 3年前lg...
- AWS公式更新しました 3年前