AWS で VPC デフォルトではない DNS サーバをコマンドラインツールの AWS CLI から指定する方法をメモ。
デフォルトの設定を確認
AWS VPC 内に EC2 インスタンスを追加した時には、IPアドレス範囲の+2の IP アドレスで稼働する DNS サーバを参照するようになっている。
たとえば 10.0.0.0/16 の場合は 10.0.0.2 となっている。
VPC CIDR: 10.101.0.0/16 な VPC に EC2 インスタンスを追加し、 /etc/resolv.conf
を確認
$ cat /etc/resolv.conf ; generated by /sbin/dhclient-script search ap-northeast-1.compute.internal nameserver 10.101.0.2
VPC 内のインスタンスの Private DNS は Private IP アドレスが a.b.c.d であれば ip-a-b-c-d.{region}.compute.internal というような private DNS が設定されており、/etc/resolv.conf
の search
が {region}.compute.internal
となっているので、private DNS の ip-a-b-c-d
の部分だけで名前解決できる。
$ nslookup ip-10-101-0-2 Server: 10.101.0.2 Address: 10.101.0.2#53 Non-authoritative answer: Name: ip-10-101-0-2.ap-northeast-1.compute.internal Address: 10.101.0.2
DNSサーバを変更
諸般の事情により、VPC デフォルトではない DNS サーバを指定する。
マニュアルを読むと
We provide an Amazon DNS server. To use your own DNS server, update the DHCP options set for your VPC. For more information, see DHCP Options Sets.
http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-dns.html
と書かれているので、VPC の DHCP オプションをいじる。
AWS VPC の DHCP オプションでは
- domain-name-servers
- domain-name
- ntp-servers
- netbios-name-servers
- netbios-node-type
を VPC 単位で指定できる。
詳細は次のドキュメントを参照。
http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_DHCP_Options.html
DNS サーバをカスタマイズするにあたり
- dns サーバをカスタマイズした DHCP オプションを作成
- VPC にアタッチ
- 既存EC2インスタンスの /etc/resolv.conf がかわっていること
を確認する。
1. dns サーバをカスタマイズした DHCP オプションを作成
既存の設定を確認
$ aws ec2 describe-dhcp-options { "DhcpOptions": [ { "DhcpConfigurations": [ { "Values": [ "ap-northeast-1.compute.internal" ], "Key": "domain-name" }, { "Values": [ "AmazonProvidedDNS" ], "Key": "domain-name-servers" } ], "DhcpOptionsId": "dopt-e765xxxx" } ] }
DHCP オプションを追加
$ aws ec2 create-dhcp-options --dhcp-configuration "Key=domain-name-servers,Values=10.101.0.101,10.101.0.102" "Key=domain-name,Values=ap-northeast-1.compute.internal" { "DhcpOptions": { "DhcpConfigurations": [ { "Values": [ "ap-northeast-1.compute.internal" ], "Key": "domain-name" }, { "Values": [ "10.101.0.101", "10.101.0.102" ], "Key": "domain-name-servers" } ], "DhcpOptionsId": "dopt-3d63yyyy" } }
これは次のように JSON ファイルを渡しても同じことを実現できる
$ cat dhcp.json [ { "Values": [ "ap-northeast-1.compute.internal" ], "Key": "domain-name" }, { "Values": [ "10.101.0.101", "10.101.0.102" ], "Key": "domain-name-servers" } ] $ aws ec2 create-dhcp-options --dhcp-configuration file://dhcp.json { "DhcpOptions": { "DhcpConfigurations": [ { "Values": [ "ap-northeast-1.compute.internal" ], "Key": "domain-name" }, { "Values": [ "10.101.0.101", "10.101.0.102" ], "Key": "domain-name-servers" } ], "DhcpOptionsId": "dopt-04630000" } }
管理しやすいように、作成したオプションをタグ付けつける
$ aws ec2 create-tags --resources dopt-3d63yyyy --tags Key=Name,Value=dns.internal { "return": "true" }
DHCP オプション一覧を確認
$ aws ec2 describe-dhcp-options { "DhcpOptions": [ { "Tags": [ { "Value": "dns.internal", "Key": "Name" } ], "DhcpConfigurations": [ { "Values": [ "ap-northeast-1.compute.internal" ], "Key": "domain-name" }, { "Values": [ "10.101.0.101", "10.101.0.102" ], "Key": "domain-name-servers" } ], "DhcpOptionsId": "dopt-3d63yyyy" }, { "DhcpConfigurations": [ { "Values": [ "ap-northeast-1.compute.internal" ], "Key": "domain-name" }, { "Values": [ "AmazonProvidedDNS" ], "Key": "domain-name-servers" } ], "DhcpOptionsId": "dopt-e765xxxx" } ] }
たしかに追加されている。
2. VPC にアタッチ
関連付けを確認
http://docs.aws.amazon.com/cli/latest/reference/ec2/describe-dhcp-options.html
$ aws ec2 describe-vpcs --vpc-ids vpc-688axxxx { "Vpcs": [ { "VpcId": "vpc-688axxxx", "InstanceTenancy": "default", "Tags": [ { "Value": "dns", "Key": "Name" } ], "State": "available", "DhcpOptionsId": "dopt-e765xxxx", "CidrBlock": "10.101.0.0/16", "IsDefault": false } ] } $ aws ec2 associate-dhcp-options --dhcp-options-id dopt-3d63yyyy --vpc-id vpc-688axxxx { "return": "true" } $ aws ec2 describe-vpcs --vpc-ids vpc-688axxxx { "Vpcs": [ { "VpcId": "vpc-688axxxx", "InstanceTenancy": "default", "Tags": [ { "Value": "dns", "Key": "Name" } ], "State": "available", "DhcpOptionsId": "dopt-3d63yyyy", "CidrBlock": "10.101.0.0/16", "IsDefault": false } ] }
3. /etc/resolv.conf の変更を確認
新しい DHCP オプションを VPC にひもづけると、新規インスタンスは、新しいオプションで起動されるからいいとして、気になるのは既存インスタンスの設定はいつ変わるのか?
After you associate a new set of DHCP options with a VPC, any existing instances and all new instances that you launch in the VPC use these options. You don’t need to restart or relaunch the instances. They automatically pick up the changes within a few hours, depending on how frequently the instance renews its DHCP lease. If you want, you can explicitly renew the lease using the operating system on the instance.
http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_DHCP_Options.html#DHCPOptions
数時間まつか $ sudo /sbin/dhclient -r && sudo /sbin/dhclient
を実行して即時反映しろということらしい。
設定変更後は
$ cat /etc/resolv.conf ; generated by /sbin/dhclient-script search ap-northeast-1.compute.internal nameserver 10.101.0.101 nameserver 10.101.0.102
というように変わっている。
新しい DNS サーバで名前解決されていれば、無事成功。
Leave a Reply