既に手動でDNSサーバーとNTPサーバーを設定している場合もDHCPオプションセットの内容は正しく反映されるのかを検証してみた

DHCPオプションセットをもっと普及させたいと考えている人の検証です。DHCPオプションセットを是非触ってみてください。
2021.08.25

DHCPオプションセット使ってますか?

こんにちは、のんピ です。

皆さんはDHCPオプションセット使ってますか? 私は使っています。

DHCPオプションセットを活用することで、DHCPオプションセットをアタッチしたVPC内のEC2インスタンスにまとめてDNSサーバーやNTPサーバーなどの設定をすることができます。

DHCPオプションセットを使ってみたブログもあるのでご覧ください。

おそらく、「DHCPオプションの存在は知らなかったけど、これは使いたい!!」となると思います。

しかし、ここで一つ疑問が生じます。それは、「既に手動でDNSサーバーとNTPサーバーを設定している場合もDHCPオプションセットの内容は正しく反映されるのか」という疑問です。

今回は、「既に手動でDNSサーバーとNTPサーバーを設定している場合もDHCPオプションセットの内容は正しく反映されるのか」をAmazon Linux 2と、Windows Server 2019で検証してみます。

いきなりまとめ

  • DHCPオプションセットの設定をすぐに反映したい場合は、手動でDHCPリースを行う
  • Amazon Linux 2は、既に手動で設定したDNSサーバーとNTPサーバーの設定がある場合もDHCPオプションセットで正しく反映される
  • Windows Serverは、そもそもNTPサーバーの情報をDHCPオプションセットで渡すことができない
  • Windows Serverは、DNSサーバーを手動で設定しているとDHCPオプションセットの値が反映されない
    • DNSの設定をリセットする必要がある
  • DHCPオプションセットでDNSサーバーやNTPサーバーを変更すると、DHCPオプションセットをアタッチしたVPC内の全てのEC2インスタンスで設定が変わるの可能性があるので要注意

検証環境

検証の環境は以下の通り非常にシンプルです。

Amazon Linux 2と、Windows Server 2019のEC2インスタンスを1台ずつ準備して、以下のステップで検証をします。

  1. デフォルトのDNSサーバーとNTPサーバーの設定確認
  2. DHCPオプションセットの変更(1回目)
    • DNSサーバー: 8.8.8.8(Google Public DNS)
    • NTPサーバー: 61.205.120.130(NICT公開NTPサービス)
  3. DHCPオプションセットを変更した後のDNSサーバーとNTPサーバーの設定確認(1回目)
  4. 手動でのDNSサーバーとNTPサーバーの設定変更
    • DNSサーバー: 8.8.4.4(Google Public DNS)
    • NTPサーバー: 133.243.238.163(NICT公開NTPサービス)
  5. DHCPオプションセットの変更(2回目)
    • DNSサーバー: 1.1.1.1(Cloudflare Public DNS)
    • NTPサーバー: 133.243.238.243(NICT公開NTPサービス)
  6. DHCPオプションセットを変更した後のDNSサーバーとNTPサーバーの設定確認(2回目)

既に手動でDNSサーバーとNTPサーバーを設定している場合もDHCPオプションセットの内容は正しく反映される」のであれば、6の手順を実施した際に、各EC2インスタンスに設定されるDNSサーバーは1.1.1.1、NTPサーバーは133.243.238.243になります。

デフォルトのDNSサーバーとNTPサーバーの設定確認

Amazon Linux 2の場合

早速、検証していきます。

まずは、デフォルトの状態のDNSサーバーとNTPサーバーの設定を確認していきます。

以下の通り、Amazon Linux 2で設定されているDNSサーバーとNTPサーバーを確認してみました。

# DNSサーバーの設定確認
$ cat /etc/resolv.conf
; generated by /usr/sbin/dhclient-script
search ec2.internal
options timeout:2 attempts:5
nameserver 10.0.0.2

# nslookup にもDNSサーバーの設定が反映されているか確認
$ nslookup
> server
Default server: 10.0.0.2
Address: 10.0.0.2#53
> exit

# NTPの同期先確認
$ chronyc -n sources
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* 169.254.169.123               3   4   377    17   -198us[ -239us] +/-  556us
^- 50.205.57.38                  1   6    37    23   +495us[ +383us] +/- 7045us
^- 204.2.134.163                 3   6    37    23  +2236us[+2124us] +/-  102ms
^- 69.89.207.99                  1   6    37    22   -810us[ -924us] +/-   23ms
^- 72.5.72.15                    2   6    37    22  +4093us[+3978us] +/-   92ms

DNSサーバーが10.0.0.2(Amazon Provided DNS)で、NTPサーバーが169.254.169.123(Amazon Time Sync Service)であることが分かります。

Windows Server 2019の場合

Windows Server 2019でも同様に、設定されているDNSサーバーとNTPサーバーを確認してみました。

# DNSサーバーの設定確認
> ipconfig /all

