ブログ

Route 53 Resolver アウトバウンドエンドポイントで外部 DNS をフォワーディングしてみた

AWS を使用していると、特定のドメインの名前解決だけは、プライベートなネットワークに設置した DNS サーバを利用したいという場面があるのではないでしょうか?

本ブログでは、Amazon Route 53 Resolver のアウトバウンドエンドポイントを使って、VPC内から別 NW に存在する DNS サーバーに問い合わせる構成について解説していきます!

Route 53 Resolver エンドポイントとは?

Route 53 には、VPC 内外のリソースに DNS クエリを行う際にフォワード先を設定できる「Route 53 Resolver エンドポイント」という機能があります。

Route 53 Resolver エンドポイントは、インバウンドエンドポイントとアウトバウンドエンドポイントで使い分けが必要となります。DNS サーバがどのネットワークに存在するか(VPC or 外部ネットワーク)でどちらを使うかを判断します。

セキュリティ的な観点では、アウトバウンドエンドポイントとインバウンドエンドポイントで分かれていることにより、VPC から意図しない DNS クエリが外部へ漏れるのを防ぐことが可能かつ、外部から VPC 内部の DNS 解決ができないようになるため、意図しない操作による情報漏洩を防ぐことに役立ちます。

  • インバウンドエンドポイント(DNS サーバを VPC に設置し外部ネットワークから問い合わせ)
    外部ネットワーク → VPN → インバウンドエンドポイント → DNS サーバ
  • アウトバウンドエンドポイント(DNS サーバを外部ネットワークに設置し VPC から問い合わせ)
    VPC → アウトバウンドエンドポイント → VPN → 外部ネットワーク

本ブログでは Route 53 Resolver アウトバウンドエンドポイントの設定に重点を置いて解説していきます。

Route 53 Resolver アウトバウンドエンドポイントを使う利点

そもそも VPN 経由で通信可能な DNS サーバへの問い合わせに Route 53 Resolver アウトバウンドエンドポイントを活用する利点はどこにあるのでしょうか。特定のドメインへのフォワーディングをしたい場面で、Route 53 Resolver アウトバウンドエンドポイントを使わない状況を考えてみると分かりやすくなります。

おそらくは下記2つのどちらかの方法を取るしかないと思います。

方法1. DNS サーバを構築し、フォワーディング設定を行う

DNS サーバを別で構築し、特定のドメインへのフォワーディングを設定し、それ以外のレコードも全て DNS サーバで管理する。

クエリ元 EC2 に直接 DNS サーバの IP アドレスを指定することになり、AWS リソースの名前解決に関する設定を全てオンプレ側の DNS サーバで管理しないといけなくなります。

方法2. 全サーバに hosts ファイルを設定する

hosts ファイルにて特定のドメインと DNS サーバの IP アドレスを関連付ける方法ですが、設定や運用時の負荷が高くなってしまいます。

hosts ファイルを設定する EC2 が1台だけならいいですが、複数の EC2 に手当てが必要な場合は運用や管理に負荷がかかります。

どちらの方法においても AWS の利便性の恩恵を受けることができない状況となってしまいます。

そこで Resolver アウトバウンドエンドポイントを活用すると、複雑な設定なしに特定のドメインのみ、オンプレ側の DNS サーバにフォワーディングし、その他のドメインは AWS のデフォルト DNS へ問い合わせるという設定ができるようになります。

それでは設定方法を確認していきましょう!

Route 53 Resolver アウトバウンドエンドポイントの設定

まず本検証の前提としてVPCを2つ用意しVPCピアリングで接続します。VPC-A に DNS サーバを設置し、VPC-B から VPC-A の DNS サーバに DNS クエリを実行する設計とします。

Route 53 Resolver アウトバウンドエンドポイントの設定前に「local.example」の名前解決ができないことを確認します。

「VPC-B の EC2」→「VPC-A の DNS サーバ」の IP アドレスを指定して local.example に応答するか以下を実行してみます。

$dig @172.16.255.25 local.example

結果のように正常に local.example の DNS クエリを処理し、応答を返していることがわかります。

では、「VPC-A の DNS サーバ」を指定しないで DNS クエリを実行します。

$dig local.example

結果のように、ドメインが見つかりませんでした。

では、Route 53 Resolver アウトバウンドエンドポイントを指定していきましょう!

まず、Route 53 のアウトバウンドエンドポイント管理画面から「アウトバウンドエンドポイントの作成」を選択します。

設定画面では「VPC-B の EC2」→「VPC-A の DNS サーバ」へクエリ実行したいので、「VPC-B」を選択します。

今回は検証のため、エンドポイントの IP アドレスは指定せず、「アウトバウンドエンドポイントの作成」を選択します。

作成には少し時間がかかるので、作成されるまで待ちます。

次に Resolver の「ルール」を作成していきます。

画面右上の「ルールを作成」を選択します。

以下項目を設定し「ルール」を作成します。

  • ルールタイプ - 転送
  • ドメイン - 解決したいドメイン
  • VPC - クエリ元 VPC
  • ターゲット IP アドレス - DNS サーバのプライベート IP アドレス

設定は以上で、「VPC-B の EC2」→「VPC-A の DNS サーバ」を指定して local.example に応答するか確認してみましょう。

無事に名前解決ができました!

これで「local.example」のみ VPC-A の DNS サーバに問い合わせることができました!

ルールについて

今回は単一の「local.example」を外部 DNS に問い合わせる例でしたが、複数ドメインをフォワードしたい場合は、それぞれに対して転送ルールを作成することで柔軟に対応可能です。例えば、「corp.local」 と 「intra.example」 のような異なるドメインをオンプレ側にフォワーディングするケースにも利用できます。

オンプレミスとの接続方式

本ブログでは VPN 接続を例にしましたが、AWS Direct Connect や AWS Transit Gateway などを利用した環境でも同様の構成が実現できます。オンプレミス環境や他クラウドとのハイブリッド構成を組む際は、DNS の経路や帯域を含めてしっかり検証しておくと安心です。

まとめ

今回は Route53 Resolver アウトバウンドエンドポイントを主題として記載しましたが、インバウンドエンドポイントを活用すると、オンプレミス環境に DNS サーバーがない場合でも、オンプレミスのサーバーが Route 53 のプライベートホストゾーンを DNS サーバーのように使用することが可能です。よろしければ試してみてはいかがでしょうか。

最後まで読んでいただきありがとうございました!

元記事発行日: 2025年02月05日、最終更新日: 2025年08月29日