VPC Peering先からPrivate IP Addressに名前解決できるようになりました

2016.08.08

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

西澤です。先日、VPC Peering先から、Public DNS hostnameをPrivate IP Addressとして名前解決する機能がサポートされるようになった、というリリースがありました。今回のリリースで何ができるようになったのか確認してみたいと思います。

Public DNS hostnameのおさらい

まずは何も設定していない状態で、vpc-a内のec2-a(ip-10-0-0-201)から、vpc-b内のec2-b(ip-10-1-0-51)から、それぞれvpc-a内のEC2インスタンスのPublic DNS hostnameの名前解決を試みます。

PublicDnsHostnamesWithVpcPeering

ec2-a(ip-10-0-0-201)での名前解決

こちらはプライベートIPアドレスが返されます。Public DNS hostnameは、VPCの中から問い合わせしたときにだけ、Private IPを返す、という特徴がありました。

[ec2-user@ip-10-0-0-201 ~]$ dig ec2-54-67-65-74.us-west-1.compute.amazonaws.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.45.amzn1 <<>> ec2-54-67-65-74.us-west-1.compute.amazonaws.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45846
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;ec2-54-67-65-74.us-west-1.compute.amazonaws.com. IN A

;; ANSWER SECTION:
ec2-54-67-65-74.us-west-1.compute.amazonaws.com. 20 IN A 10.0.0.201

;; Query time: 1 msec
;; SERVER: 10.0.0.2#53(10.0.0.2)
;; WHEN: Fri Aug  5 16:10:19 2016
;; MSG SIZE  rcvd: 81

ec2-b(ip-10-1-0-51)での名前解決

こちらはグローバルIPが返されました。当然ですが、VPC外から問い合わせた場合には、グローバルIPに名前解決されます。

[ec2-user@ip-10-1-0-51 ~]$ dig ec2-54-67-65-74.us-west-1.compute.amazonaws.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.45.amzn1 <<>> ec2-54-67-65-74.us-west-1.compute.amazonaws.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31400
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;ec2-54-67-65-74.us-west-1.compute.amazonaws.com. IN A

;; ANSWER SECTION:
ec2-54-67-65-74.us-west-1.compute.amazonaws.com. 20 IN A 54.67.65.74

;; Query time: 1 msec
;; SERVER: 10.1.0.2#53(10.1.0.2)
;; WHEN: Fri Aug  5 15:58:43 2016
;; MSG SIZE  rcvd: 81

設定手順

それでは、今回リリースされた機能を試してみます。vpc-a(10.0.0.0/16)側で、Peering Connectionsを選択、DNSタブを確認してみます。

vpc-peer-1

デフォルトでは、Disalbedの状態になっていますので、Actions -> Edit DNS Settingsから変更を行います。

vpc-peer-2

"Allow DNS resolution from peer VPC to private IP"にチェックを入れて、Saveをクリックすれば設定完了です。

vpc-peer-3

vpc-peer-4

動作確認

この許可設定をすることで、vpc-a(10.0.0.0/16)内にあるリソースのPublic DNS hostnameを、VPC Peering先のvpc-b(10.1.0.0/16)からもPrivateなIP Addressに名前解決することができるようになります。確認してみましょう。

[ec2-user@ip-10-1-0-51 ~]$ dig ec2-54-67-65-74.us-west-1.compute.amazonaws.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.45.amzn1 <<>> ec2-54-67-65-74.us-west-1.compute.amazonaws.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18912
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;ec2-54-67-65-74.us-west-1.compute.amazonaws.com. IN A

;; ANSWER SECTION:
ec2-54-67-65-74.us-west-1.compute.amazonaws.com. 20 IN A 10.0.0.201

;; Query time: 1 msec
;; SERVER: 10.1.0.2#53(10.1.0.2)
;; WHEN: Fri Aug  5 16:06:22 2016
;; MSG SIZE  rcvd: 81

設定前のec2-b(ip-10-1-0-51)での名前解決とは挙動が異なることが確認できました。ちなみにこの機能はクロスアカウントでの利用も可能です。

どんなケースで嬉しいのか?

EC2のPublic DNS hostnameを使わなければいけないケースは少ないですよね。実際のユースケースで嬉しいのは、Public AccessibleになっているRDS、RedshiftのEndpointに対して、VPC内からのみPrivate IPでアクセスしたいケースです。この件については、甲木さんが詳しく記事を書かれていますので、ぜひご覧ください。

まとめ

このリリースを読んでも、VPCに詳しい方でないとすぐに内容を理解することは難しいと思いましたので、実際の設定手順を含めてまとめてみました。Security Groupも相互参照が可能に(下記記事)なりましたし、VPC Peeringを活用できるケースがさらに広がりましたね。

どこかの誰かのお役に立てば嬉しいです。