AWS: Route 53 DNS – добавление домена и управление записями

Автор: | 24/02/2016

aws-logo-square-02AWS Route 53 выполняет три основные функции:

  1. DNS сервера, доступные в различных локациях, что уменьшает время ответа;
  2. регистрация доменов;
  3. мониторинг приложений.

Далее будет рассмотрено добавление нового домена (зоны) и управление записями на DNS Amozon-а через консоль AWS и AWS CLI.

Переходим на https://console.aws.amazon.com/route53/home:

aws_route53_1

Создаем зону:

aws_route53_2

aws_route53_3

Указываем имя домена/зоны, комментарий и выбираем тип Public (Private используется для сетей VPC – доступ снаружи будет закрыт, подробнее – тут>>>):

aws_route53_4

Проверяем:

$ dig -t ANY azinchenko.com @ns-362.awsdns-45.com +noall +answer

; <<>> DiG 9.8.3-P1 <<>> -t ANY azinchenko.com @ns-362.awsdns-45.com +noall +answer
;; global options: +cmd
azinchenko.com.		172800	IN	NS	ns-1102.awsdns-09.org.
azinchenko.com.		172800	IN	NS	ns-1543.awsdns-00.co.uk.
azinchenko.com.		172800	IN	NS	ns-362.awsdns-45.com.
azinchenko.com.		172800	IN	NS	ns-666.awsdns-19.net.
azinchenko.com.		900	IN	SOA	ns-362.awsdns-45.com. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400

По умолчанию для зоны создаются только две записи – NS и SOA.

Добавим еще две записи – www как CNAME, и vaultIN A.

Жмем Create record set, и заполняем поля:

Screen Shot 2016-02-24 at 16.14.33

  • Name – имя записи/субдомена;
  • Type: в данном случае CNAME:
    • Aaddress, IP к которому привязывается домен;
    • AAAA – аналогично, но IPV6;
    • CNAME – Canonical Name, или “алиас”;
    • MX – Mail eXchange, почтовая запись домена в виде IP, на которые будет отрпавляться почта;
    • TXTtext, текстовое поле для различных записейо домене/сервере etc;
    • PTR – Reverse DNS, противоположность записи IN A – указывает имя домена для IP (а не IP для домена);
    • SRV – Service record, по аналогии с MX используется для указания различных сервисов (телефония, XMPP);
    • SPF – Sender Policy Framework, для подтверждения отправителя почты;
    • NSName Server, обслуживающие данную зону;
    • SOA – Start of Authority, “входная точка” всей информации о доменной зоне, нельзя менять в Route 53 (но можно в своем личном BIND :-)).
  • Alias – расширения самого Amazon для DNS. Позволяет подключить запись к определенному сервису (S3, CloudFront etc);
  • TTL – время хранения данных о домене в кеше других DNS, браузеров и т.д.;
  • Value – в данном случае тут указывается алиас для создаваемого субдомена. Примеры для других типов записей есть тут>>>;
  • Routing Policy – определяет как Route 53 будет отдавать информацию о записи:
    • Simple – просто возвращает значения, заданные для записи;
    • Weighted – “взвешенная” политика, может вернуть один из нескольких значений, в зависимости от заданного распределения (1 раз – одно значение, 3 раза – другое);
    • Latency – ответ зависит от времени ожидания ресурсов, заданных в Value;
    • Failover – “отказоустойчивая” политика – всегда возвращает один ресурс (Primary), если он доступен, иначе – второй (Secondary);
    • Geolocation – ответ зависит от расположения источника запроса.

Сохраняем – жмем Create.

Добавляем вторую запись, на этот раз – через AWS CLI.

С помощью list-hosted-zones находим список зон:

$ aws route53 list-hosted-zones
{
    "HostedZones": [
        {
            "ResourceRecordSetCount": 3, 
            "CallerReference": "3DA3D308-C20C-FE5F-A423-652F92B9FB08", 
            "Config": {
                "Comment": "RTFM example", 
                "PrivateZone": false
            }, 
            "Id": "/hostedzone/Z2W76WVFMAMGZQ", 
            "Name": "azinchenko.com."
        }
    ]
}

Используя ID – получаем JSON-файл со всеми записями зоны на данный момент:

