AWS Route53 PrivateDNS
- 2019.11.15
- AWS

はじめに
Route53を使ってPrivateDNSを構築してみます。すでにVPCとサブネットは作成済みの状態から実施します。
Route53 ホストゾーン作成
次のコマンドでRoute53のプライベートホストゾーンを作成します。caller-referenceは一意となる文字列を入力します。日付にすることが多いようです。
$ aws route53 create-hosted-zone --name waku.local --caller-reference 2019-11-14T16:53 --hosted-zone-config Comment=,PrivateZone=true --vpc VPCRegion=ap-northeast-1,VPCId=$vpc_id
{
"Location": "https://route53.amazonaws.com/2013-04-01/hostedzone/Z09552783JC3STY3MCO8F",
"HostedZone": {
"Id": "/hostedzone/Z09552783JC3STY3MCO8F",
"Name": "waku.local.",
"CallerReference": "2019-11-14T16:53",
"Config": {
"PrivateZone": true
},
"ResourceRecordSetCount": 2
},
"ChangeInfo": {
"Id": "/change/C18T7ENJWI4UXB",
"Status": "PENDING",
"SubmittedAt": "2019-11-14T07:59:47.833Z"
},
"VPC": {
"VPCRegion": "ap-northeast-1",
"VPCId": "vpc-04e72e6413b624d29"
}
}
DHCPオプションセットの作成
次のコマンドでDHCPオプションセットを作成します。
オプションについて簡単に説明します。domain-name は、EC2インスタンスの名前のサフィックスに関係してきます。デフォルトではEC2インスタンスの名前は東京リージョンの場合はip-privateip.ap-northeast-1.compute.internal といった名前になります。このap-northeast-1.compute.internalがサフィックスです。DNSにAレコードを設定した場合は、waku.localというサィックスをつけたいので、ここで指定してやります。このように複数指定する場合はスペース区切りでしていしてやります。
また、domain-name-serversは文字列で AmazonProvidedDNS を指定します。AmazonProvidedDNSは Amazon DNSサーバーでインターネットゲートウェイを介して通信する必要があるインスタンスに対してDNSが有効となるようです。
$ aws ec2 create-dhcp-options --dhcp-configurations "Key=domain-name-servers,Values=AmazonProvidedDNS" "Key=domain-name,Values=ap-northeast-1.compute.internal waku.local"
{
"DhcpOptions": {
"DhcpConfigurations": [
{
"Key": "domain-name",
"Values": [
{
"Value": "ap-northeast-1.compute.internal waku.local"
}
]
},
{
"Key": "domain-name-servers",
"Values": [
{
"Value": "AmazonProvidedDNS"
}
]
}
],
"DhcpOptionsId": "dopt-06972234e3774588d"
}
}
$ aws ec2 create-tags --resources dopt-06972234e3774588d --tag Key=Name,Value=dhcp_wakulocal
VPCの設定
最初にVPCのEnableDnsSupportとEnableDnsHostnamesが true になっていることを確認しておきます。trueになっていない場合は設定しておきます。
$ aws ec2 describe-vpc-attribute --attribute enableDnsSupport --vpc-id $vpc_id
{
"VpcId": "vpc-04e72e6413b624d29",
"EnableDnsSupport": {
"Value": true
}
}
$ aws ec2 describe-vpc-attribute --attribute enableDnsHostnames --vpc-id $vpc_id
{
"VpcId": "vpc-04e72e6413b624d29",
"EnableDnsHostnames": {
"Value": true
}
}
先ほど作成したDHCPオプションセットをVPCに割り当てます。
$ aws ec2 associate-dhcp-options --dhcp-options-id dopt-06972234e3774588d --vpc-id $vpc_id
EC2インスタンスの作成
テスト用に2つEC2インスタンスを作成します。
EC2インスタンス作成用JSONファイルです。
{
"ImageId": "ami-0064e711cbc7a825e",
"InstanceType": "t2.micro",
"KeyName": "myawskey-tokyo",
"MaxCount": 1,
"SecurityGroupIds": [
"sg-04b4e7642a8fc6efe"
],
"SubnetId": "subnet-0b99e52d17314979d"
}
次のコマンドを2回実行し2つのEC2インスタンスを作成します。この時に作成されたEC2インスタンスのPrivateIpAddressを控えておきます。
$ aws ec2 run-instances --cli-input-json file://ec2-amazonlinux.json
(出力略)
$ aws ec2 run-instances --cli-input-json file://ec2-amazonlinux.json
(出力略)
DNSレコードセットの追加
次のようなJSONファイルを作成します。ここで、先ほど控えておいたPrivateIpAddressを使用します。それぞれins01.waku.localとins02.waku.localに割り当てます。
{
"Comment": "waku.local ec2 instances ",
"Changes": [{
"Action": "CREATE",
"ResourceRecordSet": {
"Name": "ins01.waku.local.",
"Type": "A",
"TTL": 300,
"ResourceRecords": [{ "Value": "10.1.0.107"}]
}},
{
"Action": "CREATE",
"ResourceRecordSet": {
"Name": "ins02.waku.local.",
"Type": "A",
"TTL": 300,
"ResourceRecords": [{ "Value": "10.1.0.231"}]
}
}
]
}
追加するHostedZoneIdを確認し、DNSレコードを追加します。
$ aws route53 list-hosted-zones
{
"HostedZones": [
{
"Id": "/hostedzone/Z09552783JC3STY3MCO8F",
"Name": "waku.local.",
"CallerReference": "2019-11-14T16:53",
"Config": {
"PrivateZone": true
},
"ResourceRecordSetCount": 2
}
]
}
$ aws route53 change-resource-record-sets --hosted-zone-id /hostedzone/Z09552783JC3STY3MCO8F --change-batch file://dns-record4.json
{
"ChangeInfo": {
"Id": "/change/C9B0VI9Z64NSK",
"Status": "PENDING",
"SubmittedAt": "2019-11-14T08:39:43.021Z",
"Comment": "waku.local ec2 instances "
}
}
動作確認
ins01.waku.localにsshでログインし動作確認をしてみます。
まずはresolv.confのsearchにwaku.localが対象となっていることを確認します。
$ ssh -i $key ec2-user@ec2-hoge.ap-northeast-1.compute.amazonaws.com
The authenticity of host 'ec2-hoge.ap-northeast-1.compute.amazonaws.com (hoge)' can't be established.
ECDSA key fingerprint is SHA256:9sWWb3hgZVmQ9rNehoge.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'ec2-hoge.ap-northeast-1.compute.amazonaws.com,hoge' (ECDSA) to the list of known hosts.
__| __|_ )
_| ( / Amazon Linux 2 AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-2/
13 package(s) needed for security, out of 26 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-10-1-0-107 ~]$ cat /etc/resolv.conf
; generated by /usr/sbin/dhclient-script
search ap-northeast-1.compute.internal waku.local
options timeout:2 attempts:5
nameserver 10.1.0.2
ちゃんと追加されていますね。
それではins02に対して名前解決できるかnslookupしてみます。
$ nslookup ins02
Server: 10.1.0.2
Address: 10.1.0.2#53
Non-authoritative answer:
Name: ins02.waku.local
Address: 10.1.0.182
正常に名前解決できました。
-
前の記事
AWS Route53フェイルオーバー 2019.11.14
-
次の記事
EC2からS3を使うための考察 2019.11.19