概要
AWSのVPCでは、デフォルトでAmazonが提供するDNSサーバー(AmazonProvidedDNS)が使用されます。しかし、オンプレミス環境との連携やセキュリティポリシーの要件により、VPC内のインスタンスが自社管理のDNSサーバーを使用する必要があるケースがあります。
VPC内のインスタンスに配布されるDNS設定やドメイン名などのネットワーク設定は、DHCPオプションセットによって制御されています。本記事では、DHCPオプションセットの仕組みと制約を理解し、カスタムDNSサーバーを使用するための設定手順を解説します。

この記事のメリット
- DHCPオプションセットの役割と設定可能なオプションを理解できる
- 既存のDHCPオプションセットは編集できないという重要な制約を把握できる
- カスタムDNSサーバーを使用するための設定手順を習得できる
- DHCPオプションセット変更後の反映タイミングを理解できる
- SCS試験で「VPC内のDNS設定変更」を問われた際に正確に判断できるようになる
執筆者とキャラクター紹介
執筆者:土肥(とひ)
株式会社ジェニュインの代表であり元エンジニア。これまでオンプレミスと AWS 環境のインフラ業務を担当。AWS 認定資格の学習で得た知識を、ハンズオンとともに解説するのが得意。直近では新人の教育も行っており、これから技術を学ぶ方が納得できる解説を心がけています。基礎編・Cloud Practitioner の記事では、解説役としても登場します。

クラウドおさる
クラウドおさるはじめましてでござる。弊猿はクラウドおさる。IT インフラが異常に発達した猿山から、雲に乗って地上の AWS を学びに降りてきたのでござる。



基礎編や Cloud Practitioner の記事では、とひさんに素朴な疑問をぶつける役でござるな。Security - Specialty などの記事では、要所でワンポイントや注意点をひとこと添えるでござる。



猿山にもデータセンターや監視当番があって、地上で起きることはだいたい猿山にも同じ仕組みがあるのでござる。例え話がつい猿山に寄るのは、弊猿の癖でござる。
技術解説
DHCPオプションセットとは
DHCP(Dynamic Host Configuration Protocol)は、ネットワーク内のデバイスにIPアドレスやDNSサーバーなどのネットワーク設定を自動的に配布するプロトコルです。AWSのVPCでは、DHCPオプションセットを通じてVPC内のインスタンスにネットワーク設定を配布します。
VPCを作成すると、AWSが自動的にデフォルトのDHCPオプションセットを作成してVPCに関連付けます。デフォルトのDHCPオプションセットでは、以下が設定されています。
| オプション | デフォルト値 | 説明 |
|---|---|---|
| domain-name | ap-northeast-1.compute.internal(東京リージョンの場合) | VPC内のインスタンスに割り当てるドメイン名 |
| domain-name-servers | AmazonProvidedDNS | DNSサーバーのIPアドレス(VPCのCIDRブロックの先頭+2のアドレス、例: 10.0.0.2) |
設定可能なオプション
DHCPオプションセットで設定できるオプションは以下の5つです。
| オプション名 | 説明 | 設定例 |
|---|---|---|
domain-name | インスタンスに割り当てるドメイン名 | example.internal |
domain-name-servers | DNSサーバーのIPアドレス(最大4つ) | 10.0.0.10, 10.0.0.11 |
ntp-servers | NTPサーバーのIPアドレス(最大4つ) | 10.0.0.20 |
netbios-name-servers | NetBIOS ネームサーバーのIPアドレス(最大4つ) | 10.0.0.30 |
netbios-node-type | NetBIOS ノードタイプ(1, 2, 4, 8) | 2 |
domain-name-servers に自社のDNSサーバーのIPアドレスを指定することで、VPC内のインスタンスがそのDNSサーバーを使用するようになります。AmazonProvidedDNS と自社DNSサーバーを併用することも可能です。
重要な制約: 既存のDHCPオプションセットは編集できない
DHCPオプションセットには重要な制約があります。
- 既存のDHCPオプションセットは作成後に変更できない
- DNS設定を変更するには、新しいDHCPオプションセットを作成してVPCに関連付ける必要がある
- VPCに関連付けられるDHCPオプションセットは常に1つだけ
- 新しいDHCPオプションセットをVPCに関連付けると、以前のDHCPオプションセットとの関連付けは自動的に解除される
この「編集不可・新規作成して差し替え」という設計は、設定変更の追跡やロールバックを容易にするためのものです。
DHCPオプションセット変更後の反映タイミング
DHCPオプションセットをVPCに関連付けた後、設定がインスタンスに反映されるタイミングは以下の通りです。
- 新規起動するインスタンス: 起動時に新しいDHCPオプションセットの設定が適用される
- 既存のインスタンス: DHCPリースの更新時に新しい設定が適用される。手動で即座に反映させるには、インスタンスのネットワークインターフェースで
sudo dhclient -r && sudo dhclientを実行するか、インスタンスを再起動する
実践
ここでは、VPCに関連付けられたDHCPオプションセットを確認し、新しいDHCPオプションセットを作成してカスタムDNSサーバーを指定した上でVPCに関連付けます。
前提条件
- リージョン:
ap-northeast-1(東京) - 以下のリソースが作成済みであること
| リソース種別 | リソース名 | 用途 |
|---|---|---|
| VPC | dhcp-lab-vpc (10.0.0.0/16) | 検証用VPC |
| パブリックサブネット | dhcp-lab-public-subnet | EC2インスタンス配置用 |
| EC2インスタンス | dhcp-lab-instance | DNS設定確認用 |
| セキュリティグループ | dhcp-lab-sg | SSH接続許可 |
本手順では、カスタムDNSサーバーとして
10.0.0.10を指定しますが、実際にはこのIPアドレスにDNSサーバーは存在しません。DHCPオプションセットの作成と関連付けの手順を体験することが目的です。
手順1: VPCの現在のDHCPオプションセットを確認する
- AWSマネジメントコンソールにログインし、右上のリージョンが「アジアパシフィック(東京) ap-northeast-1」であることを確認します。
- 上部の検索バーに
VPCと入力し、表示された「VPC」を選択します。 - 左側ナビゲーションの「お使いのVPC」を選択します。
- VPC(
dhcp-lab-vpc)をクリックします。 - 「詳細」タブで「DHCPオプションセット」の値を確認します。デフォルトのDHCPオプションセットID(
dopt-xxxxxxxx)が表示されています。


