Имеем:
нуба, который только начал читать о DNS и задачу:
отдавать через DNS различные IP в зависимости от каких-то условий (IP посетителя). Нет, не Geo, но что-то рядом.
Почитав доку, я понял, что можно использовать несколько backendов, например: postgresql + python скрипт. Если данных нет в postgre, то ответ должен дать python pipe script.
Планировал так:
При новом запросе, если данного IP/сети нет в базе, обращаться к Python бэкенду, который бы согласно логике отдавал запись + добавлял ее в БД.
Проблема:
Я так и не понял, можно ли модифицировать запросы gpgsql-basic-query или какой-то другой, чтобы он учитывал IP? Или тогда все надо писать на pipe backend?
И второй вопрос:
я правильно понял, что если не отключать shuffle, то при наличии нескольких записей, powerdns будет отдавать разные, а не только первую?
1. Проще вынести логику в скрипт чем модифицировать запросы. Я как-то давно построил такой Geo-aware бекенд, работает без перебоев уже пару лет.
2. Shuffle не имеет отношение к множественным ответам, а просто к порядку их возвращения (no shuffle: А, Б, С; shuffle: С, Б, А,)
View не помогает?
Делаете несколько зон при условии отдаете нужную зону. Условие может быть вынесено в отдельный файл или являтся результатом работы скрипта.
Городить логику — круто, но не всегда оправданно.
Я так по каналам маршрутизирую траффик. Если юзер принадлежит к такой-то подсети — отдаем этот конфиг, к другой — следующий конфиг, если не принадлежит ни к одной из этих подсетей — отдаем дефолтный конфиг на третий канал.
Но проблема, как для меня, понимание того, что запросы то я могу менять, но не понятно, смогу ли я туда подставить что-то отличное от переменных из стандартных запросов (name, domain_id ...)
Могли бы вы написать, как вы передаете подсеть в запрос?
view "ISP1" {
match-clients {88.80.32.0/19; 89.189.0.0/16;};
recursion yes;
zone "sliderweb.ru" in {
type master;
file "isp1_sliderweb.ru.conf";
notify yes;
};
};
и таких вьющек уменя ровно столько сколько каналов. Одна вьюшка всегда должна быть дефолтной, тоесть иметь условие match-clients any. То есть если клиент не подпадает ни под одно из условий.
у меня пять вьюшек — для локальной сети, да каждого из провайдеров (3) + 1 дефолтная для большого и ужасного интернета. Итого пять конфигураций одной зоны, но с разными IP.