DHCPオプションセットによるVPC内カスタムDNS設定

目次

概要

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-nameap-northeast-1.compute.internal(東京リージョンの場合)VPC内のインスタンスに割り当てるドメイン名
domain-name-serversAmazonProvidedDNSDNSサーバーのIPアドレス(VPCのCIDRブロックの先頭+2のアドレス、例: 10.0.0.2)

設定可能なオプション

DHCPオプションセットで設定できるオプションは以下の5つです。

オプション名説明設定例
domain-nameインスタンスに割り当てるドメイン名example.internal
domain-name-serversDNSサーバーのIPアドレス(最大4つ)10.0.0.10, 10.0.0.11
ntp-serversNTPサーバーのIPアドレス(最大4つ)10.0.0.20
netbios-name-serversNetBIOS ネームサーバーのIPアドレス(最大4つ)10.0.0.30
netbios-node-typeNetBIOS ノードタイプ(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 を実行するか、インスタンスを再起動する
フリーランス案件
クラウドおさる
クラウドキャリアフリーランス

AWS の実務経験があるなら、単価を上げにいく

AWS に特化したフリーランスエージェントです。以下は取り扱い案件の一例です。設計・SRE・セキュリティ・生成 AI の領域で、専門を掛け合わせるほど単価が上がります。

横にスクロールできます。掲載時点の情報のため、募集が終了している場合があります。条件の近い案件をご紹介しますので、お気軽にご相談ください。

実践

ここでは、VPCに関連付けられたDHCPオプションセットを確認し、新しいDHCPオプションセットを作成してカスタムDNSサーバーを指定した上でVPCに関連付けます。

前提条件

  • リージョン: ap-northeast-1(東京)
  • 以下のリソースが作成済みであること
リソース種別リソース名用途
VPCdhcp-lab-vpc (10.0.0.0/16)検証用VPC
パブリックサブネットdhcp-lab-public-subnetEC2インスタンス配置用
EC2インスタンスdhcp-lab-instanceDNS設定確認用
セキュリティグループdhcp-lab-sgSSH接続許可

本手順では、カスタム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)が表示されています。
VPC詳細画面 ── DHCPオプションセットIDが表示されている状態
VPC詳細画面 ── DHCPオプションセットIDが表示されている状態
  • 左側ナビゲーションの「DHCPオプションセット」を選択します。
  • デフォルトのDHCPオプションセット(dopt- で始まるID)をクリックし、「詳細」の設定内容を確認します。
  • ドメイン名: ap-northeast-1.compute.internal
  • ドメインネームサーバー: AmazonProvidedDNS

コンソールの表示は日本語ですが、API・CLI 上のオプション名はそれぞれ domain-name / domain-name-servers です。

デフォルトのDHCPオプションセット詳細画面 ── ドメイン名とドメインネームサーバーの設定値
デフォルトのDHCPオプションセット詳細画面 ── ドメイン名とドメインネームサーバーの設定値

手順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オプションセットを作成」をクリックします。
DHCPオプションセット作成画面 ── DHCP オプションセット名、ドメイン名、ドメインネームサーバーを入力した状態
DHCPオプションセット作成画面 ── DHCP オプションセット名、ドメイン名、ドメインネームサーバーを入力した状態

domain-name-servers に 10.0.0.10, AmazonProvidedDNS を指定することで、カスタムDNSサーバーを優先しつつ、解決できない場合はAmazonのDNSサーバーにフォールバックする構成になります。

作成した DHCP オプションセットの詳細画面が開き、「〜が正常に作成されました」というメッセージと新しい DHCP オプションセット ID が確認できます。

DHCPオプションセット作成完了画面 ── custom-dns-dhcp-options が作成されている状態
DHCPオプションセット作成完了画面 ── custom-dns-dhcp-options が作成されている状態

手順4: VPCに新しいDHCPオプションセットを関連付ける

  • 左側ナビゲーションの「お使いのVPC」を選択します。
  • VPC(dhcp-lab-vpc)を選択します。
  • 「アクション」→「VPC の設定を編集」を選択します。
  • 「DHCP 設定」セクションの「DHCP オプションセット」ドロップダウンから、手順3で作成した custom-dns-dhcp-options を選択します。
  • 右下の「保存」をクリックします。
VPC の設定を編集画面の「DHCP 設定」セクション ── DHCP オプションセットに custom-dns-dhcp-options を選択した状態
VPC の設定を編集画面の「DHCP 設定」セクション ── DHCP オプションセットに 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.internal

search がカスタムドメイン名 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リースの手動更新またはインスタンスの再起動が必要

参照先

フリーランス案件
クラウドおさる
クラウドキャリアフリーランス

AWS の実務経験があるなら、単価を上げにいく

AWS に特化したフリーランスエージェントです。以下は取り扱い案件の一例です。設計・SRE・セキュリティ・生成 AI の領域で、専門を掛け合わせるほど単価が上がります。

横にスクロールできます。掲載時点の情報のため、募集が終了している場合があります。条件の近い案件をご紹介しますので、お気軽にご相談ください。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

株式会社ジェニュイン(https://genuine-pt.jp)の代表取締役.

2018年〜インフラエンジニアとしてキャリアをスタートし、オンプレミスのネットワーク・サーバ環境で3年半、クラウド環境で4年半の8年間エンジニアとして従事。
2021年に佐藤氏の創業した株式会社Luxyを引き継ぎ、代表に就任。
その後アガルートグループ内の株式会社ジェニュインと合併。
合併後同社代表に就任。

目次