Windows IP 構成

   ホスト名. . . . . . . . . . . . . . .: EC2AMAZ-O0N9BVH
   プライマリ DNS サフィックス . . . . .:
   ノード タイプ . . . . . . . . . . . .: ハイブリッド
   IP ルーティング有効 . . . . . . . . .: いいえ
   WINS プロキシ有効 . . . . . . . . . .: いいえ
   DNS サフィックス検索一覧. . . . . . .: us-east-1.ec2-utilities.amazonaws.com
                                          ec2.internal

イーサネット アダプター イーサネット 2:

   接続固有の DNS サフィックス . . . . .: ec2.internal
   説明. . . . . . . . . . . . . . . . .: Amazon Elastic Network Adapter
   物理アドレス. . . . . . . . . . . . .: 0E-0E-CF-4B-43-17
   DHCP 有効 . . . . . . . . . . . . . .: はい
   自動構成有効. . . . . . . . . . . . .: はい
   リンクローカル IPv6 アドレス. . . . .: fe80::a0a5:2e7:95e6:dfd0%6(優先)
   IPv4 アドレス . . . . . . . . . . . .: 10.0.1.33(優先)
   サブネット マスク . . . . . . . . . .: 255.255.255.0
   リース取得. . . . . . . . . . . . . .: 2021年8月24日 7:17:12
   リースの有効期限. . . . . . . . . . .: 2021年8月24日 8:17:11
   デフォルト ゲートウェイ . . . . . . .: 10.0.1.1
   DHCP サーバー . . . . . . . . . . . .: 10.0.1.1
   DHCPv6 IAID . . . . . . . . . . . . .: 118130587
   DHCPv6 クライアント DUID. . . . . . .: 00-01-00-01-28-A5-9D-11-0E-A1-10-54-5C-13
   DNS サーバー. . . . . . . . . . . . .: 10.0.0.2
   NetBIOS over TCP/IP . . . . . . . . .: 有効

# NTPの同期先確認
> w32tm /query /status
閏インジケーター: 0 (警告なし)
階層: 4 (二次参照 - (S)NTP で同期)
精度: -23 (ティックごとに 119.209ns)
ルート遅延: 0.0015422s
ルート分散: 8.0500963s
参照 ID: 0xA9FEA97B (ソース IP:  169.254.169.123)
最終正常同期時刻: 2021/08/24 7:18:15
ソース: 169.254.169.123,0x9
ポーリング間隔: 9 (512s)

Amazon Linux 2と同じく、DNSサーバーが10.0.0.2(Amazon Provided DNS)で、NTPサーバーが169.254.169.123(Amazon Time Sync Service)であることが分かります。

DHCPオプションセットの変更(1回目)

以下のように設定したDHCPオプションセットを作成しました。

  • DNSサーバー: 8.8.8.8(Google Public DNS)
  • NTPサーバー: 61.205.120.130(NICT公開NTPサービス)

このDHCPオプションセットをVPCにアタッチします。

DHCPオプションセットをVPCにアタッチする場合は、VPCのコンソールで対象のVPCを選択して、アクション-DHCPオプションセットを編集をクリックします。

その後、アタッチしたいDHCPオプションセットを選択して、変更を保存をクリックします。

すると、VPCにアタッチされているDHCPオプションセットが変更されます。

DHCPオプションセットを変更した後のDNSサーバーとNTPサーバーの設定確認(1回目)

Amazon Linux 2の場合

DHCPオプションセットを変更した後、OSに再度ログインしてDNSサーバーやNTPサーバーの内容を確認してみます。

DNSサーバーを確認したところ、DNSサーバーがDHCPオプションセットで指定した8.8.8.8ではなく、10.0.0.2のままでした。

# DNSサーバーの設定確認
$ cat /etc/resolv.conf
; generated by /usr/sbin/dhclient-script
search ec2.internal
options timeout:2 attempts:5
nameserver 10.0.0.2

DHCPオプションセットの反映のタイミングを確認すると、以下のような記載がAWS公式ドキュメントにありました。

新しい DHCP オプションセットを VPC に関連付けた後、VPC 内で起動する既存のインスタンスとすべての新しいインスタンスのすべてで、それらの新しいオプションが使用されます。インスタンスを再作成や再作成する必要はありません。インスタンスで DHCP リースが更新される頻度に応じて、数時間以内に自動的に変更が反映されます。インスタンスのオペレーティングシステムを使用してリースを明示的に更新することもできます。

VPC の DHCP オプションセット - DHCP オプションの変更

どうやら、DHCPオプションセットの設定を反映するためには、DHCPのリースを更新する必要があるようです。

以下の通り、現在のDHCPのリース期間を確認してみました。

# DHCPのリース期間を確認
$ cat /var/lib/dhclient/dhclient--eth0.lease
lease {
  interface "eth0";
  fixed-address 10.0.1.211;
  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-211";
  option domain-name "ec2.internal";
  renew 2 2021/08/24 07:43:42;
  rebind 2 2021/08/24 08:09:07;
  expire 2 2021/08/24 08:16:37;
}

# 現在の時刻の確認
$ date
Tue Aug 24 07:24:23 UTC 2021

