この記事は公開されてから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使えば大丈夫と思えるのは個人的にすごく嬉しいです。ガンガン活用していきましょう!