- 左側ナビゲーションの「DHCPオプションセット」を選択します。
- デフォルトのDHCPオプションセット(
dopt-で始まるID)をクリックし、「詳細」の設定内容を確認します。 - ドメイン名:
ap-northeast-1.compute.internal - ドメインネームサーバー:
AmazonProvidedDNS
コンソールの表示は日本語ですが、API・CLI 上のオプション名はそれぞれ
domain-name/domain-name-serversです。


手順2: EC2インスタンスの現在のDNS設定を確認する
EC2インスタンスにSSH接続し、現在のDNS設定を確認します。
- EC2コンソールからインスタンス
dhcp-lab-instanceのパブリックIPアドレスを確認します。 - SSHでEC2インスタンスに接続します。
ssh -i ~/.ssh/luxy_common.pem ec2-user@<パブリックIPアドレス>/etc/resolv.confを確認します。
cat /etc/resolv.conf以下のような出力が表示されます。VPCのCIDRブロック 10.0.0.0/16 の先頭+2のアドレスである 10.0.0.2 がDNSサーバーとして設定されていることを確認します(Amazon Linux 2023 では /etc/resolv.conf は systemd-resolved 管理。先頭にコメント行が並び、末尾に nameserver と search が表示されます)。
# This is /run/systemd/resolve/resolv.conf managed by man:systemd-resolved(8).
# ...(コメント行は省略)
nameserver 10.0.0.2
search ap-northeast-1.compute.internal手順3: 新しいDHCPオプションセットを作成する
- VPCコンソールの左側ナビゲーションで「DHCPオプションセット」を選択します。
- 「DHCPオプションセットを作成」をクリックします。
- 以下の項目を入力します。
- 1. DHCP オプションセット名 – オプション:
custom-dns-dhcp-options - 2. ドメイン名:
example.internal - 3. ドメインネームサーバー:
10.0.0.10, AmazonProvidedDNS - NTP サーバー・NetBIOS ネームサーバー・NetBIOS ノードタイプ・IPv6 優先リース期間は空欄のままにします。
- ページ下部の「DHCPオプションセットを作成」をクリックします。


domain-name-serversに10.0.0.10, AmazonProvidedDNSを指定することで、カスタムDNSサーバーを優先しつつ、解決できない場合はAmazonのDNSサーバーにフォールバックする構成になります。
作成した DHCP オプションセットの詳細画面が開き、「〜が正常に作成されました」というメッセージと新しい DHCP オプションセット ID が確認できます。


手順4: VPCに新しいDHCPオプションセットを関連付ける
- 左側ナビゲーションの「お使いのVPC」を選択します。
- VPC(
dhcp-lab-vpc)を選択します。 - 「アクション」→「VPC の設定を編集」を選択します。
- 「DHCP 設定」セクションの「DHCP オプションセット」ドロップダウンから、手順3で作成した
custom-dns-dhcp-optionsを選択します。 - 右下の「保存」をクリックします。


- VPCの詳細画面に戻り、DHCPオプションセットが新しいものに変更されていることを確認します。
以前のコンソールでは「アクション」直下に「DHCPオプションセットを編集」がありましたが、現在のUIでは「VPC の設定を編集」配下の「DHCP 設定」セクションに統合されています。
手順5: EC2インスタンスのDNS設定が変更されたことを確認する
DHCPオプションセットの変更がEC2インスタンスに反映されるのはDHCPリースの更新時です。即時反映させるには、インスタンスを再起動して DHCP を再取得するのが確実です(Amazon Linux 2023 は systemd-networkd を使用しており、従来の dhclient コマンドは標準でインストールされていません)。
- EC2 コンソール、または以下の CLI でインスタンスを再起動します。
aws ec2 reboot-instances --instance-ids <インスタンスID>- 再起動後に再度 SSH 接続し、
/etc/resolv.confを確認します。
cat /etc/resolv.conf以下のような出力が表示され、DNSサーバーが変更されていることを確認できます。
# This is /run/systemd/resolve/resolv.conf managed by man:systemd-resolved(8).
# ...(コメント行は省略)
nameserver 10.0.0.10
nameserver 10.0.0.2
search example.internalsearch がカスタムドメイン名 example.internal に変更され、nameserver の先頭にカスタムDNSサーバー 10.0.0.10 が追加されていることが確認できます(解決できなかった場合のフォールバック先として 10.0.0.2 も保持)。
まとめ
- DHCPオプションセットは、VPC内のインスタンスにDNSサーバーやドメイン名などのネットワーク設定を配布する仕組み
- VPCにはデフォルトで AmazonProvidedDNS を使用するDHCPオプションセットが関連付けられている
- 既存のDHCPオプションセットは変更できない ── DNS設定を変更するには、新しいDHCPオプションセットを作成してVPCに関連付ける
- VPCに関連付けられるDHCPオプションセットは常に1つだけで、新しいものを関連付けると以前のものは自動的に解除される
- 設定変更は DHCPリースの更新時 に反映される。即座に反映するにはDHCPリースの手動更新またはインスタンスの再起動が必要