次回のリースの更新のタイミングを確認する際はrenewに注目します。renewはDHCPクライアントが現在のリース元のDHCPサーバへ再度リースを依頼する日時が記載されています。

renewを確認すると07:43:42となっていますが、現時刻は07:24:23です。流石に約20分も待てないので、手動でDHCPリースを行います。

手動でDHCPリースを行う方法は、ネットワークサービス(network.service)の再起動やdhclientの実行があります。今回はネットワークサービス(network.service)の再起動でDHCPリースを行います。

# network.serviceの再起動
$ sudo systemctl restart network

# DNSサーバーの設定確認
$ cat /etc/resolv.conf
options timeout:2 attempts:5
; generated by /usr/sbin/dhclient-script
search corp.non-97.net ec2.internal
nameserver 8.8.8.8

# nslookup にもDNSサーバーの設定が反映されているか確認
$ nslookup
> server
Default server: 8.8.8.8
Address: 8.8.8.8#53
> exit

# NTPの同期先確認
$ chronyc -n sources
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* 169.254.169.123               3   4   377    12  +6688ns[  +12us] +/-  432us
^- 50.205.57.38                  1   6   377    37   +199us[ +203us] +/- 6844us
^- 204.2.134.163                 3   6   377    33  +2553us[+2558us] +/-   88ms
^- 69.89.207.99                  1   6   377    31   -770us[ -766us] +/-   23ms
^- 72.5.72.15                    2   6   377    33  +3745us[+3750us] +/-  104ms
^- 61.205.120.130                1   6    37    57    -69us[  -62us] +/-   89ms

ネットワークサービス(network.service)の再起動をすると、DHCPオプションセットに設定した通り、DNSサーバーは8.8.8.8、NTPサーバーは61.205.120.130に変更されています。(現時点のNTPの同期先は引き続き169.254.169.123のまま)

Windows Server 2019の場合

Windows Server 2019でも同様に、DHCPオプションセット変更後のDNSサーバーとNTPサーバーを確認してみました。

# DNSサーバーの設定確認
> ipconfig /all

Windows IP 構成

   ホスト名. . . . . . . . . . . . . . .: EC2AMAZ-O0N9BVH
   プライマリ DNS サフィックス . . . . .:
   ノード タイプ . . . . . . . . . . . .: ハイブリッド
   IP ルーティング有効 . . . . . . . . .: いいえ
   WINS プロキシ有効 . . . . . . . . . .: いいえ
   DNS サフィックス検索一覧. . . . . . .: us-east-1.ec2-utilities.amazonaws.com
                                          ec2.internal

イーサネット アダプター イーサネット 2:

   接続固有の DNS サフィックス . . . . .: ec2.internal
   説明. . . . . . . . . . . . . . . . .: Amazon Elastic Network Adapter
   物理アドレス. . . . . . . . . . . . .: 0E-0E-CF-4B-43-17
   DHCP 有効 . . . . . . . . . . . . . .: はい
   自動構成有効. . . . . . . . . . . . .: はい
   リンクローカル IPv6 アドレス. . . . .: fe80::a0a5:2e7:95e6:dfd0%6(優先)
   IPv4 アドレス . . . . . . . . . . . .: 10.0.1.33(優先)
   サブネット マスク . . . . . . . . . .: 255.255.255.0
   リース取得. . . . . . . . . . . . . .: 2021年8月24日 7:17:12
   リースの有効期限. . . . . . . . . . .: 2021年8月24日 8:17:11
   デフォルト ゲートウェイ . . . . . . .: 10.0.1.1
   DHCP サーバー . . . . . . . . . . . .: 10.0.1.1
   DHCPv6 IAID . . . . . . . . . . . . .: 118130587
   DHCPv6 クライアント DUID. . . . . . .: 00-01-00-01-28-A5-9D-11-0E-A1-10-54-5C-13
   DNS サーバー. . . . . . . . . . . . .: 10.0.0.2
   NetBIOS over TCP/IP . . . . . . . . .: 有効


# NTPの同期先確認
> w32tm /query /status
閏インジケーター: 0 (警告なし)
階層: 4 (二次参照 - (S)NTP で同期)
精度: -23 (ティックごとに 119.209ns)
ルート遅延: 0.0008357s
ルート分散: 3.9138166s
参照 ID: 0xA9FEA97B (ソース IP:  169.254.169.123)
最終正常同期時刻: 2021/08/24 7:32:59
ソース: 169.254.169.123,0x9
ポーリング間隔: 9 (512s)


# 現在の時刻の確認
> date

2021年8月24日 7:34:21

Amazon Linux 2と同様にDNSサーバー、NTPサーバー共にDHCPオプションセットの変更前と同じでした。

それでは、手動でDHCPリースをしてDNSサーバー、NTPサーバーが更新されているか確認します。

# DCHPリース
# 「ipconfig /release」を実行すると、IPアドレスを解放してしまい、EC2インスタンスに接続できなくなるので要注意
> ipconfig /renew

Windows IP 構成


