Route53を利用してVPCの中と外で名前解決の結果を変える

# 前提
　この記事はDNSって何かをわかっている程度の方を対象にしています。
　またRoute53にドメインをすでに登録している方が対象です。

　それ以外の方は以下を参考に、ドメイン登録を行ってみてください。
　パブリックホストゾーンもプライベートホストゾーンも、やり方は変わりません。

　■ AWS公式マニュアル
　https://docs.aws.amazon.com/ja_jp/Route53/latest/DeveloperGuide/registrar.html
 
　■ AWS Route53を使ってみよう！ドメイン登録および設定方法
　http://exrecord.net/how-to-register-aws-route53

# 概要
　AWSってVPCの外と通信するとデータ転送料金がかかっちゃうから、VPCの中のホスト同士はプライベートIPでやりとりしますよね。
　で、私の場合、いちいちIPアドレスで管理するのは面倒くさいから、プライベートホストゾーンを使って内部DNSを構築して使っています。

【注釈】プライベートホストゾーン↓
https://docs.aws.amazon.com/ja_jp/Route53/latest/DeveloperGuide/hosted-zones-private.html

　でも、社内と社外で別々のホスト名やドメインを管理するのは面倒だし、VPC外のPCからつなぎに行くときも、同じホスト名を使いたくないですか？
　そんな時、Route53のパブリックホストゾーンとプライベートホストゾーンに同じドメイン、同じホストを登録しておくと、
　・VPC内部で名前解決すると「プライベートIPアドレス」
　・VPCの外で名前解決すると「パブリックIPアドレス」
　を返してくれるように設定できます。

# 結果
　設定したらどうなるか、先に結果を書きます。
　同じFQDN(ホスト名)を名前解決しているのに、VPC内のホストと、外とでは違う結果が返っているのがわかると思います。

## VPC内部のEC2ホストからdigコマンドを実行
```
$ dig test.dancing-robot.club a

; <<>> DiG 9.11.3-1ubuntu1.9-Ubuntu <<>> test.dancing-robot.club a
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54128
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;test.dancing-robot.club.       IN      A

;; ANSWER SECTION:
test.dancing-robot.club. 295    IN      A       172.30.100.42

;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Thu Sep 26 17:23:01 UTC 2019
;; MSG SIZE  rcvd: 68
```

## VPCの外からdigコマンドを実行
![WS000007.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/400941/7d14dd14-e612-b0b9-727f-b4f10a5ababf.jpeg)


【注釈】外部からの名前解決には以下のサービスを利用させて頂きました。
https://www.cman.jp/network/support/nslookup.html

# 設定方法
## パブリックホストゾーン
### まず、私のRoute53は以下のようになっています。
　パブリックホストゾーンとプライベートホストゾーンが同じドメインになっているのが見てわかると思います。
![WS000000.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/400941/70e0c666-71ec-923c-8ede-64ebcd32e4e6.jpeg)
### パブリックホストゾーンのドメインをクリックして設定画面に移行し、「レコードセットの作成」をクリックして、「名前」と「値」を入れてホスト名を登録します。
![WS000001.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/400941/0a5d5f3c-a182-76f4-5583-b3301372a7e7.jpeg)
### 登録できました。
![WS000002.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/400941/3b2d09b1-71ea-caa5-f56f-78cfe3168a18.jpeg)
## プライベートホストゾーン
### 「ホストゾーン」の選択画面に戻って、今度はプライベートホストゾーンを選択します。
![WS000003.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/400941/8cd53a8d-f343-2bfc-e5d4-fb2d9e20aeab.jpeg)

【注釈】プライベートホストゾーンを作っていない方は以下を参考に作ってみてください。
　■ AWS VPCでRoute53のプライベートホストゾーンを使う
　https://qiita.com/kter/items/d92d6e361a718a23c0bd

### プライベートホストゾーンのドメインをクリックして設定画面に移行し、「レコードセットの作成」をクリックして、「名前」と「値」を入れてホスト名を登録します。
![WS000004.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/400941/ddc07655-749c-9d5f-463a-782c9b8b5686.jpeg)
### 登録できました。
![WS000005.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/400941/a40b6ca1-1637-6b64-63e5-fb5964d039d9.jpeg)

# 後記
　中と外で同じホスト名を使いたい、というニーズの際に便利です。
　まぁ、DNSサーバを立てたことがあれば、別にAWSでなくても同じことができるのはわかると思いますが、AWSのVPCの特性上、オンプレミスよりもコスト面でもメリットがあるので、活用してみてください。

## 例として私の使い方
　私はパブリックサブネットにVPNサーバを置いて、NATインスタンス代わりとして使っています。
　そこでVPNサーバにつなぐ場合にVPCの中と外で繋ぐIPを使い分けしています。
　・プライベートサブネットからはプライベートIPで接続して、NATインスタンス代わりに
　・VPC外からはパブリックIPで接続して、踏み台兼、拠点間VPN-GW
　として使っています。

　同じホスト名が使えるので、近内と外でコンフィグを使い分け内で使えるので、楽になりました。

以上です。