$ aws route53 list-resource-record-sets --hosted-zone-id Z2W76WVFMAMGZQ
{
    "ResourceRecordSets": [
        {
            "ResourceRecords": [
                {
                    "Value": "ns-362.awsdns-45.com."
                }, 
                {
                    "Value": "ns-1102.awsdns-09.org."
                }, 
                {
                    "Value": "ns-666.awsdns-19.net."
                }, 
                {
                    "Value": "ns-1543.awsdns-00.co.uk."
                }
            ], 
            "Type": "NS", 
            "Name": "azinchenko.com.", 
            "TTL": 172800
        }, 
        {
            "ResourceRecords": [
                {
                    "Value": "ns-362.awsdns-45.com. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400"
                }
            ], 
            "Type": "SOA", 
            "Name": "azinchenko.com.", 
            "TTL": 900
        }, 
        {
            "ResourceRecords": [
                {
                    "Value": "azinchenko.com"
                }
            ], 
            "Type": "CNAME", 
            "Name": "www.azinchenko.com.", 
            "TTL": 300
        }
    ]
}

Далее – создаем JSON-файл с описанием новой записи. Формат зависит от политики роутинга, примеры можно найти тут>>>.

Сейчас требуется добавить новую запись – vault.azinchenko.com IN A 52.31.77.193.

Создаем файл, например – vault.azinchenko.com.json с таким содержимым:

{
  "Comment": "A new record set for RTFM post.",
  "Changes": [
    {
      "Action": "UPSERT",
      "ResourceRecordSet": {
        "ResourceRecords": [
          {
            "Value": "52.31.77.193"
          }
        ],
        "Type": "A",
        "Name": "vault.azinchenko.com.",
        "TTL": 300
      }
    }
  ]
}

Обратите внимание на Action –  UPSERT для обновления зоны. Второй нюанс – указание точки после имени новой записи:

"Name": "vault.azinchenko.com.",

Которая является указателем на корневую зону.

Выполняем change-resource-record-sets:

$ aws route53 change-resource-record-sets --hosted-zone-id Z2W76WVFMAMGZQ --change-batch file://vault.azinchenko.com.json
{
    "ChangeInfo": {
        "Status": "PENDING", 
        "Comment": "A new record set for RTFM post.", 
        "SubmittedAt": "2016-02-24T15:54:42.312Z", 
        "Id": "/change/CY4PEHBGW01ZC"
    }
}

Проверяем:

$ aws route53 list-resource-record-sets --hosted-zone-id Z2W76WVFMAMGZQ
{
    "ResourceRecordSets": [
        {
            "ResourceRecords": [
                {
                    "Value": "ns-362.awsdns-45.com."
                }, 
                {
                    "Value": "ns-1102.awsdns-09.org."
                }, 
                {
                    "Value": "ns-666.awsdns-19.net."
                }, 
                {
                    "Value": "ns-1543.awsdns-00.co.uk."
                }
            ], 
            "Type": "NS", 
            "Name": "azinchenko.com.", 
            "TTL": 172800
        }, 
        {
            "ResourceRecords": [
                {
                    "Value": "ns-362.awsdns-45.com. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400"
                }
            ], 
            "Type": "SOA", 
            "Name": "azinchenko.com.", 
            "TTL": 900
        }, 
        {
            "ResourceRecords": [
                {
                    "Value": "52.31.77.193"
                }
            ], 
            "Type": "A", 
            "Name": "vault.azinchenko.com.", 
            "TTL": 300
        }, 
        {
            "ResourceRecords": [
                {
                    "Value": "azinchenko.com"
                }
            ], 
            "Type": "CNAME", 
            "Name": "www.azinchenko.com.", 
            "TTL": 300
        }
    ]
}

И dig:

$ dig vault.azinchenko.com @ns-362.awsdns-45.com +noall +answer

; <<>> DiG 9.8.3-P1 <<>> vault.azinchenko.com @ns-362.awsdns-45.com +noall +answer
;; global options: +cmd
vault.azinchenko.com.	300	IN	A	52.31.77.193

В консоли AWS:

Screen Shot 2016-02-24 at 17.57.48

Последний шаг – обновить NS записи у регистратора:

Screen Shot 2016-02-24 at 18.01.16

Почитать по DNS и BIND можно тут (правда – записям почти 4 года):

FreeBSD: установка и настройка сервера BIND

BIND: DNS – настраиваем субдомены