イーサネット アダプター イーサネット 2:

   接続固有の DNS サフィックス . . . . .: corp.non-97.net
   リンクローカル IPv6 アドレス. . . . .: fe80::a0a5:2e7:95e6:dfd0%6
   IPv4 アドレス . . . . . . . . . . . .: 10.0.1.33
   サブネット マスク . . . . . . . . . .: 255.255.255.0
   デフォルト ゲートウェイ . . . . . . .: 10.0.1.1


# DNSサーバーの設定確認
> ipconfig /all

Windows IP 構成

   ホスト名. . . . . . . . . . . . . . .: EC2AMAZ-O0N9BVH
   プライマリ DNS サフィックス . . . . .:
   ノード タイプ . . . . . . . . . . . .: ハイブリッド
   IP ルーティング有効 . . . . . . . . .: いいえ
   WINS プロキシ有効 . . . . . . . . . .: いいえ
   DNS サフィックス検索一覧. . . . . . .: us-east-1.ec2-utilities.amazonaws.com
                                          ec2.internal

イーサネット アダプター イーサネット 2:

   接続固有の DNS サフィックス . . . . .: corp.non-97.net
   説明. . . . . . . . . . . . . . . . .: Amazon Elastic Network Adapter
   物理アドレス. . . . . . . . . . . . .: 0E-0E-CF-4B-43-17
   DHCP 有効 . . . . . . . . . . . . . .: はい
   自動構成有効. . . . . . . . . . . . .: はい
   リンクローカル IPv6 アドレス. . . . .: fe80::a0a5:2e7:95e6:dfd0%6(優先)
   IPv4 アドレス . . . . . . . . . . . .: 10.0.1.33(優先)
   サブネット マスク . . . . . . . . . .: 255.255.255.0
   リース取得. . . . . . . . . . . . . .: 2021年8月24日 7:17:12
   リースの有効期限. . . . . . . . . . .: 2021年8月24日 8:35:17
   デフォルト ゲートウェイ . . . . . . .: 10.0.1.1
   DHCP サーバー . . . . . . . . . . . .: 10.0.1.1
   DHCPv6 IAID . . . . . . . . . . . . .: 118130587
   DHCPv6 クライアント DUID. . . . . . .: 00-01-00-01-28-A5-9D-11-0E-A1-10-54-5C-13
   DNS サーバー. . . . . . . . . . . . .: 8.8.8.8
   NetBIOS over TCP/IP . . . . . . . . .: 有効


# NTPの同期先確認
> w32tm /query /status
閏インジケーター: 0 (警告なし)
階層: 4 (二次参照 - (S)NTP で同期)
精度: -23 (ティックごとに 119.209ns)
ルート遅延: 0.0008357s
ルート分散: 3.9138166s
参照 ID: 0xA9FEA97B (ソース IP:  169.254.169.123)
最終正常同期時刻: 2021/08/24 7:35:19
ソース: 169.254.169.123,0x9
ポーリング間隔: 9 (512s)

DHCPリースを行うと、DHCPオプションセットに設定した通り、DNSサーバーは8.8.8.8に変更されました。しかし、NTPサーバーは169.254.169.123のままとなっています。

どうやらWindows Serverは、DHCPオプションセットのNTPサーバーの設定が反映されないようです。

手動でのDNSサーバーとNTPサーバーの設定変更

Amazon Linux 2の場合

続いて、手動でDNSサーバーとNTPサーバーの設定変更をします。

DNSサーバーの変更手順については、AWS公式ドキュメントがあったので、それを参考に変更していきます。

# 設定変更前のネットワークスクリプトを確認する
$ cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
TYPE=Ethernet
USERCTL=yes
PEERDNS=yes
DHCPV6C=yes
DHCPV6C_OPTIONS=-nw
PERSISTENT_DHCLIENT=yes
RES_OPTIONS="timeout:2 attempts:5"
DHCP_ARP_CHECK=no

# ネットワークスクリプトを編集して、「8.8.4.4」をDNSサーバーとして指定する
$ sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0

# 設定変更後のネットワークスクリプトを確認する
$ cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
TYPE=Ethernet
USERCTL=yes
PEERDNS=yes
DHCPV6C=yes
DHCPV6C_OPTIONS=-nw
PERSISTENT_DHCLIENT=yes
RES_OPTIONS="timeout:2 attempts:5"
DHCP_ARP_CHECK=no
DNS1=8.8.4.4

# network.serviceを再起動して、ネットワークスクリプトの設定変更を反映させる
$ sudo systemctl restart network

# DNSサーバーの設定確認
$ cat /etc/resolv.conf
options timeout:2 attempts:5
; generated by /usr/sbin/dhclient-script
search corp.non-97.net ec2.internal
nameserver 8.8.4.4

# nslookup にもDNSサーバーの設定が反映されているか確認
$ nslookup
> server
Default server: 8.8.4.4
Address: 8.8.4.4#53
> exit


# 設定変更前のchrony.confを確認する
$ cat /etc/chrony.conf
# use the Amazon Time Sync Service (if available)
server 169.254.169.123 prefer iburst minpoll 4 maxpoll 4

