
Мы только что перешли на новый внутренний DNS-резолвер и обнаружили ограничение, которое влияет на нашу возможность поиска определенных записей.
Наш внутренний (частный) авторитетный домен — example.net.
. У нас есть запись CNAME, service.example.net.
которая разрешается вname-1234567890.region.elb.amazonaws.com.
name-1234567890.region.elb.amazonaws.com.
разрешается в различные записи A, значения которых управляются AWS. Мы не управляем публичной зоной amazonaws.com, ни записями в этой зоне.
Наш предыдущий DNS-резолвер «гонялся» за записями CNAME, поэтому поиск service.example.net.
может вернуть следующее:
$ dig service.example.net
...
;; ANSWER SECTION:
service.example.net. 300 IN CNAME name-1234567890.region.elb.amazonaws.com.
name-1234567890.region.elb.amazonaws.com. 26 IN A 10.1.2.3
name-1234567890.region.elb.amazonaws.com. 26 IN A 10.1.2.4
Ответ включает IP-адреса записей A, на которые указывает CNAME. Все хорошо.
Наш новый DNS-резолвер не «гоняется» за записями CNAME. Тот же поиск с новым резолвером выглядит так:
$ dig service.example.net
...
;; ANSWER SECTION:
service.example.net. 300 IN CNAME name-1234567890.region.elb.amazonaws.com.
... обратите внимание на отсутствующие записи A. Попытки связаться service.example.net
с помощью ping, curl, запросов python и т. д. приводят к сбоям «Неизвестный хост».
Мы не можем изменить поведение нашего нового DNS-резолвера. Есть ли какая-то опция в ядре Linux или локальном DNS-резолвере, чтобы "преследовать" записи CNAME у клиента, так же, как это делал наш старый DNS-резолвер на стороне сервера?
Для контекста, наш новый DNS-резолвер — это GCP cloud-dns, которыйдокументытакое поведение.
Некоторые дополнительные ответы на вопросы контекста/комментарии:
- example.net. — это частная, внутренняя управляемая зона в облачном DNS, принадлежащая нам.
- amazonaws.com. — это публичная зона, управляемая AWS.
- iirc, политика исходящего сервера с дополнительными серверами имен будет отправлятьвсезапросы к этим серверам имен, переопределяющие cloud-dns
- iirc, записи ALIAS доступны только в публичных зонах, а не в частных.
- service.exmaple.net. — это запись CNAME в частной управляемой зоне cloud-dns example.net.
- у нас нет представительства в AWS, поэтому мы не можем использовать route53.
решение1
Вместо прямого указания внутренних IP-адресов балансировщика нагрузки, вам необходимо указать публичное DNS-имя балансировщика нагрузки.
name-1234567890.region.elb.amazonaws.com
Поэтому удалите записи a и измените значение cname на публичное DNS-имя балансировщика нагрузки.
решение2
Я хотел бы предоставить обновление по этому вопросу. После обнаружения этой проблемы GCP начал развертывание экспериментальной функции для cloud-dns, которая отслеживает публичные записи CNAME. На момент написания статьи (апрель 2024 г.) эту функцию нужно было явно запросить у службы поддержки GCP. Я не уверен, когда она станет общедоступной.
До того, как эта функция стала нам доступна, мы обошли эту проблему, создав частную зону пересылки, например, amazonaws.com
в нашем cloud-dns, которая пересылает на публичные DNS-резолверы (мы используем 8.8.8.8, 1.1.1.1 и т. д.). Это работает, поскольку отслеживание CNAME включено в cloud-dns между частными зонами. Поскольку amazonaws.com
теперь cloud-dns считает это частной зоной, запросы на отслеживание CNAME теперь разрешаются нормально.
решение3
Для разрешения записей aws я бы рекомендовал изучить route53 из aws. Вы можете разрешить вашему внутреннему серверу DNS пересылать запросы на route53, например unbound — это DNS-revolver, который может это сделать.
Amazon Route 53 — это масштабируемая и высокодоступная веб-служба Domain Name System (DNS), предоставляемая Amazon Web Services (AWS). Она эффективно преобразует удобные для пользователя доменные имена, такие как example.com, в IP-адреса, которые компьютеры используют для идентификации друг друга в Интернете. Вот обзор некоторых ключевых функций и концепций Route 53:
- Регистрация домена: Route 53 позволяет вам регистрировать и управлять доменными именами. Вы можете приобрести новые домены или перенести существующие на Route 53.
- DNS Service: Route 53 выступает в качестве поставщика DNS-услуг, позволяя вам управлять записями DNS для вашего домена. DNS-записи включают в себя такие вещи, как записи A (которые сопоставляют доменные имена с IP-адресами), записи CNAME (которые сопоставляют доменные имена с другими доменными именами), записи MX (которые указывают почтовые серверы) и многое другое. Проверки работоспособности и отказоустойчивость: Route 53 может выполнять проверки работоспособности ваших конечных точек, таких как веб-серверы, и автоматически перенаправлять трафик с неработоспособных конечных точек на работоспособные. Эта функция часто используется для реализации решений по отказоустойчивости и аварийному восстановлению.
- Управление трафиком: Route 53 предлагает возможности управления трафиком, позволяя вам контролировать маршрутизацию DNS-запросов на основе различных факторов, таких как задержка, геолокация, взвешенная маршрутизация и т. д. Это позволяет оптимизировать производительность и доступность ваших приложений. Интеграция с сервисами AWS: Route 53 легко интегрируется с другими сервисами AWS, такими как Amazon S3, Elastic Load Balancing (ELB) и Amazon CloudFront. Например, вы можете использовать Route 53 для маршрутизации трафика на ваши балансировщики нагрузки ELB или дистрибутивы CloudFront.
- DNSSEC: Route 53 поддерживает DNS Security Extensions (DNSSEC), что добавляет дополнительный уровень безопасности вашей DNS-инфраструктуре с помощью цифровой подписи записей DNS. В целом, Route 53 — это универсальная и надежная служба DNS, которая обеспечивает основу для маршрутизации трафика к вашим приложениям и службам в Интернете. Она предлагает расширенные функции для управления DNS, повышения производительности и обеспечения высокой доступности.