AWS VPCのDNSサーバを変更する

aws_logo

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.confsearch{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 サーバをカスタマイズするにあたり

  1. dns サーバをカスタマイズした DHCP オプションを作成
  2. VPC にアタッチ
  3. 既存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 サーバで名前解決されていれば、無事成功。

Tagged with: , ,
Posted in aws
One comment on “AWS VPCのDNSサーバを変更する

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Archives
  • RT @__apf__: How to write a research paper: a guide for software engineers & practitioners. docs.google.com/presentation/d… /cc @inwyrd 1 week ago
  • RT @HayatoChiba: 昔、自然と対話しながら数学に打ち込んだら何かを悟れるのではと思いたち、専門書1つだけ持ってパワースポットで名高い奈良の山奥に1週間籠ったことがある。しかし泊まった民宿にドカベンが全巻揃っていたため、水島新司と対話しただけで1週間過ぎた。 それ… 3 weeks ago
  • RT @googlecloud: Ever wonder what underwater fiber optic internet cables look like? Look no further than this deep dive w/ @NatAndLo: https… 3 weeks ago
  • @ijin UTC+01:00 な時間帯で生活しています、、、 6 months ago
  • RT @mattcutts: Google's world-class Site Reliability Engineering team wrote a new book: amazon.com/Site-Reliabili… It's about managing produc… 9 months ago
%d bloggers like this: