VPCピアリング接続のDNS解決サポートを試してみた

はじめに

こんにちは、AWS事業本部のニシヤマです。はいマスキュラー。

先日、VPCのドキュメントを参照していたところ、VPCピアリング接続のDNS解決サポートという機能を見つけたので試してみました。

VPCピアリング接続のDNS解決サポートとは

ピア VPC のインスタンスからクエリを実行したときに、パブリック IPv4 DNS ホスト名がプライベート IPv4 アドレスに解決されるように VPC を有効にするには、ピアリング接続を変更する必要があります。

引用:https://docs.aws.amazon.com/ja_jp/vpc/latest/peering/modify-peering-connections.html

パブリック IPv4 DNS ホスト名をプライベート IPv4 アドレス(以下、プライベートIP)で名前解決してくれる機能の様です。

試してみる

以下の環境を用意します。

以下の環境を用意します。向かって左のVPCをVPC-A、向かって右のVPCをVPC-Bとします。どちらのVPCにもサブネットを作成してEC2を起動し、各EC2にElastic IPをアタッチしておきます。

また、2つのVPC間でVPCピアリングを接続しておきます。この時、VPC-AをVPCピアリングをリクエストするリクエスタVPC、VPC-BをVPCピアリングを承認するアクセプタVPCとします。 お互いのルートテーブルは双方向に通信が可能な様に対向VPCのセグメントを指定して通信可能な様にしておきます。

DNS ホスト名の有効化

今回の検証ではEC2にパブリック DNS ホスト名が必要になるのですが、マネジメントコンソールでVPCを作成した場合DNS ホスト名が無効の状態なので有効にします。

EC2にパブリック DNS ホスト名が付与されてることを確認します。

先ずはローカルマシンからパブリック DNS ホスト名を名前解決してみます。

$ dig +short ec2-54-65-179-91.ap-northeast-1.compute.amazonaws.com
54.65.179.91
$ dig +short ec2-3-115-121-144.ap-northeast-1.compute.amazonaws.com
3.115.121.144

どちらもElastic IPの値が返ってきました。

次に、VPC-AのEC2インスタンスにログインして、VPC-BのEC2インスタンスのパブリック DNS ホスト名を名前解決してみます。

$ dig +short ec2-3-115-121-144.ap-northeast-1.compute.amazonaws.com
3.115.121.144

VPC-Bのパブリック DNS ホスト名にはElastic IPの値が返ってきています。

VPCピアリング接続のDNS解決サポートを有効化

それでは、VPCピアリング接続のDNS解決サポートを有効化してみます。この機能はVPCピアリングの画面から設定します。

対象のVPCピアリングを指定し、DNS 設定の編集をクリックします。

今回はVPC-A(リクエスタVPC)側でVPC-B(アクセプタVPC)のEC2インスタンスのパブリック DNS ホスト名をプライベートIPで名前解決させたいので、アクセプタ DNS 解決にチェックを入れて保存します。

VPCピアリングのDNSタブでも確認が可能です。

これで準備完了です。

もう一度、VPC-AのEC2インスタンスで名前解決してみます。

$  dig +short ec2-3-115-121-144.ap-northeast-1.compute.amazonaws.com
10.1.0.97

プライベートIPが返ってきました!

おまけ:VPC-BからVPC-Aの名前解決してみる

先ほど、VPCピアリングのDNS 設定の編集では、アクセプタ DNS 解決のみを有効にしたため、VPC-BのEC2インスタンスではVPC-Aのパブリック DNS ホスト名はElastic IPの値が返ってくるはずです。

VPC-AのEC2インスタンスからVPC-BのEC2インスタンスへログインして、VPC-AのEC2インスタンスのパブリック DNS ホスト名を名前解決します。

$ dig +short ec2-54-65-179-91.ap-northeast-1.compute.amazonaws.com
54.65.179.91

こちらはDNS解決サポートでリクエスタ DNS 解決が有効では無いため、Elastic IPの値が返ってきますした。リクエスタ DNS 解決を有効化すればVPC-BからもプライベートIPの値が返ってきます。

おわりに

今回、ドキュメントを見ていた時に発見したので試してみました。あまり使う機会が無いのかなとは思いましたが、EC2のパブリック DNS ホスト名にはElastic IPの値が含まれています。そのためこの機能を利用すればホスト名で接続するスクリプト等の場合に同じホスト名を利用していてもインターネットからはElastic IPへ接続し、VPCピアリングを繋いでいるVPCのEC2インスタンスからはプライベートIPでの接続が可能になりますね。この記事がどなたかのお役に立てば幸いです。