# Use public servers from the NTP Pool Project project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).

# This will use (up to):
# - 1 source from [0-1].amazon.pool.ntp.org each (IPv4 only atm)
# - 2 sources from 2.amazon.pool.ntp.org which is IPv6 enabled as well
# This means by default, up to 2 dual-stack and up to 2 additional IPv4-only
# sources will be used.
pool 0.amazon.pool.ntp.org iburst maxsources 1
pool 1.amazon.pool.ntp.org iburst maxsources 1
pool 2.amazon.pool.ntp.org iburst maxsources 2

# Record the rate at which the system clock gains/losses time.
driftfile /var/lib/chrony/drift

# Allow the system clock to be stepped in the first three updates
# if its offset is larger than 1 second.
makestep 1.0 3

# Enable kernel synchronization of the real-time clock (RTC).
rtcsync

# Allow NTP client access from local network.
#allow 192.168.0.0/16

# Specify file containing keys for NTP authentication.
keyfile /etc/chrony.keys

# Specify directory for log files.
logdir /var/log/chrony

# Select which information is logged.
#log measurements statistics tracking

# save data between restarts for fast re-load
dumponexit
dumpdir /var/run/chrony

# use a key to secure communication between chronyc and the daemon
#commandkey key1

# Use NTP servers from DHCP.
sourcedir /run/chrony-dhcp


# chrony.confを編集して、「133.243.238.163」をNTPサーバーとして指定する
$ sudo vi /etc/chrony.conf

# 設定変更後のchrony.confを確認する
$ head /etc/chrony.conf
# use the Amazon Time Sync Service (if available)
server 133.243.238.163 prefer iburst minpoll 4 maxpoll 4

# Use public servers from the NTP Pool Project project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).

# This will use (up to):
# - 1 source from [0-1].amazon.pool.ntp.org each (IPv4 only atm)
# - 2 sources from 2.amazon.pool.ntp.org which is IPv6 enabled as well
# This means by default, up to 2 dual-stack and up to 2 additional IPv4-only


# chronyd.serviceを再起動して、chrony.confの設定変更を反映させる
$ sudo systemctl restart chronyd

$ chronyc -n sources
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* 133.243.238.163               1   4     7     1    -85us[+4136us] +/-   81ms
^- 129.250.35.250                2   6    17     1  -4142us[-4142us] +/-   18ms
^- 72.30.35.89                   2   6    17     0  -2272us[-2272us] +/-   54ms
^- 173.0.48.220                  2   6    17     0  +1416us[+1416us] +/-   82ms
^- 64.79.100.196                 2   6    13     0  -4698us[-4698us] +/-   68ms
^- 61.205.120.130                1   6     7     1   -599us[ -599us] +/-   96ms
$

Windows Server 2019の場合

Windows Server 2019も以下の通り、手動でDNSサーバーとNTPサーバーの設定変更をします。

# ネットワークインターフェース名の確認
> Get-NetIPInterface

ifIndex InterfaceAlias                  AddressFamily NlMtu(Bytes) InterfaceMetric Dhcp     ConnectionState PolicyStore
------- --------------                  ------------- ------------ --------------- ----     --------------- -----------
6       イーサネット 2                  IPv6                  1500              15 Enabled  Connected       ActiveStore
1       Loopback Pseudo-Interface 1     IPv6            4294967295              75 Disabled Connected       ActiveStore
6       イーサネット 2                  IPv4                  1500              15 Enabled  Connected       ActiveStore
1       Loopback Pseudo-Interface 1     IPv4            4294967295              75 Disabled Connected       ActiveStore



# 「8.8.4.4」をDNSサーバーとして指定する
> Set-DnsClientServerAddress -InterfaceAlias "イーサネット 2" -ServerAddress "8.8.4.4"


# DNSサーバーの設定確認
> ipconfig /all

Windows IP 構成

   ホスト名. . . . . . . . . . . . . . .: EC2AMAZ-O0N9BVH
   プライマリ DNS サフィックス . . . . .:
   ノード タイプ . . . . . . . . . . . .: ハイブリッド
   IP ルーティング有効 . . . . . . . . .: いいえ
   WINS プロキシ有効 . . . . . . . . . .: いいえ
   DNS サフィックス検索一覧. . . . . . .: us-east-1.ec2-utilities.amazonaws.com
                                          ec2.internal

