Вопрос или проблема
Я оцениваю, как реализовать решение, подобное подходу plex для встраиваемых устройств.
Это решение требует определения 2^32 записей для каждого устройства, создавая монструозную зону, которая легко превышает 10^15 записей. С этим почти невозможно справиться.
Мне интересно, может ли программное обеспечение DNS предложить возможность использования скрипта для определения результата поиска вместо того, чтобы предоставлять все возможные записи зоны, но я не могу найти такое программное обеспечение.
Знаете ли вы какое-нибудь программное обеспечение DNS, которое позволяет использовать скрипты для выполнения поиска в зоне? Есть ли какой-либо облачный провайдер, который предлагает сервис на основе каких-либо из этих программ?
Вы можете использовать powerdns. Это DNS-сервер, где зоны обслуживаются не из текстовых файлов (или из файлов базы данных), как в bind, а из настраиваемых бэкендов. В основном это базы данных (т.е. для обслуживания зон из mysql/postgresql/всё, что угодно), но это также могут быть скрипты. Поскольку мы делаем это со скриптом, мы, по существу, можем делать аналог (f)cgi скриптинга, но для обслуживания DNS-запросов.
Среди бэкендов я вижу два варианта:
- PostgreSQL. В теории это для обслуживания зоны из таблиц postgresql, однако у postgres очень хорошие возможности для скриптинга/триггеров с его процедурным языком, plpgsql. Вы можете попробовать создать какой-нибудь триггер или функциональность динамического представления, чтобы генерировать зону во время выполнения.
- (Это, на мой взгляд, лучший вариант) Pipe:
PipeBackend позволяет легко осуществлять динамическое разрешение на основе «Копроцессора», который может быть написан на любом языке программирования, который может читать вопрос на стандартном вводе и отвечать на стандартном выводе.
Если вы хотите сделать это действительно быстро, вы также можете установить кэширование bind9 перед бэкендом powerdns.
Я бы также предложил не брать примеры из панелей управления. Ни один из них не очень полезен. Эта монструозная зона 2^32, вероятно, одна из 10 худших идей, с которыми я столкнулся на всем SE.
Ответ или решение
Применение сценариев вместо огромной зоны DNS
В рамках вашей задачи, которая заключается в реализации решения, аналогичного тому, как это делает Plex для встроенных устройств, требуется определить 2^32 записи для каждого устройства. Это приведет к созданию колоссальной зоны, которая легко превысит 10^15 записей, что практически невозможно обработать. В данной статье мы рассмотрим возможность использования сценариев для динамического определения результатов запросов DNS вместо обучения всей возможной записи в зоне.
Варианты решения проблемы с PowerDNS
Одним из наиболее подходящих решений для вашей задачи является использование PowerDNS. Этот DNS-сервер отличается от традиционных подходов (например, BIND), так как он позволяет использовать различные бэкенды для обслуживания зон. Это может быть как СУБД (SQL), так и пользовательские скрипты, которые могут динамически определять записи.
1. Бэкэнд PostgreSQL
Один из вариантов — использование PostgreSQL. Хотя этот бэкенд предназначен для обслуживания зоны из таблиц PostgreSQL, он также предоставляет мощные возможности для сценариев и триггеров с помощью своего процедурного языка PL/pgSQL. Вы можете реализовать триггеры или динамические виды данных, которые будут генерировать зону во время выполнения, что значительно упростит управление записями.
2. Бэкэнд Pipe
Наиболее подходящим решением для вашей задачи может стать бэкенд Pipe. Он позволяет динамически разрешать запросы на основе копрогресса (co-process), который можно написать на любом языке программирования, способном читать ввод с стандартного ввода и возвращать ответ на стандартный вывод. Это дает возможность создавать более сложные логики обработки запросов DNS, отвечая на вопросы по мере необходимости, без создания больших объемов данных.
Важно: Использование динамических механизмов разрешения записей через сценарии предоставляет гибкость и возможность обрабатывать все запросы более эффективно без необходимости в статической и обширной зоне.
Оптимизация скорости работы
Для повышения скорости обслуживания DNS-запросов вы также можете настроить кэширование с помощью BIND9 перед бэкендом PowerDNS. Это позволит сгладить нагрузку на DNS-сервер и ускорить обработку запросов.
Заключение
Вопрос о корректной и эффективной реализации DNS-зоны, содержащей 2^32 записи, может быть легко решен с помощью подходящих технологий, таких как PowerDNS с использованием бэкенда Pipe или PostgreSQL. Эти решения могут не только удовлетворить ваши требования, но и значительно упростить управление записями DNS. Рекомендуем избегать использования панелей управления, так как они зачастую не дают полезных решений для задач, требующих высокой степени индивидуализации.
Такой подход не только позволит вам динамически обрабатывать DNS-запросы, но и значительно сократит ресурсы и время, необходимые для управления вашей инфраструктурой DNS.