DHCP オプションセットのドメイン名を変更すると EC2 のホスト名も変更されるのか確認してみた
DHCP オプションセットのドメイン名(Domain Name
)を変更すると既存の EC2 インスタンスのデフォルト設定のホスト名は変更されるのか?という素朴な疑問を確認してみました。
DNS サーバー指定は変更することありますが、ドメイン名の方を深く考えたことがなかったので確認してみます。
確認結果
DHCP オプションセットのドメイン名を変更すると、既存の EC2インスタンスのホスト名(ドメイン名部分)は変更される。
# Before $ hostname ip-10-0-1-42.ap-northeast-1.compute.internal # ---------------------------------------------------------- # DHCP オプションセットの変更と、EC2インスタンスの停止開始を実施 # ---------------------------------------------------------- # After $ hostname ip-10-0-1-42.hoge.example.com
検証環境
Amazon Linux 2のみで確認しています。
項目 | 値 |
---|---|
OS | Amazon Linux 2 |
AMI | amzn2-ami-kernel-5.10-hvm-2.0.20220316.0-x86_64-gp2 |
Route 53 Resolver で名前解決できる設定としています。
項目 | 値 | 備考 |
---|---|---|
enableDnsHostnames | true | VPC がパブリック IP アドレスを持つインスタンスへのパブリック DNS ホスト名の割り当てをサポートするかどうかを決定します。 |
enableDnsSupport | true | VPC が Amazon 提供の DNS サーバーを介した DNS 解決策をサポートするかどうかを決定します。 |
詳細: VPC の DNS 属性を変更する - Amazon Virtual Private Cloud
DHCP オプションセットのドメイン名とは
VPC で起動する EC2 のパブリック IPv4 アドレスに付加されるドメイン名とのことです。
Domain name: The domain name that will be appended to the public IPv4 addresses of EC2 instances launched into the VPC.
ドメイン名は東京リージョン(ap-northeast-1
)であればap-northeast-1.compute.internal
というドメイン名になります。
In the default options set, for VPCs in AWS Region us-east-1, the value is ec2.internal. For VPCs in other Regions, the value is region.compute.internal (for example, ap-northeast-1.compute.internal).
引用: Work with DHCP options sets - Amazon Virtual Private Cloud
ところで、バージニア北部(us-east-1
)だけはec2.internal
なんですね。それと、プライベートではなくパブリックなの?という新たな疑問が生まれました。
DHCP オプションセットのデフォルト設定
EC2 インスタンスのホスト名はhoge.ap-northeast-1.compute.internal
となることがドキュメントからわかりました。既存の EC2インスタンスが存在している状態で DHCP オプションセットのドメイン名を変更したときの影響がわかりませんでした。地味な確認作業の記録です。
EC2 の確認
EC2 インスタンスを起動しました。マネジメントコンソールからip-10-0-1-42.ap-northeast-1.compute.internal
と確認できるのは、ホスト名のタイプと、プライベート IPv4 DNS名です。パブリック IPv4 DNS は別のドメイン名が付与されています。やはりプライベート IPv4 の名前なのでは?
対象 | 値 |
---|---|
EC2 のプライベート IPv4 DNS | ap-northeast-1.compute.internal |
EC2 のパブリック IPv4 DNS | ap-northeast-1.compute.amazonaws.com |
EC2 インスタンスにログインしてホスト名を確認するとip-10-0-1-42.ap-northeast-1.compute.internal
表示されました。
$ hostname ip-10-0-1-42.ap-northeast-1.compute.internal
resolv.conf
を確認するとsearch
のドメイン名にap-northeast-1.compute.internal
が指定されています。
$ cat /etc/resolv.conf ; generated by /usr/sbin/dhclient-script search ap-northeast-1.compute.internal options timeout:2 attempts:5 nameserver 10.0.0.2
nslookup
コマンドでホスト名を引いてみます。ドメイン名を省略しても名前解決できています。
$ nslookup ip-10-0-1-42 Server: 10.0.0.2 Address: 10.0.0.2#53 Non-authoritative answer: Name: ip-10-0-1-42.ap-northeast-1.compute.internal Address: 10.0.1.42 $ nslookup ip-10-0-1-42.ap-northeast-1.compute.internal Server: 10.0.0.2 Address: 10.0.0.2#53 Non-authoritative answer: Name: ip-10-0-1-42.ap-northeast-1.compute.internal Address: 10.0.1.42
DHCP の設定を確認したいので先にネットワークインタフェースを確認します。
$ ip -4 a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000 inet 10.0.1.42/24 brd 10.0.1.255 scope global dynamic eth0 valid_lft 3464sec preferred_lft 3464sec
eth0
のDHCPの設定情報を確認します。domain-name
でap-northeast-1.compute.internal
が設定されています。DHCP のリース期間を調べたことなかったのですが1時間(3600秒)なんですね。
$ cat /var/lib/dhclient/dhclient--eth0.lease lease { interface "eth0"; fixed-address 10.0.1.42; option subnet-mask 255.255.255.0; option routers 10.0.1.1; option dhcp-lease-time 3600; option dhcp-message-type 5; option domain-name-servers 10.0.0.2; option dhcp-server-identifier 10.0.1.1; option interface-mtu 9001; option broadcast-address 10.0.1.255; option host-name "ip-10-0-1-42"; option domain-name "ap-northeast-1.compute.internal"; renew 3 2022/03/23 02:36:40; rebind 3 2022/03/23 03:05:44; expire 3 2022/03/23 03:13:14; }
Internal ELB の確認
EC2 のパブリックIPv4アドレスが対象と書いてありましたが、Internal ELB なら DHCP オプションセットのドメイン名の影響受けるのかな?と思って作ってみました。そして気がついたのですが Internal ELB でも付与されるドメイン名は ELB のもので関係ありませんでした。
紛らわしいですがap-northeast-1
以降を比較してみてください。
対象 | 値 |
---|---|
EC2 のプライベート IPv4 DNS | ap-northeast-1.compute.internal |
EC2 のパブリック IPv4 DNS | ap-northeast-1.compute.amazonaws.com |
ELB のドメイン名 | ap-northeast-1.elb.amazonaws.com |
作成してしまったので名前解決だけできることを確認しました。Internal ELBなのでサブネット違いのプライベートIPアドレスが返ってきました。
$ nslookup internal-DomainNameCheckInternalALB-1896622359.ap-northeast-1.elb.amazonaws.com Server: 10.0.0.2 Address: 10.0.0.2#53 Non-authoritative answer: Name: internal-DomainNameCheckInternalALB-1896622359.ap-northeast-1.elb.amazonaws.com Address: 10.0.18.64 Name: internal-DomainNameCheckInternalALB-1896622359.ap-northeast-1.elb.amazonaws.com Address: 10.0.17.128
DHCP オプションセットを変更
既存の DHCP オプションセットの変更はできないため、ドメイン名をhoge.example.com
とした DHCP オプションセットを新規作成しました。
VPC のオプションセットを変更して反映させました。
DHPC オプションセット変更後
EC2 インスタンスのホスト名に変化はあるのか?ここからが本題です。
EC2 の確認
リース期間が1時間でしたので放置して更新を待ってみました。更新されたタイミングでoption doman-name
が変更されていました。
$ cat /var/lib/dhclient/dhclient--eth0.lease lease { interface "eth0"; fixed-address 10.0.1.42; option subnet-mask 255.255.255.0; option routers 10.0.1.1; option dhcp-lease-time 3600; option dhcp-message-type 5; option domain-name-servers 10.0.0.2; option dhcp-server-identifier 10.0.1.1; option interface-mtu 9001; option broadcast-address 10.0.1.255; option host-name "ip-10-0-1-42"; option domain-name "ap-northeast-1.compute.internal"; renew 3 2022/03/23 03:00:14; rebind 3 2022/03/23 03:29:10; expire 3 2022/03/23 03:36:40; } lease { interface "eth0"; fixed-address 10.0.1.42; option subnet-mask 255.255.255.0; option routers 10.0.1.1; option dhcp-lease-time 3600; option dhcp-message-type 5; option dhcp-server-identifier 10.0.1.1; option interface-mtu 9001; option broadcast-address 10.0.1.255; option host-name "ip-10-0-1-42"; option domain-name "hoge.example.com"; renew 3 2022/03/23 03:26:49; rebind 3 2022/03/23 03:52:44; expire 3 2022/03/23 04:00:14; }
ドキュメントの記載通り、数時間以内に設定値が反映されました。
If you associate a new set of DHCP options with the VPC, any existing instances and all new instances that you launch in that VPC use the new options. You don't need to restart or relaunch your instances. Instances automatically pick up the changes within a few hours, depending on how frequently they renew their DHCP leases. If you prefer, you can explicitly renew the lease using the operating system on the instance.
引用: Work with DHCP options sets - Amazon Virtual Private Cloud
resolv.conf
を確認してみるとhoge.example.com
が追加されていました。この挙動はOSや、バージョンによって異なる可能性があります。
$ cat /etc/resolv.conf options timeout:2 attempts:5 ; generated by /usr/sbin/dhclient-script search hoge.example.com ap-northeast-1.compute.internal nameserver 10.0.0.2
ホスト名を確認してみると変化はありません。
$ hostname ip-10-0-1-42.ap-northeast-1.compute.internal
hoge.example.com
ドメイン指定すると名前解決できません。
$ nslookup ip-10-0-1-42.ap-northeast-1.compute.internal Server: 10.0.0.2 Address: 10.0.0.2#53 Non-authoritative answer: Name: ip-10-0-1-42.ap-northeast-1.compute.internal Address: 10.0.1.42 $ nslookup ip-10-0-1-42.hoge.example.com Server: 10.0.0.2 Address: 10.0.0.2#53 ** server can't find ip-10-0-1-42.hoge.example.com: NXDOMAIN
それもそのはずでカスタムDNSドメイン名を使うなら Route 53 の Private hosted zones の設定が必要になります。
To access the resources in your VPC using custom DNS domain names, such as example.com, instead of using private IPv4 addresses or AWS-provided private DNS hostnames, you can create a private hosted zone in Route 53. A private hosted zone is a container that holds information about how you want to route traffic for a domain and its subdomains within one or more VPCs without exposing your resources to the internet.
引用: DNS attributes for your VPC - Amazon Virtual Private Cloud
Private hosted zone を作成しました。
レコード追加しました。
hoge.example.com
で名前解決できるようになりました。
$ nslookup ip-10-0-1-42.hoge.example.com Server: 10.0.0.2 Address: 10.0.0.2#53 Non-authoritative answer: Name: ip-10-0-1-42.hoge.example.com Address: 10.0.1.42
search の指定順序から hoge.example.com
が優先されるため、nslookup ip-10-0-1-42
は以下の様にhoge.example.com
の名前で返ってきます。
$ nslookup ip-10-0-1-42 Server: 10.0.0.2 Address: 10.0.0.2#53 Non-authoritative answer: Name: ip-10-0-1-42.hoge.example.com Address: 10.0.1.42
resolv.con
を手動で編集して、search の指定順序を変更します。ap-northeast-1.compute.internal
が優先されるはずです。
$ cat /etc/resolv.conf options timeout:2 attempts:5 ; generated by /usr/sbin/dhclient-script ; search hoge.example.com ap-northeast-1.compute.internal search ap-northeast-1.compute.internal hoge.example.com nameserver 10.0.0.2
期待した通りap-northeast-1.compute.internal
で返ってきます。
$ nslookup ip-10-0-1-42 Server: 10.0.0.2 Address: 10.0.0.2#53 Non-authoritative answer: Name: ip-10-0-1-42.ap-northeast-1.compute.internal Address: 10.0.1.42
ここまでの作業で以下のことを確認できました。
DHCP オプションセット変更後、起動したまま放置していた EC2インスタンスは
- EC2 のホスト名(
ip-10-0-1-42.ap-northeast-1.compute.internal
)は変更されない resolv.conf
の search の指定は DHCP オプションセットで指定したドメイン名が優先される変更が入る
再起動してみた
ホスト名は変更されませんでした。
$ hostname ip-10-0-1-42.ap-northeast-1.compute.internal
手動で書き換えていたresolv.conf
は DHCP からの設定に置き換わり戻りました。
$ cat /etc/resolv.conf options timeout:2 attempts:5 ; generated by /usr/sbin/dhclient-script search hoge.example.com ap-northeast-1.compute.internal nameserver 10.0.0.2
停止・開始してみた
ホスト名が変更されました。
$ hostname ip-10-0-1-42.hoge.example.com
search に登録されるドメイン名もhoge.example.com
のみとなりました。
$ cat /etc/resolv.conf options timeout:2 attempts:5 ; generated by /usr/sbin/dhclient-script search hoge.example.com nameserver 10.0.0.2
$ nslookup ip-10-0-1-42 Server: 10.0.0.2 Address: 10.0.0.2#53 Non-authoritative answer: Name: ip-10-0-1-42.hoge.example.com Address: 10.0.1.42
再起動と、停止・開始では大きな違いがありました。だけど、マネジメントコンソールから確認できるホスト名には変化ありませんでした。
プライベート IPv4 アドレス(Aレコード)のみが返されるとあるので、Aレコードを引けていないのかと思ったのですが、Private hosted zone を設定しレコード追加し引けているのではこの件ではないようです。
IP address-based naming (IPBN): The legacy naming scheme where, when you launch an instance, the private IPv4 address of the instance is included in the hostname of the instance. The IP address-based name exists for the life of the EC2 instance. When used as the Private DNS hostname, it will only return the private IPv4 address (A record).
引用: Amazon EC2 instance hostname types - Amazon Elastic Compute Cloud
新規に起動した EC2 インスタンス
DHCP オプションセット変更後の VPC に新たに EC2 インスタンスを起動して違いを確認します。
新規 EC2 の確認
マネジメントコンソール上、ホスト名はip-10-0-1-138.ap-northeast-1.compute.internal
と表示されています。
resolv.conf
はhoge.example.com
のみ登録されています。デフォルトのドメイン名は登録されていません。
$ cat /etc/resolv.conf options timeout:2 attempts:5 ; generated by /usr/sbin/dhclient-script search hoge.example.com nameserver 10.0.0.2
ホスト名はhoge.example.com
で表示されます。
$ hostname ip-10-0-1-138.hoge.example.com
当然、レコードを登録していないため名前は引けませんでした。
$ nslookup ip-10-0-1-138 Server: 10.0.0.2 Address: 10.0.0.2#53 ** server can't find ip-10-0-1-138: NXDOMAIN
既存 EC2 インスタンスを停止・開始後と状況です。
まとめ
DHCP オプションセットでドメイン名を変更すると、既存 EC2 インスタンスのホスト名がデフォルトのドメイン名(region..compute.internal
)から指定したドメイン名に変更される。再起動では反映されなく、停止・開始するとホスト名の変更になる。
マネジメントコンソール上のパブリック IPv4 DNS、プライベート IP DNS名の表示はregion..compute.internal
の表記しか確認できなかった。
Internal ELB のドメイン名とは関係ありませんでした。
対象 | 値 |
---|---|
EC2 のプライベート IPv4 DNS | ap-northeast-1.compute.internal |
EC2 のパブリック IPv4 DNS | ap-northeast-1.compute.amazonaws.com |
ELB のドメイン名 | ap-northeast-1.elb.amazonaws.com |
おわりに
DHCP オプションセットの変更は VPC 全体に適用されるため、VPC 内の既存リソースにも影響があります。変更する際は事前に影響範囲を確認された方がよろしいかと思います。
AD on EC2 をはじめとする DNSサーバーを VPC内にたてると DNS サーバーの指定を DHCP オプションセットから行うことがあります。 ドメイン名を変更しようと思ったことがなかったので確認してみました。パブリック IPv4に付与されるドメイン名ではないのでは?は疑問のまま終わったのでドキュメントのフィードバックを出しました。更新か連絡があれば嬉しいです。
補足
DHCP オプションセットで DNSサーバーを未指定で作成し VPCに割り当てた場合
name-server
設定が入ってこないため名前解決ができなくなります。DHCP オプションセット変更後、新たに起動したEC2で確認できました。既存の EC2は停止・開始しても以前のDNSサーバー(Route 53 Resolver)の値を保持していました。実際に変更する場合は影響範囲の調査は時間かかりそうです。
$ cat /etc/resolv.conf options timeout:2 attempts:5 ; generated by /usr/sbin/dhclient-script search hoge.example.com
デフォルトの DHCP オプションセットを改めて確認してみると、ドメイン名、DNSサーバーが明示的に指定されていることに気づきました。