Я хотел бы возвращать уникальный CNAME для каждого запроса и добавлять IP-адрес этого CNAME в файлы зоны. Возможно ли это?
решение1
В вашем вопросе не хватает подробностей. Зачем вы это делаете (почему именно CNAME?), кто делает запрос, почему вам нужно поместить результат в zonefile и т. д.
Поэтому ниже приведены лишь некоторые смутные идеи.
Если ваш вопрос касается генерации записей «на лету», то да, вы можете сделать это с помощью bind, а также других серверов имен, позволяющих вам выбрать «динамический» бэкэнд с помощью какого-либо языка программирования.
Видеть:
- Bind может обслуживать «Динамические зоны», но это в основном связано с базами данных, см.http://bind-dlz.sourceforge.net/иДинамически загружаемые зоны | Консорциум интернет-систем; но вы также можете разработать свой собственный бэкэнд
- PowerDNS:Lua Backend | Документация по авторитетному серверу PowerDNS Этот бэкэнд — просто «связующее звено» между PowerDNS и вашим собственным приложением Lua.; поэтому, если вы пишете приложение Lua, вы можете свободно обслуживать любую запись для каждого запроса.
- Yadifa и NSD, похоже, не способны сделать это (но существуют различные патчи и попытки подключить их, например, к базам данных SQL)
Конечно, вы также можете, опять же в зависимости от ваших потребностей, создать небольшой простой авторитетный сервер имен на любом языке программирования по вашему выбору, имеющий хорошую библиотеку абстракций DNS для обработки всех деталей (а их много) протокола DNS.
Другой дешевый способ сделать это: использовать подстановочные знаки. Но с осторожностью. Однако по своей сути подстановочные знаки позволяют вам немедленно получить все CNAME, которые вы хотите, в вашем файле зоны всего одной строкой. Но все зависит от того, кто запрашивает ваш сервер имен.
Помните, что ваш авторитетный сервер имен имеет в качестве клиентов рекурсивные серверы имен, а не конечных клиентов, поэтому он увидит только IP-адрес последнего рекурсивного сервера имен, использованного клиентом, а не IP-адрес клиента. У вас есть опция EDNS Client Subnet, которая, если поддерживается рекурсивным резолвером, даст вам указание на подсеть IP-адреса клиента, но никогда не полный адрес из соображений конфиденциальности.
В заключение взгляните на различные работы Джеффа Хьюстона. Он исследователь DNS в APNIC, который проводит множество исследований. Для их проведения он часто покупает рекламу, которая предоставляет уникальные ссылки для каждого клиента, разрешающие определенные имена. Посмотрите этот пример среди других:Подсчет IPv6 в DNS | Колонка ISP Это может дать вам свежие идеи.
(См. мой подробный ответ на ваш соответствующий вопрос:Как связать DNS-запросы с запросами к веб-серверу, на котором размещено это доменное имя? | Ошибка сервера)