イーサネット アダプター イーサネット 2:

   接続固有の DNS サフィックス . . . . .: corp.non-97.net
   説明. . . . . . . . . . . . . . . . .: Amazon Elastic Network Adapter
   物理アドレス. . . . . . . . . . . . .: 0E-0E-CF-4B-43-17
   DHCP 有効 . . . . . . . . . . . . . .: はい
   自動構成有効. . . . . . . . . . . . .: はい
   リンクローカル IPv6 アドレス. . . . .: fe80::a0a5:2e7:95e6:dfd0%6(優先)
   IPv4 アドレス . . . . . . . . . . . .: 10.0.1.33(優先)
   サブネット マスク . . . . . . . . . .: 255.255.255.0
   リース取得. . . . . . . . . . . . . .: 2021年8月24日 7:17:12
   リースの有効期限. . . . . . . . . . .: 2021年8月24日 8:35:17
   デフォルト ゲートウェイ . . . . . . .: 10.0.1.1
   DHCP サーバー . . . . . . . . . . . .: 10.0.1.1
   DHCPv6 IAID . . . . . . . . . . . . .: 118130587
   DHCPv6 クライアント DUID. . . . . . .: 00-01-00-01-28-A5-9D-11-0E-A1-10-54-5C-13
   DNS サーバー. . . . . . . . . . . . .: 8.8.4.4
   NetBIOS over TCP/IP . . . . . . . . .: 有効



# 「133.243.238.163」をNTPサーバーとして指定する
> w32tm /config /update /manualpeerlist:"133.243.238.163,0x9" /syncfromflags:manual
コマンドは正しく完了しました。


# NTPサーバーと同期する
> w32tm /resync
再同期コマンドをローカル コンピューターに送信しています
コマンドは正しく完了しました。


# NTPの同期先確認
> w32tm /query /status
閏インジケーター: 0 (警告なし)
階層: 2 (二次参照 - (S)NTP で同期)
精度: -23 (ティックごとに 119.209ns)
ルート遅延: 0.1743345s
ルート分散: 7.7623564s
参照 ID: 0x85F3EEA3 (ソース IP:  133.243.238.163)
最終正常同期時刻: 2021/08/24 7:41:25
ソース: 133.243.238.163,0x9
ポーリング間隔: 9 (512s)

DHCPオプションセットの変更(2回目)

続いて、以下のように設定したDHCPオプションセットを作成して、対象のVPCにアタッチします。

  • DNSサーバー: 1.1.1.1(Cloudflare Public DNS)
  • NTPサーバー: 133.243.238.243(NICT公開NTPサービス)

VPCにアタッチする手順は1回目と同様の手順になります。

DHCPオプションセットを変更した後のDNSサーバーとNTPサーバーの設定確認(2回目)

Amazon Linux 2の場合

DHCPオプションセットを変更した後、OSに再度ログインしてDNSサーバーやNTPサーバーの内容を確認してみます。

# DHCPのリース期間を確認
$ cat /var/lib/dhclient/dhclient--eth0.lease
lease {
  interface "eth0";
  fixed-address 10.0.1.211;
  option subnet-mask 255.255.255.0;
  option dhcp-lease-time 3600;
  option routers 10.0.1.1;
  option dhcp-message-type 5;
  option dhcp-server-identifier 10.0.1.1;
  option domain-name-servers 8.8.8.8;
  option interface-mtu 9001;
  option broadcast-address 10.0.1.255;
  option ntp-servers 61.205.120.130;
  option host-name "ip-10-0-1-211";
  option domain-name "corp.non-97.net";
  renew 2 2021/08/24 07:55:26;
  rebind 2 2021/08/24 08:23:12;
  expire 2 2021/08/24 08:30:42;
}
lease {
  interface "eth0";
  fixed-address 10.0.1.211;
  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 8.8.8.8;
  option dhcp-server-identifier 10.0.1.1;
  option interface-mtu 9001;
  option ntp-servers 61.205.120.130;
  option broadcast-address 10.0.1.255;
  option host-name "ip-10-0-1-211";
  option domain-name "corp.non-97.net";
  renew 2 2021/08/24 08:00:42;
  rebind 2 2021/08/24 08:29:56;
  expire 2 2021/08/24 08:37:26;
}

# 現在の時刻の確認
$ date
Tue Aug 24 07:44:05 UTC 2021

# DHCPリース
$ sudo dhclient

# DNSサーバーの設定確認
$ cat /etc/resolv.conf
options timeout:2 attempts:5
; generated by /usr/sbin/dhclient-script
search corp.non-97.net ec2.internal
nameserver 1.1.1.1

# nslookup にもDNSサーバーの設定が反映されているか確認
$ nslookup
> server
Default server: 1.1.1.1
Address: 1.1.1.1#53
>
> exit

# NTPの同期先確認
$ chronyc -n sources
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* 133.243.238.163               1   4   377     1   +237us[ +218us] +/-   85ms
^- 129.250.35.250                2   6   377    23  -2170us[-2455us] +/-   18ms
^- 72.30.35.89                   2   6   377    24   -734us[-1019us] +/-   59ms
^- 173.0.48.220                  2   6   377    24  +2266us[+1982us] +/-   69ms
^- 64.79.100.196                 2   6   363    22  -2514us[-2800us] +/-   72ms
^- 133.243.238.243               1   6    17    19  +1673us[+1384us] +/-   86ms

dhclientを実行してDHCPリースをすると、DHCPオプションセットに設定した通り、DNSサーバーは1.1.1.1、NTPサーバーは133.243.238.243に変更されています。(現時点のNTPの同期先は引き続き133.243.238.163のまま)

