話題の記事

[新機能]Route53 リゾルバー登場! オンプレミス-VPCの相互名前解決が簡単に実現できるようになりました!

新機能Route 53 Resolverが登場しました。これによってVPC外、例えばオンプレミスからVPC内の名前解決が簡単にマネージドサービスで実現できます。Private Hosted Zoneにも対応していますよ!
2018.11.20

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

はじめに

おはようございます、加藤です。新機能 Route 53 リゾルバーが登場しました、これによって実現できる構成を説明していきます。

New – Amazon Route 53 Resolver for Hybrid Clouds | AWS News Blog

実現できること

オンプレミスからVPC内の名前解決が可能になります。(AmazonProvidedDNSにリクエストを投げれる) 今までは、VPN/Direct Connectで繋がっていたとしても、VPC内にDNSフォワーダが存在しなければ名前解決はできませんでした。

具体的にはVPC内にEC2インスタンスでUnboundを建てたり、Directory ServicesのManaged Microsoft ADのDNS機能を使って対処していました。

Route 53 Resolver の登場によって、これらの対応が不要になります!

やってみた

疑似環境の作成

仮想ルーターのVyOSを使って検証の手間を省きましょう。以下のような疑似環境を作成します。

この環境を構築したい場合は、下記のブログが参考になります。

VyOSを利用したVPN環境構築 | DevelopersIO

Security Groupの作成

必要になるセキュリティグループを作成しておきます。

AWS側

  • Route 53 Resolver Endpoint用(Route53-Resolver-SG)
Inbound/Outbound プロトコル ポート範囲 Src/Dest
Inbound TCP 53 192.168.0.0/24
Inbound UDP 53 192.168.0.0/24
Outbound すべて すべて すべて
  • TestClient用(TestClient-SG)
Inbound/Outbound プロトコル ポート範囲 Src/Dest
Inbound ICMP すべて 192.168.0.0/24|10.0.0.0/16
Outbound すべて すべて すべて

オンプレミス側

  • オンプレミスルーター用(VyOS-SG)
Inbound/Outbound プロトコル ポート範囲 Src/Dest
Inbound すべて すべて 192.168.0.0/24
Outbound すべて すべて すべて
  • Unbound用(Unbound-SG)
Inbound/Outbound プロトコル ポート範囲 Src/Dest
Inbound TCP 53 192.168.0.0/24|10.0.0.0/16
Inbound UDP 53 192.168.0.0/24|10.0.0.0/16
Outbound すべて すべて すべて

Route 53 リゾルバー

Route 53 のマネジメントコンソールを開くと Resolver が追加されています。

Dashboard

Inbound endpoints

インバウンドエンドポイントを作成します。

VPCにはAWS側のVPCを指定してください。SGはRoute53エンドポイント用に作成したものを選択します。

エンドポイントを作成するAZ, サブネットはオンプレミスと通信が可能(サブネット範囲やルーティングを考慮する)な所を選びます。

Outbound endpoins

アウトバウンドエンドポイントを同様に作成します。

ルール

オンプレミス側のドメインonpremises.internalがリクエストされた時にオンプレミス側のDNS(Unbound)へ転送(Forwarding)が必要です。この設定をRoute 53 Resolverではルールと言います。

オンプレミス側のDNS(Unbound)のIPアドレスとポートを指定します。

オンプレミス側DNSサーバー(Unbound)

Unboundを使用してDNSサーバーを構築します。

Amazon Linux 2 でEC2インスタンスを立ち上げて、Unboundをインストールします。

sudo amazon-linux-extras install epel
sudo yum -y install unbound --enablerepo=epel
sudo systemctl enable unbound && sudo systemctl start unbound

/etc/unbound/conf.d/kensho.confを作成します。

server:
interface: 0.0.0.0

access-control: 127.0.0.0/8 allow
access-control: 10.0.0.180/32 allow
access-control: 10.0.1.210/32 allow
access-control: 192.168.0.0/24 allow

do-ip6: no

local-zone: "onpremises.internal." static

local-data: "ns.onpremises.internal. IN A 192.168.0.90"
local-data: "vyos.onpremises.internal. IN A 192.168.0.51"
local-data-ptr: "192.168.0.51 vyos.onpremises.internal"
local-data-ptr: "192.168.0.90 ns.onpremises.internal."

forward-zone:
name: "."
forward-addr: 10.0.0.224
forward-addr: 10.0.1.218

設定ファイルのグループをUnboundに変更し、Unboundを再起動します。

sudo chown root:unbound /etc/unbound/conf.d/kensho.conf
sudo systemctl restart unbound && sudo systemctl status unbound

下記のパラメータでDHCPオプションセットを作成して、オンプレミス側のVPCに関連付けを行います。

