[小ネタ]RDS Aurora エンドポイントの名前解決をインターネット上でやってみた

2022.09.12

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

アノテーション、テクニカルサポートチームの村上です。

VPC 内のエンドポイントを名前解決してプライベート IP アドレスを得る為には、必ず VPC 内の Route 53 Resolver への問い合わせが必要と思っていませんか?
今回は、VPC 内のエンドポイントの名前解決をインターネット上の DNS キャッシュサーバで実行した際に、プライベート IP アドレスが返ってくることもあるという小ネタを、Aurora のエンドポイント名前解決を通してご紹介したいと思います。

※RDS のパブリックアクセシビリティ設定が「無効」となっている前提での話です。

下準備

1.EC2インスタンス:t2.micro を起動
特に特別な設定は必要無く、ご自身の PC から EC2 に SSH 接続できれば OK。

2.Aurora MySQL をライター 1 台とリードレプリカ 2 台構成で作成。

Aurora の各種エンドポイントの FQDN は以下のように作成されました。

  • ライターエンドポイント
    endpoint-name-test.cluster-cvkbczufdw7g.ap-northeast-1.rds.amazonaws.com

  • リーダーエンドポイント
    endpoint-name-test.cluster-ro-cvkbczufdw7g.ap-northeast-1.rds.amazonaws.com

  • ライターインスタンスのインスタンスエンドポイント
    endpoint-name-test-instance-1.cvkbczufdw7g.ap-northeast-1.rds.amazonaws.com

  • リードレプリカのインスタンスエンドポイント 1
    endpoint-name-test-instance-1-ap-northeast-1a.cvkbczufdw7g.ap-northeast-1.rds.amazonaws.com

  • リードレプリカのインスタンスエンドポイント 2
    endpoint-name-test-instance-1-ap-northeast-1c.cvkbczufdw7g.ap-northeast-1.rds.amazonaws.com

やってみた

Route 53 Resolver を利用しての名前解決

以前は、Amazon Provided DNS と呼ばれていた VPC 内のデフォルトの DNS キャッシュサーバで、ライターエンドポイントの名前解決を実行してみます。

dig endpoint-name-test.cluster-cvkbczufdw7g.ap-northeast-1.rds.amazonaws.com

当たり前と言えば当たり前かもしれませんが、ライターエンドポイントで直接 A レコードが指定されている訳ではなく、CNAME レコードで指定されたライターインスタンスエンドポイントの名前解決を経由して IP アドレス 172.31.0.110 が取得できました。

DNS クエリ結果のSERVER: 172.31.0.2#53(172.31.0.2)より、Route 53 Resolver により名前解決がされたことも分かります。

VPC とネットワークの間における DNS クエリの解決

VPC を作成すると、デフォルトで作成される Route 53 Resolver は、VPC ネットワーク範囲のベースにプラス 2 した予約済み IP アドレスで実行する DNS サーバーにマッピングされます。例えば、10.0.0.0/16 ネットワークの DNS サーバーの位置は 10.0.0.2 となります。

以下、全てのエンドポイントに対して名前解決を Route 53 Resolver で実施した結果となります。

dig コマンドにオプション +short +identify を指定すると、オプション +short によりホスト名 IP アドレスのみの簡易表示ができ、更にオプション +identify により名前解決をした DNS キャッシュサーバの IP アドレスが表示されます。

DNS クエリ結果(全て Route 53 Resolver による名前解決)

  • ライターエンドポイント
    172.31.0.110

  • リーダーエンドポイント
    172.31.9.20

  • ライターインスタンスのインスタンスエンドポイント
    172.31.0.110

  • リードレプリカのインスタンスエンドポイント 1
    172.31.45.24

  • リードレプリカのインスタンスエンドポイント 2
    172.31.9.20

リーダーエンドポイントエンドポイントの名前解決結果(172.31.9.20)が、リードレプリカのインスタンスエンドポイント 2 の名前解決結果と一致したのは、今回のリーダーエンドポイントエンドポイントの名前解決が DNS ラウンドロビンの振り分け結果でリードレプリカ 2 となった為です。

なお、リーダーエンドポイントはリードレプリカが複数ある場合には、DNS ラウンドロビンにより名前解決の度に利用可能な任意のリードレプリカの IP アドレスを返します。

リーダーエンドポイントの使用

リーダーエンドポイントは、Aurora DB クラスター内の利用可能な Aurora レプリカへの接続を負荷分散します。個別のクエリは負荷分散しません。

インターネット上のパブリック DNS(8.8.8.8) を利用しての名前解決

インターネット上のパブリック DNS キャッシュサーバである google の Google Public DNS(8.8.8.8) を指定して DNS クエリを実行し、Route 53 Resolver で名前解決したのと同様にプライベート IP アドレスが得られるか試してみます。
dig @8.8.8.8 endpoint-name-test.cluster-cvkbczufdw7g.ap-northeast-1.rds.amazonaws.com

DNS クエリ結果のSERVER: 8.8.8.8#53(8.8.8.8)より、Google Public DNS(8.8.8.8) により名前解決がされたことが分かります。

以下、全てのエンドポイントに対して名前解決を Google Public DNS(8.8.8.8) で実施した結果となります。

DNS クエリ結果(全てパブリック DNS(8.8.8.8) による名前解決)

  • ライターエンドポイント
    172.31.0.110

  • リーダーエンドポイント
    172.31.9.20

  • ライターインスタンスのインスタンスエンドポイント
    172.31.0.110

  • リードレプリカのインスタンスエンドポイント 1
    172.31.45.24

  • リードレプリカのインスタンスエンドポイント 2
    172.31.9.20

リーダーエンドポイントの名前解決結果が今回もリードレプリカ 2 となったのはたまたまですが、全てのエンドポイントの名前解決結果が Route 53 Resolver で名前解決した場合と同様のプライベート IP アドレスとなりました!

なお、リーダーエンドポイントの名前解決を Google Public DNS(8.8.8.8) で実施した際もちゃんと DNS ラウンドロビンしてくれます。

まとめ

オンプレで DNS キャッシュサーバを運用する際は、名前解決の結果がプライベート IP アドレスとなるドメイン名の名前解決は社内設置の DNS キャッシュサーバで実施して、外部ドメインに対する DNS 問い合わせを DMZ 設置の DNS キャッシュサーバや通信キャリアが提供する DNS キャッシュサーバへフォワーディングする構成が多いかと思います。

その感覚からすると、インターネット上での名前解決でプライベート IP アドレスが返されるのは驚くかと思い、小ネタとしてご紹介しました。

運用上では、インターネットを抜けての DNS 問い合わせとなり Route 53 Resolver への DNS 問い合わせと比べてインターネット通信状態の影響を受ける為、Route 53 Resolver の利用で問題がない場合は Route 53 Resolver をご利用いただければと思います。

また、エンドポイントを利用する他 AWS サービス全般で本ブログの名前解決と同様の結果となるものではない点、ご注意ください。

参考資料