そのため、Amazon Linux 2の場合は「既に手動でDNSサーバーとNTPサーバーを設定している場合もDHCPオプションセットの内容は正しく反映される」ということになります。

Windows Server 2019の場合

Windows Server 2019でも同様に、DHCPオプションセット変更後のDNSサーバーとNTPサーバーを確認してみました。

# DHCPのリース期間を確認
> ipconfig /all

Windows IP 構成

   ホスト名. . . . . . . . . . . . . . .: EC2AMAZ-O0N9BVH
   プライマリ DNS サフィックス . . . . .:
   ノード タイプ . . . . . . . . . . . .: ハイブリッド
   IP ルーティング有効 . . . . . . . . .: いいえ
   WINS プロキシ有効 . . . . . . . . . .: いいえ
   DNS サフィックス検索一覧. . . . . . .: us-east-1.ec2-utilities.amazonaws.com
                                          ec2.internal

イーサネット アダプター イーサネット 2:

   接続固有の DNS サフィックス . . . . .: corp.non-97.net
   説明. . . . . . . . . . . . . . . . .: Amazon Elastic Network Adapter
   物理アドレス. . . . . . . . . . . . .: 0E-0E-CF-4B-43-17
   DHCP 有効 . . . . . . . . . . . . . .: はい
   自動構成有効. . . . . . . . . . . . .: はい
   リンクローカル IPv6 アドレス. . . . .: fe80::a0a5:2e7:95e6:dfd0%6(優先)
   IPv4 アドレス . . . . . . . . . . . .: 10.0.1.33(優先)
   サブネット マスク . . . . . . . . . .: 255.255.255.0
   リース取得. . . . . . . . . . . . . .: 2021年8月24日 7:17:12
   リースの有効期限. . . . . . . . . . .: 2021年8月24日 8:35:16
   デフォルト ゲートウェイ . . . . . . .: 10.0.1.1
   DHCP サーバー . . . . . . . . . . . .: 10.0.1.1
   DHCPv6 IAID . . . . . . . . . . . . .: 118130587
   DHCPv6 クライアント DUID. . . . . . .: 00-01-00-01-28-A5-9D-11-0E-A1-10-54-5C-13
   DNS サーバー. . . . . . . . . . . . .: 8.8.4.4
   NetBIOS over TCP/IP . . . . . . . . .: 有効


# 現在の時刻の確認
> date

2021年8月24日 7:46:34


# DCHPリース
> ipconfig /renew

Windows IP 構成


イーサネット アダプター イーサネット 2:

   接続固有の DNS サフィックス . . . . .: corp.non-97.net
   リンクローカル IPv6 アドレス. . . . .: fe80::a0a5:2e7:95e6:dfd0%6
   IPv4 アドレス . . . . . . . . . . . .: 10.0.1.33
   サブネット マスク . . . . . . . . . .: 255.255.255.0
   デフォルト ゲートウェイ . . . . . . .: 10.0.1.1


# DNSサーバーの設定確認
> ipconfig /all

Windows IP 構成

   ホスト名. . . . . . . . . . . . . . .: EC2AMAZ-O0N9BVH
   プライマリ DNS サフィックス . . . . .:
   ノード タイプ . . . . . . . . . . . .: ハイブリッド
   IP ルーティング有効 . . . . . . . . .: いいえ
   WINS プロキシ有効 . . . . . . . . . .: いいえ
   DNS サフィックス検索一覧. . . . . . .: us-east-1.ec2-utilities.amazonaws.com
                                          ec2.internal

イーサネット アダプター イーサネット 2:

   接続固有の DNS サフィックス . . . . .: corp.non-97.net
   説明. . . . . . . . . . . . . . . . .: Amazon Elastic Network Adapter
   物理アドレス. . . . . . . . . . . . .: 0E-0E-CF-4B-43-17
   DHCP 有効 . . . . . . . . . . . . . .: はい
   自動構成有効. . . . . . . . . . . . .: はい
   リンクローカル IPv6 アドレス. . . . .: fe80::a0a5:2e7:95e6:dfd0%6(優先)
   IPv4 アドレス . . . . . . . . . . . .: 10.0.1.33(優先)
   サブネット マスク . . . . . . . . . .: 255.255.255.0
   リース取得. . . . . . . . . . . . . .: 2021年8月24日 7:17:12
   リースの有効期限. . . . . . . . . . .: 2021年8月24日 8:46:42
   デフォルト ゲートウェイ . . . . . . .: 10.0.1.1
   DHCP サーバー . . . . . . . . . . . .: 10.0.1.1
   DHCPv6 IAID . . . . . . . . . . . . .: 118130587
   DHCPv6 クライアント DUID. . . . . . .: 00-01-00-01-28-A5-9D-11-0E-A1-10-54-5C-13
   DNS サーバー. . . . . . . . . . . . .: 8.8.4.4
   NetBIOS over TCP/IP . . . . . . . . .: 有効