domain-name = onpremises.internal; domain-name-servers = 192.168.0.90;

しばらく待っても良いですが、DNSのアドレスを適用したいので、EC2インスタンスを再起動します。

動作確認

オンプレミス側からの名前解決

# [成功] TestClientのプライベートDNS名を解決
[ssm-user@ip-192-168-0-90 ~]$ dig ip-10-0-0-165.ap-northeast-1.compute.internal

; <<>> DiG 9.9.4-RedHat-9.9.4-61.amzn2.1.1 <<>> ip-10-0-0-165.ap-northeast-1.compute.internal
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54214
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;ip-10-0-0-165.ap-northeast-1.compute.internal. IN A

;; ANSWER SECTION:
ip-10-0-0-165.ap-northeast-1.compute.internal. 20 IN A 10.0.0.165

;; Query time: 2 msec
;; SERVER: 192.168.0.90#53(192.168.0.90)
;; WHEN: Tue Nov 20 09:16:00 UTC 2018
;; MSG SIZE rcvd: 90

# [成功] AWS側 Private Hosted Zoneに定義された名前の解決(適当に登録したレコード)
[ssm-user@ip-192-168-0-90 ~]$ dig sample.sandbox.internal

; <<>> DiG 9.9.4-RedHat-9.9.4-61.amzn2.1.1 <<>> sample.sandbox.internal
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50287
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;sample.sandbox.internal. IN A

;; ANSWER SECTION:
sample.sandbox.internal. 59 IN A 192.168.0.1

;; Query time: 1 msec
;; SERVER: 192.168.0.90#53(192.168.0.90)
;; WHEN: Tue Nov 20 10:06:01 UTC 2018
;; MSG SIZE rcvd: 68

AWS側からの名前解決

# [成功] UnboundのプライベートDNS名(オンプレDNSに定義された物)を解決
[ssm-user@ip-10-0-0-165 ~]$ dig ns.onpremises.internal

; <<>> DiG 9.9.4-RedHat-9.9.4-61.amzn2.1.1 <<>> ns.onpremises.internal
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50380
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;ns.onpremises.internal. IN A

;; ANSWER SECTION:
ns.onpremises.internal. 60 IN A 192.168.0.90

;; Query time: 10 msec
;; SERVER: 10.0.0.2#53(10.0.0.2)
;; WHEN: Tue Nov 20 09:17:41 UTC 2018
;; MSG SIZE rcvd: 67

# [成功] AWS側 Private Hosted Zoneに定義された名前の解決(適当に登録したレコード)
[ssm-user@ip-10-0-0-165 ~]$ dig sample.sandbox.internal

; <<>> DiG 9.9.4-RedHat-9.9.4-61.amzn2.1.1 <<>> sample.sandbox.internal
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14983 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;sample.sandbox.internal. IN A ;; ANSWER SECTION: sample.sandbox.internal. 60 IN A 192.168.0.1 ;; Query time: 2 msec ;; SERVER: 10.0.0.2#53(10.0.0.2) ;; WHEN: Tue Nov 20 09:18:42 UTC 2018 ;; MSG SIZE rcvd: 68

料金 Amazon Route 53 pricing - Amazon Web Services ※2018/11/30時点で日本語では、記載がありませんでした。 > Route 53 Resolver

Route 53 Resolver endpoints

A Route 53 resolver endpoint includes one or more IP addresses. Each IP address corresponds to one elastic network interface (ENI). A single endpoint can be shared by multiple > VPCs across multiple accounts within the same region. $0.125 per ENI / hour Recursive DNS queries to and from on-premises networks

Only queries that pass through a Route 53 resolver endpoint going to or coming from on-premises resources will be charged. Queries that resolve locally to your Virtual Private > Cloud (VPC) will not be charged.

$0.400 per million queries – first 1 Billion queries / month $0.200 per million queries – over 1 Billion queries / month

エンドポイントの維持に料金が発生します。 1つのENI(1つのエンドポイントのIPアドレス)に対して $0.125/時間 が発生します。例えば、2AZでIN/OUTを作ると4つなので、 $0.500/時間 ですね。 1ヶ月(30日)なら $360.0 です。

また、リクエストあたりの料金も発生します。 10億リクエストまで: 100万リクエスト当り $0.400/月 10億リクエスト以上: 100万リクエスト当り $0.200/月

あとがき

オンプレミス、AWS相互の名前解決が簡単にマネージドサービスで実現できる様になりました。華のあるアップデートではありませんがVPN/DXしてAWSを使っている方にはとても嬉しいアプデなのではないでしょうか。

今までは色々と考慮が必要な名前解決でしたが、これからはResolver使えば大丈夫と思えるのは個人的にすごく嬉しいです。ガンガン活用していきましょう!