# NTPの同期先確認
> w32tm /query /status
閏インジケーター: 0 (警告なし)
階層: 2 (二次参照 - (S)NTP で同期)
精度: -23 (ティックごとに 119.209ns)
ルート遅延: 0.1743345s
ルート分散: 7.7623564s
参照 ID: 0x85F3EEA3 (ソース IP:  133.243.238.163)
最終正常同期時刻: 2021/08/24 7:41:25
ソース: 133.243.238.163,0x9
ポーリング間隔: 9 (512s)

NTPの同期先が変更されないのは1回目の検証で分かっていましたが、DNSサーバーも変更されない結果になってしまいました。

この理由は、DNSサーバーがDHCPでなく、固定で設定されているからです。そのため、ネットワークインターフェースに設定されているDNSサーバーをDHCPで動的に更新できるようにしてあげる必要があります。

そのため、以下のようにネットワークインターフェースに設定されているDNSサーバーをリセットしてからDNSサーバーの設定を確認してみました。

# ネットワークインターフェースに設定されているDNSサーバーを確認
> Get-DnsClientServerAddress

InterfaceAlias               Interface Address ServerAddresses
                             Index     Family
--------------               --------- ------- ---------------
イーサネット 2                       6 IPv4    {8.8.4.4}
イーサネット 2                       6 IPv6    {}
Loopback Pseudo-Interface 1          1 IPv4    {}
Loopback Pseudo-Interface 1          1 IPv6    {fec0:0:0:ffff::1, fec0:0:0:ffff::2, fec0:0:0:ffff::3}


# ネットワークインターフェースに設定されているDNSサーバーをリセット
> Set-DnsClientServerAddress -InterfaceAlias "イーサネット 2" -ResetServerAddresses


# ネットワークインターフェースに設定されているDNSサーバーを確認
> Get-DnsClientServerAddress

InterfaceAlias               Interface Address ServerAddresses
                             Index     Family
--------------               --------- ------- ---------------
イーサネット 2                       6 IPv4    {1.1.1.1}
イーサネット 2                       6 IPv6    {}
Loopback Pseudo-Interface 1          1 IPv4    {}
Loopback Pseudo-Interface 1          1 IPv6    {fec0:0:0:ffff::1, fec0:0:0:ffff::2, fec0:0:0:ffff::3}


# DNSサーバーの設定確認
> ipconfig /all

Windows IP 構成

   ホスト名. . . . . . . . . . . . . . .: EC2AMAZ-O0N9BVH
   プライマリ DNS サフィックス . . . . .:
   ノード タイプ . . . . . . . . . . . .: ハイブリッド
   IP ルーティング有効 . . . . . . . . .: いいえ
   WINS プロキシ有効 . . . . . . . . . .: いいえ
   DNS サフィックス検索一覧. . . . . . .: us-east-1.ec2-utilities.amazonaws.com
                                          ec2.internal

イーサネット アダプター イーサネット 2:

   接続固有の DNS サフィックス . . . . .: corp.non-97.net
   説明. . . . . . . . . . . . . . . . .: Amazon Elastic Network Adapter
   物理アドレス. . . . . . . . . . . . .: 0E-0E-CF-4B-43-17
   DHCP 有効 . . . . . . . . . . . . . .: はい
   自動構成有効. . . . . . . . . . . . .: はい
   リンクローカル IPv6 アドレス. . . . .: fe80::a0a5:2e7:95e6:dfd0%6(優先)
   IPv4 アドレス . . . . . . . . . . . .: 10.0.1.33(優先)
   サブネット マスク . . . . . . . . . .: 255.255.255.0
   リース取得. . . . . . . . . . . . . .: 2021年8月24日 7:17:12
   リースの有効期限. . . . . . . . . . .: 2021年8月24日 8:49:19
   デフォルト ゲートウェイ . . . . . . .: 10.0.1.1
   DHCP サーバー . . . . . . . . . . . .: 10.0.1.1
   DHCPv6 IAID . . . . . . . . . . . . .: 118130587
   DHCPv6 クライアント DUID. . . . . . .: 00-01-00-01-28-A5-9D-11-0E-A1-10-54-5C-13
   DNS サーバー. . . . . . . . . . . . .: 1.1.1.1
   NetBIOS over TCP/IP . . . . . . . . .: 有効

ネットワークインターフェースに設定されているDNSサーバーをリセットすることで、DHCPオプションセットに設定した通り、DNSサーバーが1.1.1.1に変更されていることが確認できました。

そのため、Windows Serverの場合は「既に手動でDNSサーバーを設定している場合もDHCPオプションセットの内容は正しく反映されるが、ネットワークインターフェースの設定変更が必要」ということになります。

DHCPオプションセットは縁の下の力持ち

DHCPオプションセットを有効活用することで、大量のEC2インスタンスのDNSサーバーやNTPサーバーなどの設定変更を行うことができます。

しかし、設定の範囲がVPC単位となるので、VPC内で設定すべきDNSサーバーやNTPサーバーを分ける必要がある場合は、要注意となります。

このブログが誰かの助けになれば幸いです。

以上、東京オフィスの のんピ(@non____97)でした!