PDNSD.CONF

НАЗВАНИЕ
ОПИСАНИЕ
ФОРМАТ ФАЙЛА
ВЕРСИЯ
СМОТРИ ТАКЖЕ
АВТОРЫ
АВТОР ПЕРЕВОДА

НАЗВАНИЕ

pdnsd.conf − файл конфигурации pdnsd

ОПИСАНИЕ

Эта страница руководства описывает структуру файла конфигурации pdnsd8 и доступные опции настройки. По умолчанию файл находится в /etc/pdnsd.conf, но это можно изменить с помощью опции −c командной строки. Пример файла pdnsd.conf имеется в составе дистрибутива pdnsd в каталоге с документацией или в файле /etc/pdnsd.conf.sample.

ФОРМАТ ФАЙЛА

Файл конфигурации разделён на секции. Каждая секция начинается с имени секции и открывающейся фигурной скобки ({), а завершается закрывающей фигурной скобкой (}). В каждой секции опции конфигурации могут быть заданы в следующем виде

имя_опции=значение_опции;

Значением опции может быть последовательность символов, число, спецификация времени или константа. В предыдущих версиях pdnsd строки должны были заключаться в кавычки ("), но начиная с версии 1.1.10 это больше не требуется, за исключением тех случаев, когда строка содержит специальный символ (например, пробел), символ комментария, или один из символов ",;{}". Начиная с версии 1.2.9 обратная косая черта ( внутри строки интерпретируется как символ экранирования, с помощью которого можно добавлять в строки специальные символы (как в заключённые в кавычки, так и не заключённые в кавычки) предваряя их обратной косой чертой. Некоторые экранированные последовательности интерпретируются как в языке программирования C, например, \t первращается в символ табуляции, \n превращается в символ новой строки.
Спецификация времени состоит из последовательности цифр с последующим однобуквенным суффиксом. Доступны следующие суффиксы: s (секунды), m (минуты), h (часы), d (дни) и w (недели). Если суффикс пропущен, предполагаются секунды. Если несколько спецификаций времени сцеплены, их значения складываются; например 2h30m интерпретируется как 2*60*60 + 30*60 = 9000 секунд.
Некоторые опции принимают более одного значения; в этом случае значения разделяются запятыми.
В случае если вы можете указать одно из нескольких допустимых значений опции, в документации это записывается как (опция1|опция3|опция3|…)
Константы true|false (истина/ложь) и yes|no (да|нет) считаются синонимами констант on|off (включено|выключено).
Комментарии могут быть заключены в /* и */, допустимы вложенные комментарии. Если в файле конфигурации встречается символ # или две косые черты (//), то весь текст, начиная с этих символов и до конца текущей строки, расценивается как комментарий и игнорируется.
Примеры большинства опций можно найти в образце файла конфигурации.

Секция global
Секция global указывает параметры, которые относятся к поведению сервера в целом. Если вы укажете несколько секций global, более поздние настройки в файле заменят более ранние значения.
Доступные опции:
perm_cache=(
число|off);

Выключает дисковый кэш или задаёт максимальный размер кэша в килобайтах. Если дисковый кэш отключен, на диск всё−же будут записаны 8 байт. Кэш в памяти всегда на 10 килобайт больше, чем файл кэша. Значение по умолчанию − 2048 (2 мегабайта).

cache_dir=строка;

Задаёт каталог, в котором будет храниться кэш. По умолчанию это "/var/cache/pdnsd" (кроме случаев, когда pdnsd был скомпилирован с другим значением по умолчанию).

server_port=число;

Задаёт порт сервера. Это особенно полезно, если вы хотите запустить сервер, не являясь пользователем root. Отметим, что если вы не являетесь пользователем root, вы можете также не указывать uptest=ping в секции server.
Порт по умолчанию − 53, в соответствии со стандартом RFC. Отметим, что вы можете использовать нестандартные порты только в том случае, если нужные вам клиенты связываются с сервером, находящемся на том же компьютере; в другом случае, вероятно, произойдёт сбой, т.к. компьютеры, пытающиеся свзяаться с сервером по NS−записи, будут устанавливать связь с DNS−сервером по адресу в A−записи, в которой нет информации о порте.

server_ip=строка;

или

interface=строка;

Задаёт IP−адрес, на котором pdnsd будет ожидать запросы. Это может быть полезно когда узел имеет несколько интерфейсов и вы хотите, чтобы pdnsd не ожидал соединений на всех интерфейсах. Например, можно заставить pdnsd ожидать соединений на 127.0.0.1, чтобы позволить pdnsd обслуживать запросы, передавая их в BIND. По умолчанию эта опция установлена в server_ip=any, что позволяет pdnsd ожидать соединений на всех локальных интерфейсах. В настоящее время вы можете указать здесь только один адрес; если Вы хотите, чтобы pdnsd ожидал соединений на нескольких интерфейсах, но не на всех, вы можете указать server_ip=any и использовать правила пакетного фильтра для ограничения доступа.
Используемый IP−адрес нужно помещать в кавычки, но начиная с версии 1.1.10 это больше не обязательно.
Если pdnsd был скомпилирован с одновременной поддержкой IPv4 и IPv6, но pdnsd не был скомпилирован для запуска в режиме IPv6 по умолчанию, а вы хотите указать здесь адрес IPv6, тогда вы должны использовать опцию командной строки −6 или сначала установить run_ipv4=off (см. ниже), чтобы убедиться, что IPv6 адрес был разобран правильно.
Если pdnsd запущен в режиме IPv6 и вы указали здесь адрес IPv4, он будет автоматически преобразован в адрес IPv6.
Новое в версии 1.2:
Вы можете указать здесь имя интерфейса, такое как "lo" или "eth0", вместо IP−адреса (это было проверено на Linux и может работать или не работать на других платформах). pdnsd не привязывается к имени интерфейса, но определит адрес интерфейса при запуске и будет ожидать соединений на этом адресе. Если адрес интерфейса поменяется во время работы pdnsd, pdnsd не заметит этого. В этом случае может потребоваться перезапустить pdnsd.

outgoing_ip=строка;

или

outside_interface=строка;

Новое в версии 1.2.9: Возможность задать IP−адрес интерфейса, используемый pdnsd для исходящих сообщений. Это может быть полезно, если узел имеет несколько интерфейсов и нужно чтобы pdnsd отрпавлял исходящие запросы только через один из них. Например, если pdnsd запущен на узле с одним интерфейсом с IP−адресом 192.168.1.1, подключенным к локальной сети, и другим с IP−адресом 123.xxx.yyy.zzz, подключенным к интернету, можно указать server_ip=192.168.1.1 и outgoing_ip=123.xxx.yyy.zzz чтобы заставить pdnsd отвечать на запросы только принятым из локальной сети, а отправлять исходящие запросы только через интерфейс, подключенный к интернету.
Значение настройки по умолчанию для этой опции − любой, использовать который ядро почитает необходимым. Как и в случае опции server_ip, вместо IP−адреса можно использовать и имя интерфейса.

linkdown_kluge=(on|off);

Эта опция включает kluge, который может понадобиться некоторомы людям: когда все серверы недоступны, а эта опциея включена, при получении запроса кэш не будет использован, а будет возвращена ошибка DNS. Исключением из этого являются только локальные записи (которые указаны в секциях rr и source), которые продолжат нормально обслуживаться. В общем, если сеть отключена, то вы, вероятно, хотите получать также и кэшированные записи, поэтому эта опция по умолчанию отключена.

max_ttl=время;

Эта опция устанавливает максимальное время удержания записи в кэше. Все ресурсные записи DNS имеют поле времени жизни, которое говорит какой период времени запись может находиться в кэше, перед тем как её потребуется перезапросить. Если оно больше значения, указанного в max_ttl, то значение времени жизни будет установлено в max_ttl. Это сделано для предотвращения кэширования записей на неоправданно длинный период времени, потому что это почти никогда не бывает правильно. По умолчанию это 604800 секунд (одна неделя).

min_ttl=время;

Эта опция устанавливает минимальное время удержания записи в кэше. Все ресурсные записи DNS имеют поле времени жизни, которое говорит о том, какой период времени запись может находиться в кэше, перед тем как её потребуется перезапросить. Если время жизни ресурсной записи меньше значения указанного в min_ttl, то значение времени жизни будет установлено в min_ttl. По умолчанию это 120 секунд.

neg_ttl=время;

Эта опция устанавливает время, в течение которого отрицательно кэшированные записи будут оставаться действительными, если время их жизни не может быть определено. Весь домен со всеми его записями будет кэширован отрицательно, если pdnsd не имеет записи SOA для этого домена. Если SOA существует, будет принято время жизни SOA.

neg_rrs_pol=(on|off|auth|default);

Задаёт набор политик отрицательного кэширования ресурсных записей; опция указывает pdnsd при каких обстоятельствах он должен применять отрицательный тип кэширования записей для определённого домена. off выключает отрицательное кэширование типов записей, on всегда добавляет в кэш отрицательные записи, если сервер имён не вернул запись запрошенного нами типа. auth добавляет только такие записи, которые возвращены в ответе полномочного сервера имён этого домена.
Новинка версии 1.2.8:
настройка по умолчанию добавляет отрицателно кэшированные записи в обоих случаях: если ответ поступил от полномочного сервера или в ответе установлен признак "доступны рекурсивные запросы", если в запросе явным образом было указано использовать рекурсию.
Предустановлено значение "default" (используется auth).

neg_domain_pol=(on|off|auth);

Это аналог neg_rss_pol для отрицательного кэширования всего домена. Включение этой опции должно быть безопасным, потому что я не видел кэширующих серверов, которые ложно заявляют, что домен не существует.
По умолчанию auth.

run_as=строка;

Эта опция позволяет заставить pdnsd сменить идентификатор пользователя и группы после того, как будут выполнены все необходимые привелегированные операции. Опция позволяет уменьшить риски безопасности и поэтому рекомендуется. Данная строка задаёт имя пользователя, идентификаторы имени и первичной группы которого будут выбраны.
Подробнее: после чтения конфигурационного файла, переключения в режим демона (если указано) и запуска нити статуса сервера, главная нить меняет свои uid и gid, а также uid и gid всех нитей вновь создаваемых после этого. При выборе других uid и gid, эти нити запускаются с привилегиями указанного пользователя. Под Linux и FreeBSD, нить статуса сервера запускается с начальными привилегиями, только если выключена опция strict_setuid (см. ниже, включено по умолчанию), потому что это может потребоваться для исполнения тестов. Управляющая нить в этом случае также удерживает исходные привилегии. Вы должны позаботиться о том, чтобы пользователь, которого вы указали, имел разрешения на запись в файл кэша и канал статуса (если канал статуса необходим). Вы должны проверить сообщения об ошибках в поисках сообщений подобных "permission denied" (отказано в доступе) и "operation not permitted" (операция запрещена), чтобы обнаружить проблемы с разрешениями.

strict_setuid=(on|off);

Будучи использованной одновременно с опцией run_as, эта опция позволяет указать, что все без исключения нити программы должны запускаться с привилегиями пользователя run_as. Эта опция предоставляет более высокую степень безопасности по сравнению с обычной опцией run_as, но она не всегда доступна. Обратитесь к опции run_as за дополнительной информацией.
Эта опция включена по умолчанию.
Отметим, что эта опция не имеет эффекта на не−Linux системах.

paranoid=(on|off);

Обычно pdnsd запрашивает все серверы в рекурсивном режиме (то есть просит серверы запрашивать другие серверы самим, если возможно и возвращать ответы для доменов, которые могут не быть в зоне их ответственности), и принимать дополнительные записи с информацией для серверов, которые не ответственны за запрашиваемый сервер. Это делает возможным так называемое отравление кэша: злоумышленники могут настроить DNS сервер так, чтобы когда его спрашивают, он возвращает поддельные дополнительные записи. Таким образом, можно заменить доверенные серверы на его собственные, которые заставляют ваш сервер DNS возвращать неправильные IP−адреса. Эта опция защищает ваш кэш от заражения, отклоняя дополнительные записи, которые не описывают домены в зоне ответственности запрошенного сервера, и опция предписывает более не делать рекурсивных запросов. Исключение из этого правила − это серверы, которые были указаны в файле конфигурации, они являются доверенными.
Минусом является возможное падение производительности, в частности, для тех же операций может потребоваться большее количество запросов.
Вы должны помнить, что могут существовать и другие проблемы безопасности, которые являются по существу проблемами DNS, так как любой "традиционный" сервер имеет их (расширения безопасности DNS решают эти проблемы, но они не распространены широко). Одна из таких уязвимостей состоит в том, что атакующий может забрасывать вас поддельными ответами, один из которых может совпасть с запросом, который был выполнен. Если был выполнен такой запрос, то один из 65536 поддельных пакетов будет удачным (то есть среднее число пакетов, необходимых для атаки − 32768). pdnsd может использовать для запросов TCP−соединения, что будет слегка более затратно, но TCP−соединения гораздо менее подвержены таким атакам на нормальных операционных системах. Также pdnsd выбирает случайные идентификаторы запросов, так что у атакующего не получится сделать это быстро. Но эта атака относительно проста, если атакующий может прослушивать ваш сетевой трафик.
Эта уязвимость − не ошибка pdnsd, она возможна при использовании стандартных серверов имён (pdnsd может быть немного более безопасен против атак этого типа, если вы заставите его использовать TCP).
Опция paranoid отключена по умолчанию.

ignore_cd=(on|off);

Новинка версии 1.2.8: Эта опция позволяет вам указать, что бит CD в DNS−запросе будет проигнорирован. В противном случае pdnsd будет отвечать FORMERR клиентам, установившим этот бит в запросе. Включение этой опции безопасно, поскольку бит CD расшифровывается как Checking Disabled − проверка отключена, что означает, что клиент примет не аутентифицированные данные.
Эта опция включена по умолчанию. Отключите её, если вам нужно старое поведение (как в версиях до 1.2.8).

scheme_file=строка;

В дополнение к обычным проверкам, вы можете указать, что некоторые серверы должны запрашиваться только тогда, когда активна определённая схема pcmcia−cs (только под Linux). Для этого pdnsd нужно знать, в каком файле располагается информация о схеме pcmcia. Обычно это /var/lib/pcmcia/scheme или /var/state/pcmcia/scheme.

status_ctl=(on|off);

Имеет тот же эффект, что и опция −s командной строки: включает управление статусом, если указана.
Добавлено Полом Ромбаутсом
: Имейте в виду, что pdnsd−ctl позволяет настраивать pdnsd во время выполнения, может быть даже изменён IP−адрес сервера имён. Если вы не используете pdnsd−ctl и хотите максимальной безопасности, вы не должны включать эту опцию. Она отключена по умолчанию.

daemon=(on|off);

Имеет тот же эффект, что и опция −d командной строки: режим демона включен, если указана.
По умолчанию выключен.

tcp_server=(on|off);

tcp_server=on имеет тот же эффект, что и −t или −−tcp опция командной строки: включает обслуживание TCP. Аналогично, tcp_server=off, подобно опции командной строки −−notcp.
По умолчанию включено.

pid_file=строка;

Имеет тот же эффект, что и опция −p командной строки: вы можете указать файл, в который pdnsd запишет свой PID при запуске в режиме демона.

verbosity=число;

Опция имеет тот же эффект, что и опция −v командной строки: вы можете установить информативность сообщений pdnsd. Аргумент − это число между 0 (мало сообщений) и 3 (наибольшее количество сообщений).

query_method=(tcp_only|udp_only|tcp_udp|udp_tcp);

Эта опция имеет тот же эффект, что и опция −m командной строки. Прочитайте документацию по этой опции командной строки. tcp_only указывает аргумент командной строки to, udp_only − uo и tcp_udp − tu.
Если используется query_method=tcp_udp, рекомендуется также установить опцию глобального тайм−аута по меньшей мере в два раза больше самого длинного тайм−аута сервера.

run_ipv4=(on|off);

Имеет тот же эффект, что опции −4 или −6 командной строки: если указано on, включается поддержка IPv4, а поддержка IPv6 выключается (если она доступна). Если указано off, IPv4 будет отключена, а IPv6 будет включена. Для этой опции важно, чтобы pdnsd был скомпилирован с поддержкой протокола, который был выбран. Если pdnsd был скомпилирован с одновременной поддержкой IPv4 и IPv6, а вы хотите включить IPv6−адреса в конфигурационный файл, вероятно потребуется указать сначала опцию run_ipv4=off, чтобы быть уверенным, что IPv6−адреса были корректно распознаны.

debug=(on|off);

Имеет тот же эффект, что и опция −g командной строки: включает отладочные сообщения, если указано on.

ctl_perms=число;

Эта опция позволяет вам устанавливать файловые разрешения, которые будет иметь сокет, управляющий статусом pdnsd. Владельцем файла будет пользователь run_as, или, если ничего не указано, пользователь, запустивший pdnsd. Если вы хотите указать разрешения в восьмеричном виде (как обычно), не забудьте добавить ноль в начале числа (0600 вместо 600!). Для использования управления статусом требуется доступ на запись. По умолчанию это 0600 (только владелец может читать или писать).
Помните, что сокет сохраняется в каталоге кэша, поэтому может потребоваться также настроить разрешения на доступ к каталогу. Убедитесь, что каталог кэша не доступен на запись для недоверенных пользователей.

proc_limit=число;

С помощью этой опции вы можете установить максимальное количества активных одновременно нитей pdnsd. Если это число превышается, запросы встают в очередь и откладываются на некоторое время. Обратитесь также к опции procq_limit.
По умолчанию 40.

procq_limit=число;

Когда будет достигнут предел proc_limit запрашивающих нитей, попытки соединения к pdnsd будут вставать в очередь. С помощью этой опции можно задать максимальную длину очереди. Если длина очереди тоже будет превышена, входящие запросы будут отбрасываться. Это означает, что TCP−соединения будут закрыты, а UDP−запросы будут просто отброшены, что, возможно, вызовет ожидание DNS−клиента, инициировавшего запрос до тех пор, пока не будет достигнут тайм−аут ожидания ответа.
Обратитесь также к опции proc_limit. В любой момент времени будет существовать максимум proc_limit+procq_limit нитей запросов (и, в зависимости от настроек, будут существовать всегда от 3 до 6 дополнительных нитей).
По умолчанию 60.

tcp_qtimeout=время;

Эта опция задаёт тайм−аут для TCP−запросов. Если через TCP−соединение не был принят полный запрос, через указанный промежуток времени соединение будет закрыто. По умолчанию это время задаётся перед компиляцией, с помощью опции −−with−tcp−qtimeout скрипта configure.

par_queries=число;

Эта опция используется для задания максимального количества удалённых серверов, которые могут опрашиваться одновременно, для каждого запроса, который принял pdnsd.
Начиная с версии 1.1.11, значение этой опции слегка изменилось. Теперь это приращение, на которое увеличивается число параллельных запросов, если предыдущий набор серверов превысил время ожидания. Например, если имеется список сервер1, сервер2, сервер3, и т.д. доступных серверов и par_queries=2, то pdnsd сначала отправит запросы на сервер1 и сервер2, и будет ждать ответа от этих серверов.
Если эти серверы не отправят ответ в течение периода тайм−аута, pdnsd отправит дополнительные запросы на сервер3 и сервер4, и будет ждать ответа от сервера1, сервера2, сервера3 и сервера4, и так далее до тех пор, пока не получит полезный ответ или список не будет исчерпан.
В наихудшем случае запросы ко всем серверам в списке доступных серверов не будут завершены. Таким образом мы можем использовать больше системных ресурсов (но только если первые серверы в списке медленные или неотзывчивые), но преимущество в том, что мы имеем больший шанс получить ответ. Кроме того, раз уж приходится ждать так долго, то почему бы не ждать большее число серверов.
Смотрите также ниже объяснение опции глобального тайм−аута.
1 или 2 − хорошие значения для этой опции. Значение по умолчанию устанавливается при компиляции, с помощью опции −−with−par−queries скрипта configure.

timeout=время;

Это глобальный параметр тайм−аута для DNS−запросов. Он указывает минимальный период времени, которое pdnsd будет ждать после отправки первого запроса удалённому серверу перед тем как решит, что не принял ответ. Опции тайм−аута в конфигурационном файле теперь задают только минимальные интервалы тайм−аута. Установка опции глобального таймаута даёт возможность указывать совсем короткие интервалы тайм−аута в секции server (см. ниже). Это приводит к тому, что pdnsd довольно быстро начнёт запрашивать дополнительные серверы, если первые серверы долго отвечают (но всё ещё продолжит ожидать ответа от первого из них). Это позволяет pdnsd в определённых ситуациях быстрее получать ответ.
Если используется query_method=tcp_udp, рекомендуется задать глобальный тайм−аут по меньшей мере в двое больше самого большого тайм−аута сервера, иначе pdnsd может не успеть сделать UDP−запрос, если истекло время TCP−соединения.
По умолчанию, значение − 0.

randomize_recs=(on|off);

Если эта опция включена, pdnsd случайно переупорядочивает кэшированные записи одного типа, когда создаёт ответ. Это реализует карусельную схему DNS и увеличивает устойчивость от сбоев для узлов с множеством IP−адресов, поэтому обычно это хорошая идея.
Включено по умолчанию.

query_port_start=(число|none);

Если задано число, то оно определяет начало диапазона портов, используемых pdnsd для запросов. Данное значение должно быть >=1024. Эта опция предназначена для некоторых конфигураций пакетных фильтров, которые фильтруют на основании порта источника. Помните о том, что с портом в этом диапазоне может быть связано другое приложение, поэтому пакетные фильтры с учётом состояний, использующие целевой порт и/или идентификатор процесса могут быть более эффективным. В таком случае, если задан начальный порт для запросов, pdnsd использует этот порт как первый порт указанного диапазона портов (см. query_port_end), используемый для запросов. pdnsd будет пытаться выбирать свободный порт случайным образом из этого диапазона в качестве локального порта для запросов.
Чтобы убедиться, что портов для использования pdnsd достаточно, диапазон между query_port_start и query_port_end должен быть установлен равным как минимум (par_queries * proc_limit). Очень рекомендуется использовать большее значение, так как другие приложения могут выделять порты в этом диапазоне. По возможности, этот диапазон не должен содержать пространства, которые обычно используют другие приложения.
Значение по умолчанию для этой опции − 1024. Вместе со значением по умолчанию для query_port_end, возможному злоумышленнику угадать исходный порт решателем pdnsd. Если вы ничего не укажете здесь, pdnsd позволит ядру выбирать исходный порт, но это может сделать pdnsd более уязвимым к атакам.

query_port_end=число;

Используется только в случае, когда определена опция query_port_start. Определяет последний порт диапазона, начинающегося с query_port_start, используемого для запросов pdnsd. По умолчанию равен 65535, это же число является максимально допустимым для этой опции. За подробностями обратитесь к описанию query_port_start.

delegation_only=строка;

Добавлено Полом Ромбаутсом: Эта опция указывает зону "только делегировать". Это означает, что если pdnsd принимает запрос на имя, которое находится в поддомене зоны "только делегировать", но удалённый сервер имён возвращает ответ с секцией нехватки полномочий для любых ресурсных записей NS поддомена этой зоны, pdnsd будет отвечать NXDOMAIN (неизвестный домен). Эта возможность может быть использована для избежания нежелательных эффектов "шаблонов" DNS. Различные зоны "только делегировать" могут быть указаны вместе. Если вы укажете корневые серверы в секции server, важно чтобы в такой секции была опция root_server=on.
Пример:

delegation_only="com","net";

Эта возможность отключена по умолчанию. Рекомендуется использовать эту возможность, только если она действительно нужна. При использовании этой опции существует риск того, что некоторые законные имена будут заблокированы, особенно если запрошенные pdnsd удалённые серверы имён возвращают ответы с пустой секцией полномочий.

ipv4_6_prefix=строка;

Эта опция имеет тот же эффект, что и опция −i командной строки. Когда pdnsd запущен в режиме IPv6, эта опция указывает pdnsd использовать префикс для преобразования адресов IPv4, указанных в конфигурационном файле (или адреса, указанные с помощью pdnsd−ctl), в отображённые адреса IPv6. Строка должна быть правильным адресом IPv6. Будут использованы только первые 96 бит. Заметим, что эта опция имеет эффект только при разборе адресов IPv4, перечисленных после неё.
По умолчанию "::ffff.0.0.0.0".

use_nss=(on|off);

Если эта опция включена (on), pdnsd вызовет initgroups() для настройки списка доступа группы, каждый раз, когда pdnsd меняет свои идентификатор пользователя или идентификатор группы (см. опцию run_as). При этом возможна одна загвоздка, если initgroups() использует NSS (Name Service Switch − переключение имён служб) и в NSS включено использование DNS. В таких случаях вы можете попытаться увеличить длину таймаутов и остановок. Задав use_nss=off, вы можете отключить вызов initgroups() (возможно только в версии 1.2.5 и более поздних).
Эта опция была реализована Жаном−Мареком Глоговски (Jan−Marek Glogowski).
Включено по умолчанию.

udpbufsize=число;

Новое в версии 1.2.9: Эта опция задаёт верхний предел размера сообщений UDP DNS. По умолчанию − 1024.
Смотрите также ниже опцию сервера edns_query.

Секция server
Каждый секция server указывает набор серверов имён, для которых pdnsd должен попытаться получить записи ресурсов или получить от них информацию о полномочиях. Серверы опрашиваются в порядке их появления (или параллельно до ограниченного предела). Если один сбоит, пробуется следующий и так далее.
Вероятно вы хотите указать DNS сервер в Вашей локальной сети, кэширующие серверы Вашего интернет−провайдера или даже список корневых серверов в одной или более секциях server.
В этой секции поддерживаются следующие опции:
label=
строка;

Указывает метку для секции server. Она может использоваться для ссылки на эту секцию при использовании pdnsd−ctl, управляющей утилиты pdnsd.
Вы можете задать различные секции server с одинаковой меткой, но если Вы хотите изменить адреса в секции server (см. далее опцию ip) во время работы с помощью "pdnsd−ctl server label up dns1,dns2,...", метка должна быть уникальной.

ip=строка;

Задаёт IP (IP, не имя узла) сервера.
Множество IP−адресов может быть задано в одной секции server. Это может быть сделано введением нескольких строк в форме ip=строка; или одной строкой подобной этой:

ip=строка,строка,строка;

Хотя бы один IP−адрес обязательно должен быть указан в файле конфигурации. Секция server без IP−адресов будет оставаться неактивной до тех пор, пока не будет назначен один или более адресов с помощью pdnsd−ctl, утилиты для управления pdnsd.
Если pdnsd был скомпилирован с одновременной поддержкой IPv4 и IPv6, любые адреса IPv6 указанные здесь, будут пропущены с предупреждающим сообщением, если pdnsd не запускается в режиме IPv6. Таким образом, если pdnsd был скомпилирован для загрузки в режиме IPv6 по умолчанию, нужно сначала использовать опцию командной строки −6 или установить run_ipv4=off (см. секцию global), чтобы удостовериться, что адреса IPv6 были правильно распознаны.
Если pdnsd запущен в режиме IPv6 и вы указали здесь адрес IPv4, он будет автоматически преобразован в адрес IPv6.

file=строка;

Новое в версии 1.2: Эта опция позволяет вам задать имя файла в стиле resolv.conf. Из строк, начинающихся с ключевого слова nameserver, второе поле будет распознано как IP−адрес, как если бы он был указан опцией ip=. Остальные строки будут пропущены. Если содержимое файла меняется во время работы pdnsd, вы можете заставить pdnsd узнать об изменениях с помощью команды pdnsd−ctl, управляющей pdnsd. В большинстве случаев будет удобно поместить команду "pdnsd−ctl config" в скрипт, который автоматически запускается после изменений конфигурации DNS.
Например, допустим имеется PPP−клиент, который записывает конфигурацию DNS вашего интернет−провайдера в файл /etc/ppp/resolv.conf и запускает скрипт /etc/ppp/ip−up, когда устанавливает новое соединение. Одним из способов, гарантирующих, что pdnsd будет автоматически переконфигурирован, является добавление file=/etc/ppp/resolv.conf в секции server файла конфигурации и добавление команды "pdnsd−ctl config" в /etc/ppp/ip−up.

port=число;

Задаёт порт, на котором удалённый сервер имён ожидает соединений. По умолчанию это 53 (официальный порт DNS).

uptest=(ping|none|if|dev|diald|exec|query);

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

ping: Посылает серверу запрос ICMP_ECHO. Если сервер не отвечает в течение тайм−аута, он считается недоступным до следующей пробы.

none: Статус доступности не меняется, обновляется только отметка времени.

if: Проверяет, что интерфейс (указанный в опции interface=) существует, подключен и активен. В настоящее время работает для всех "обычных" сетевых интерфейсов, интерфейсов, которые не исчезают при отключении (например ppp?), и дополнительно для Linux интерфейсов ISDN (как в ядре 2.2). Отметим, что для ISDN−интерфейсов необходим файл устройства /dev/isdninfo (старший 45, младший 255), в противном случае тест ISDN всегда будет завершаться ошибкой.

dev и diald: Проводит проверку и, если она была удачной, производит дополнительную независимую проверку программ, заблокировавших заданное (modem−) устройство. Необходимые параметры − интерфейс (указывается как для теста доступности, например "ppp0") и устройство в каталоге /dev (например "modem" для /dev/modem), оно указывается с помощью опции device=. pdnsd будет просматривать PID−файл для заданного интерфейса в /var/lock (например /ver/run/ppp0.pid) и для файла блокировки заданного устройства (например /var/lock/LCK..modem). Затем дополнительно проверит, что блокирущий процесс, создавший PID−файл, всё ещё доступен. В этом случае для заданного интерфейса будут проведены обычные тесты доступности.
Опция dev используется для pppd, работающего в режиме звонка по требованию. diald − то же самое для пользователей diald.

exec: Испоняет заданную команду в оболочке /bin/sh (как /bin/sh −c <команда>) и оценивает результат (код, возвращённый последней командой) в стиле обработки оболочкой кодов возврата. То есть 0 обозначает успех, все другие значения обозначают ошибку. Имя оболочки задаётся опцией uptest_sh. Команда задаётся опцией uptest_cmd (см. ниже). О проблемах безопасности написано там же.

query: Новое в версии 1.2: Работает подобно проверке ping, но отправляет пустой запрос DNS. Если сервер отправляет обратно хорошо оформленный ответ до истечения периода тайм−аута (исключая SERVFAIL), сервер будет считаться доступным. Эта проверка полезна, если удалённый сервер никогда не отвечает на запросы ICMP_ECHO, к несчастью в последнее время это становится повсеместным. Удалённый сервер может также быть доступным, но игнорировать пустые запросы DNS. В таком случае нужно задать значение опции query_test_name (см. ниже). Во многих случаях эта проверка может быть более надёжным индикатором доступности, чем остальные упомянутые до неё.

По умолчанию − none.

ЗАМЕЧАНИЕ: Если вы используете звонок по требованию, используйте none, if, dev, diald или exec, поскольку ping или query отправляют пакеты с указанным интервалом и из−за этого начнётся установка коммутируемого соединения!

ping_timeout=число;

Устанавливает тайм−аут для теста ping в десятых секунд (эта единица времени всё ещё используется в целях совместимости с предыдущими версиями; в настоящее время реализована точность только до единиц секунд).
По умолчанию 600 (одна минута).

ping_ip=строка;

IP для теста ping. По умолчанию это IP сервера имён.

query_test_name=строка;

Новое в версии 1.2.9: Задаёт имя, которое будет использоваться в запросах проверки доступности uptest=query. Если строка − незакавыченная константа none, используется пустой запрос (используется по умолчанию), в противном случае будет выполняться запрос типа A с указанным здесь доменным именем. Не требуется чтобы доменное имя существовало или имело запись типа A, чтобы проверка завершилась успешно.
Если удалённый сервер игнорирует пустые запросы, может потребоваться задать set query_test_name="." (корневой домен).

uptest_cmd=строка,строка;

или

uptest_cmd=строка;

Устанавливает команду для функции uptest=exec в первой строке. Если задана вторая строка, она указывает пользователя, у которого для выполнения команды будут взяты идентификатор пользователя и первичной группы.
Это особенно полезно, если сервер работает от имени root, но не желательно, чтобы тест производился с привилегиями пользователя root. Фактически, вы никогда не должны исполнять тест от имени root, если это возможно.
Если сервер запущен с setuid или setgid, то происходит попытка увеличения привилегий, чтобы затем отбросить их до привилегий указанного пользователя. Это сделано для предотвращения лазеек в системе безопасности setuid/gid (иначе любой пользователь сможет исполнять команды как пользователь root, если на выполняемом файле установлен бит setuid).
Отметим, что это не всегда возможно, и поэтому pdnsd никогда не должен иметь установленный бит setuid или setgid. Команда, исполняется с помощью /bin/sh, так что в ней должны быть доступны встроенные команды оболочки.

interval=(время|onquery|ontimeout);

Устанавливает интервал для теста доступности сервера. По умолчанию 900 секунд; однако если истёк тайм−аут запроса, тест будет повторён, и лишь затем отметка времени будет сброшена.
Если вы укажете onquery вместо тайм−аута, интерфейс будет проверяться перед каждым запросом. Это предотвращает автоматический дозвон коммутируемых интерфейсов (diald/pppd или ppp) при появлении запросов DNS. Предполагается использование совместно с тестом интерфейса ;−)
Отметим, что использование uptest=exec можете вызвать проблемы производительности на медленных компьютерах, если в добавок к этой опции будет использоваться опция interval=onquery. НЕ ИСПОЛЬЗУЙТЕ onquery совместно с uptest=ping или uptest=query, это может вызвать задержки, если сервер не отвечает. Отметим также, что использование onquery не гарантирует, что интерфейс не будет использован. Когда другой (достижимый) DNS−сервер сообщит pdnsd, что нужно спросить данные у третьего DNS−сервера, pdnsd сделает это и для независимой проверки не имеет значения, является ли коммутируемый интерфейс включенным или нет. Однако, эта ситуация встречается редко.
Новое в версии 1.2.3:
Третья возможность − указать interval=ontimeout. В этом случае сервер не проверяется ни при запуске/переконфигурации, ни через регулярные интервалы, но проверяется только после того, как истёк тайм−аут DNS−запроса. Определённые типы сетевых проблем, такие как отброшенные соединения, могут также вызывать решение о недоступности сервера. Однако, если сервер однажды объявлен недоступным, он никогда не будет использован снова, если не будет восстановлен с помощью команды pdnsd−ctl config или server. Идея этой опции заключается в уменьшении количества тестов, исходя из того что все серверы доступны, поскольку нет причин предполагать обратное.

interface=строка;

Сетевой интерфейс (или сетевое устройство, например "eth0") для опции uptest=if. Он должен быть указан, если задана опция uptest=if.

device=строка;

Устройство (modem−), используемое опцией uptest=dev. Если используется проверка PPP−соединения по требованию (совместно с uptest=dev), в этой опции нужно указать устройство, используемое вашим pppd, например modem для /dev/modem.
Нужно задать значение, если uptest=dev.

timeout=время;

Устанавливает тайм−аут DNS−запроса. По умолчанию 120 секунд. Возможно вам захочется уменьшить его.
Тайм−ауты, указанные в файле конфигурации, используются не только в качестве минимального периода времени ожидания ответа. Запросы к удалённому серверу не отменяются до тех пор, пока не будет принят полезный ответ, или все другие запросы не превысят время ожидания или не вернут ошибку.
Если вы уже задали опцию глобального тайм−аута, может быть вам захочется установить здесь меньшее значение. Обратитесь к объяснению назначения опции таймаута в секции global.

purge_cache=(on|off);

Для каждой полученной DNS−записи задаётся время устаревания в кэше, которое указывает на какой период времени кэшируются данные, прежде чем будут перезагружены. Если purge_cache установлена в off, устаревшие записи не очищаются (до тех пор, пока не будет превышен размер кэша, в этом случае очищаются самые старые записи). Вместо очистки, записи по−прежнему будут обслуживаться, даже если их не удаётся обновить (например, потому что все серверы недоступны).
По умолчанию выключен.

caching=(on|off);

Указывает, должно ли вообще производиться кэширование для этого сервера. По умолчанию включено.

lean_query=(on|off);

Задаёт использование облегчённого режима запросов. В этом режиме будет решаться и кешироваться только информация действительно запрошенная у pdnsd. Выгода режима состоит в том, что уменьшается объём используемой кэшем памяти, а запросы обычно выполняются быстрее. В 90% случаев требуются только адресные (A) записи. Если режим отключить, то pdnsd будет кэшировать все данные об узле, которые он только смог найти и будет специально запрашивать все доступные записи (это не совсем точно, но очень близко к тому, что происходит в действительности ;−) Конечно, это увеличивает объём ответных пакетов.
Некоторые серверы имён, имеющие ошибки в реализации, могут не возвращать записи CNAME, если не запросить все записи. Я не знаю, распространены ли такие серверы повсеместно, но если вы столкнулись с проблемой решения имён определённого узла, попытайтесь выключить эту опцию.
Последнее замечание: Если используется несколько pdnsd, каждый из которых доступен другому, включение этой опции вероятно будет очень выгодным.
По умолчанию включено.

edns_query=(on|off);

Новое в версии 1.2.9: Указывает, нужно ли использовать EDNS (механизмы расширения DNS) для исходящих запросов. В настоящее время опция может быть полезна только для разрешения UDP−сообщений больше 512 байт. Отметим, что задание этой настройки может вызвать проблемы в сочетании с устаревшими системами и программным обеспечением, в том числе с предыдущими версиями pdnsd.
По умолчанию опция отключена, но если ваша сеть может обрабатывать UDP−пакеты с полезной нагрузкой значительно больше 512 байт, рекомендуется включить её.
Отметим, что эта опция влияет только на исходящие запросы. Если pdnsd принимает запрос с использованием EDNS, он ответит с использованием EDNS вне зависимости от значения этой опции.

Смотрите выше также описаниее опции udpbufsize.

scheme=строка;

Можно указать схему pcmcia−cs, которая будет использоваться совместно с проверками доступности. Если указать схему, сервер этой секции будет запрашиваться только если указанная схема активна. В строке схемы доступны шаблоны оболочки (* и ?). Чтобы опция заработала, нужно также указать опцию scheme_file в секции global.

preset=(on|off);

Позволяет указать начальное состояние сервера, перед тем как будут производиться какие−либо проверки. on указывает, что сервер считается доступным (это поведение по умолчанию). Это особенно полезно, если настроена проверка uptest=none; а вы хотите управлять сервером только с помощью pdnsd−ctl.

proxy_only=(on|off);

Когда эта опция установлена в on, ответы полученные от серверов всегда принимаются, друге серверы не запрашиваются (например, указанные в записи NS запрошенного домена). Если эта опция не включена, в некоторых случаях pdnsd будет выполнять такие запросы (в частности при обработке запросов ANY).
Эта опция полезна, если вы по некоторым причинам не хотите, чтобы pdnsd соединялся с внешними серверами (например, если пакетный фильтр блокирует такие запросы).
Я рекомендую чтобы при использовании этой опции вы таже включили опцию lean_query.
По умолчанию выключен.

root_server=(on|off|discover);

Задайте эту опцию, если серверы, указанные в секции являются корневыми серверами. Обычно корневой сервер в своём ответе предоставляет серверы имён для доменов верхнего уровня. Установка root_server=on заставляет pdnsd попытаться использовать кэшированную информацию о доменах верхнего уровня для уменьшения количества запросов к корневым серверам, решая таким образом новые имена более эффективно. Вы можете получить список доступных корневых серверов, запустив команду "dig −t ns .".
Эта опция также необходима при использовании опции delegation_only.
Новинка версии 1.2.8:
значением этой опции может быть "discover". В этом случае pdnsd для получения списка корневых серверов будет запрашивать серверы, указанные в опции ip=. Адреса корневых серверов заменят адреса, указанные в опции ip=. Это произойдёт только при запуске, или после команды "pdnsd−ctl config". В этом случае серверы имён, указанные в опции ip= не являются корневыми серверами, они просто знают имена и адреса корневых серверов. После обнаружения корневых серверов pdnsd будет вести себя так, как будто была указана опция root_server=on.
По умолчанию выключен.

randomize_servers=(on|off);

Новое в версии 1.2.6: Включите опцию (on), чтобы каждый сервер имён в этой секции имел равный шанс на получение запроса. Если эта опция выключена (off), серверы имён будут всегда опрашиваться начиная с первого указанного. Даже если опция включена, порядок запроса не строго случайный. Случайным образом выбирается только первый сервер; последующие опрашиваются в последовательном порядке, продолжая с начала списка, если достигнут его конец. Отметим, что эта опция оказывает действие только на порядок внутри секции. Серверы в первой секции (active) всегда опрашиваются перед серверами из второй секции, и т.д.
По умолчанию отключено (off), но если настройки предписывают начинать решение с корневых серверов, то настоятельно рекомендуется использовать эту опцию. Если root_server=on, то эта опция также влияет на порядок запроса серверов имён для доменов верхнего уровня.

reject=строка;

Новое в версии 1.2.6: Эта опция может использоваться для того, чтобы pdnds отклонял ответы, содержащие соответствующие IP−адреса. Вы можете указать один IP−адрес для точного соответствия, или диапазон адресов при помощи пары адрес/маска. Маска может иметь вид простого целого числа, обозначающего количество начальных единичных битов в маске, или иметь обычный вид IP−адреса. IP−адреса могут быть адресами IPv4 или IPv6 (поддержка которых обеспечивается в библиотеках C, если не отключена проверка записей AAAA). Когда адреса в списке reject сравниваются с адресами в ответе, для сравнения используются только те биты, которые указаны в маске, остаток адреса игнорируется.
Могут быть указаны несколько адресов или пар адрес/маска; это можно сделать введя несколько строк в виде reject=строка; или одной строкой, как эта:

reject=строка,строка,строка;

Каким образом pdnsd поступает, если ответ содержит один адрес из списка, зависит от опции reject_policy. Описание опции смотрите ниже.

reject_policy=(fail|negate);

Новое в версии 1.2.6: Эта опция определяет поведение pdnsd в тех случаях, когда адрес в ответе от сервера имён совпадает со списком reject (смотрите выше). Если эта опция имеет значение fail, то pdnsd попытается запросить другой сервер, или, если серверов больше не осталось, вернёт ответ SERVFAIL. Если эта опция имеет значение negate, то pdnsd немедленно вернёт ответ NXDOMAIN (неизвестный домен), не запрашивая дополнительные серверы. Настройка fail полезна, если вы не всегда доверяете серверам в этой секции, но доверяете серверам в следующей секции. Настройка negate может использоваться для полного запрета соответствующих IP−адресов. В этом случае вы должны поместить одинаковый список reject в каждой из секций server, а также задать в опции reject_recursively (смотрите выше) значение true.
Значение по умолчанию − fail.

reject_recursively=(on|off);

Новое в версии 1.2.6: Обычно pdnsd проверяет адреса в списке reject (смотрите выше) только если ответ приходит непосредственно от серверов имён, перечисленных в файле конфигурации. Если эта опция имеет значение on, то pdnsd также будет выполнять эту проверку и для тех серверов имён, информация о которых получена из записей NS в разделе авторитативности предыдущего ответа (который был не выполним и не авторитативен).
По умолчанию выключен.

policy=(included|excluded|simple_only|fqdn_only);

pdnsd поддерживает включающие/исключающие списки для секции server: с помощью include= и exclude= (смотрите ниже) можно указать имена доменов, для которых данный сервер будет (или напротив − не будет) использоваться. Применяется первое по счёту совпадение (то есть будет применено первое правило include или exclude в секции server, которое совпадёт с именем домена). Если нет правила, совпадающего с заданными именем домена, опция policy= всё−же определяет, будет ли данный сервер использован для поиска этого доменного имени. Когда задано included, сервер будет запрошен; когда задано excluded − не будет. Если задано значение simple_only, сервер будет использован только для поиска простого имени узла. В другом случае, если задано значение fqdn_only, сервер будет использоваться только для поиска имён, состоящих из двух или более меток (то есть имён, имеющих внутри по меньшей мере одну точку).
Если нет серверов, доступных для запрошенного домена, pdnsd возвращает клиенту сообщение об ошибке, которое обычно останавливает попытки клиента решить указанный домен с использованием этого сервера (решатель libc, например, возвращает ошибку приложению, которое пыталось решить домен, если нет других доступных серверов в resolv.conf). Иногда это может быть полезным.
Замечание
: константы simple_only и fqdn_only были добавлены Полом Ромбаутсом (Paul Rombouts). Они полезны для контроля, какие серверы имён (если есть) будут использоваться pdnsd для решения простых имён узлов (состоящих из одной метки). fqdn_only обычно понимается как "только полностью указанное доменное имя", но это неправильное применение термина. Подразумевается, что имена, принимаемые в запросах pdnsd, всегда указаны полностью. Если вы не совсем понимаете, для чего могут быть полезны опции simple_only и fqdn_only, возможно вам будет лучше отключить их использование.
Умолчание для этой опции − included.

include=строка;

Эта опция добавляет запись в список исключений/включений. Если домен совпадает с именем, заданным в строке, и если это было первое совпадающее правило, сервер запрашивается (смотрите также описание опции policy).
Если заданное имя начинается с точки, то его поддомены тоже будут совпадать с правилом. Например, со строчкой ".foo.bar." будут совпадать доменные имена a.foo.bar., a.b.c.foo.bar. и foo.bar.
Если оно не начинается с точки, то будет применяться только толчное совпадение (за исключением регистра, конечно). Подсказка: если вам нужно включить все поддомены, но не само заданное имя домена, поместите искючающее правило только−совпадение перед включающим правилом, например: exclude="foo.bar."; include=".foo.bar.";
Предыдущие версии pdnsd требовали, чтобы заданные имена в этой и следующей опции оканчивались точкой. Но начиная с версии 1.1.8b1−par8, pdnsd автоматически добавляет точку в конце, если она пропущена.
pdnsd теперь также принимает более компактную нотацию для добавления нескольких записей "include" в одной строке, например:

include=".foo",".bar",".my.dom";

exclude=строка;

Эта опция добавляет запись к списку исключений/включений. Если домен совпадает с именем, заданным в строке, и если это было первое совпадающее правило, то сервер не запрашивается (см. также опцию policy).
Если заданное имя начинается с точки, то его поддомены тоже будут совпадать с правилом. Например, со строчкой ".foo.bar." будут совпадать доменные имена a.foo.bar., a.b.c.foo.bar. и foo.bar.
Если имя не начинается с точки, тобудет совпадать исключительно заданное имя (игнорируя регистр, разумеется). Подсказка: если нужно исключить все поддомены, но не сам домен с заданными именем, поместите правило только−совпадение перед исключающим правилом, например: include="foo.bar.";exclude=".foo.bar.";
pdnsd теперь также принимает более компактную нотацию для добавления нескольких записей "exclude" в одной строке, например:

exclude=".foo",".bar",".my.dom";

Секция rr
Каждая секция rr указывает ресурсную запись DNS, которая хранится локально. Это позволяет указывать собственные записи DNS, которые обслуживаются pdnsd ограниченным образом. Реализованы только записи A, PTR, CNAME, MX, NS и SOA.
Эта опция позволяет определять ресурсные записи для 1.0.0.127.in−addr.arpa. и localhost. (и возможно даже одного или двух узлов) без запуска дополнительного сервера имён, если кэширующие серверы имён не обслуживают эти записи. Предполагается, что pdnsd НЕ способен работать в качестве полноценного сервера имён.
name=
строка;

Описывает доменное имя ресурсной записи . Эту опцию необходимо указывать перед записей любого типа: A, PTR, CNAME, MX, NS или SOA. Имена интерпретируются как абсолютные доменные имена (то есть pdnsd подразумевает, что они оканчиваются корневым доменом). Для этих и всех последующих аргументов, которые требуют доменные имена, нужно указывать доменные имена в точечной нотации (например venera.isi.edu.).
Предыдущая версия pdnsd требовала, чтобы доменные имена, заданные в конфигурационном файле, оканчивались точкой. Но начиная с версии 1.1.8b1−par8, pdnsd автоматически добавляет точку в конце, если она пропущена.
Новое в версии 1.2:
Также возможно указать имя, начинающееся с метки *. Такие имена называются шаблонами. Со * в шаблоне может совпадать одна или более меток в запрашиваемом имени, но только метки целиком. Любые другие, не начальнеы символы * в шаблоне, совпадают со * только буквально.
Например, *.mydomain совпадёт с a.mydomain или www.a.mydomain, но не с mydomain. *.a*.mydomain совпадёт только с www.a*.mydomain, но не с www.ab.mydomain. *a.mydomain совпадёт только с самим собой.
Перед указанием секции rr с name=*.mydomain, нужно определить несколько записей для mydomain, обычно это NS и/или SOA записи. Например:

rr {
name = mydomain;
ns = localhost;
soa = localhost, root.localhost, 42, 86400, 900, 86400, 86400;
}
rr {
name = *.mydomain;
a = 192.168.1.10;
}

В этом примере, www.mydomain и ftp.mydomain будут решаться в числовой адрес 192.168.1.10 (если нет секций rr, явно указывающих адреса для www.mydomain или ftp.mydomain). Если нужно, чтобы mydomain тоже решался в числовой адрес, добавьте запись A в первой секции rr.

ttl=время;

Указывает ttl (время жизни) для всех ресурсных записей в этой секции после этой опции. По умолчанию это 86400 секунд (=1 день).

authrec=(on|off);

Если эта опция включена, то pdnsd будет создавать полномочные локальные записи для этой секции rr. Это означает, что pdnsd помечает доменную запись, так что записи этого домена, не представленые в кэше, будут обрабатываться как несуществующие. То есть pdnsd будет считать, что нет других серверов, у которых может быть запрошена запись этого типа. При этом возвращается ответ, не содержащий записей запрошенного типа. Это чаще всего то, что нужно: если вы добавили запись A для узла, и он не имеет записи AAAA (и нет адресов IPv6), обычно не нужно, чтобы для решения записи этого типа запрашивались другие серверы имён.
Эта опция включена по умолчанию.
Помните, что эта опция имеет эффект, только если ей предшествует опция name!

reverse=(on|off);

Новое в версии 1.2: Если нужно, чтобы локально определённые имена решались в числовой адрес и наоборот, это можно сделать установив reverse=on до определения записи A (смотрите ниже). Другой способ достичь того же эффекта − определить отдельную запись PTR, но эта опция чаще бывает намного более удобной.
По умолчанию выключено.

a=строка;

Определяет запись A (адрес узла). Аргумент − IP−адрес в точечной нотации. pdnsd будет обслуживать этот адрес, как соответствующий имени узла, указанному в опции name.
Для указанного здесь достаточно поддержки в библиотеках C со включенной поддержкой записей AAAA, строка−аргумент может быть также адресом IPv6, в этом случае должна быть определена запись AAAA.
Эта опция может использоваться несколько раз внутри секции rr, таким образом для имени можно определить несколько адресов. Однако, если вы поместите разные адреса в разные секции rr под тем же именем, определение в последней секции rr отменит определения в предыдущих секциях.

ptr=строка;

Определяет запись PTR (указатель доменного имени). Аргумент − имя узла в точечной нотации (смотрите описание опции name). Запись PTR используется для решения адресов в имена. Например, если вы хотите, чтобы адрес 127.0.0.1 решался в localhost, и localhost в 127.0.0.1, вам нужно нечто подобное следующим секциям:

rr {
name = localhost;
a = 127.0.0.1;
owner = localhost;
soa = localhost, root.localhost, 42, 86400, 900, 86400, 86400;
}
rr {
name = 1.0.0.127.in−addr.arpa;
ptr = localhost;
owner = localhost;
soa = localhost, root.localhost, 42, 86400, 900, 86400, 86400;
}

Вторая секция предназначена для обратного решения и использует опцию ptr. Отметим, что можно достичь того же эффекта, указав только первую секцию с reverse=on.
У имени во второй секции есть особенность: когда решатель хочет получить имя узла по интернет−адресу, он формирует адрес, который будет построен из чисел IP−адреса в обратном порядке (1.0.0.127 вместо 127.0.0.1), где каждое число адреса образует поддомен домена in−addr.arpa.
Так что, если вы хотите сформировать адрес для обратного решения, возьмите IP в точечной нотации (например 1.2.3.4), возьмите числа в обратном порядке (4.3.2.1) и дополните in−addr.arpa. (4.3.2.1.in−addr.arpa.). Теперь, определите секцию rr, задающую в опции ptr этот адрес в виде имени и укажите доменное имя соответствующее этому IP−адресу.

cname=строка;

Определяет запись CNAME (каноническое имя). Аргумент должен быть полностью определённым именем узла в точечной нотации (смотрите описание опции name). CNAME − это DNS−эквивалент псевдонима или символической ссылки.
Полезное применение для CNAME − задание коротких, легко запоминающихся имён для узлов со сложными именами. Например, можно создать имя "news", ссылающееся на сервер новостей "nntp2.myisp.com" вашего провайдера. Вместо добавления записи A для "news" с тем же адресом, что у "nntp2.myisp.com", можно задать CNAME указывющий на "nntp2.myisp.com", так что если IP−адрес сервера новостей вдруг изменится, не нужно будет обновлять запись для "news".
Чтобы осуществить это в pdnsd, можно добавить следующую секцию в файл конфигурации:

rr {
name = news;
cname = nntp2.myisp.com;
owner = localhost;
}

mx=строка,число;

Определяет запись MX (почтовый обмен). Строка − это имя узла почтового сервера в точечной нотации (обратитесь к описанию опции name). Число указывает уровень предпочтения.
Когда вы кому−либо отправляете письмо, письмо обычно идёт от вашего клиента электронной почты к вашему SMTP−серверу. Ваш SMTP−сервер проверяет MX−запись домена в почтовом адресе. Например, для joe@example.com, будет просматриваться запись MX для example.com и будет найдено имя почтового сервера для этого домена, скажем, mail.example.com. Затем ваш SMTP−сервер получит A−запись для mail.example.com, и соединится с почтовым сервером адресата.
Если имеется несколько MX−записей, ваш SMTP−сервер будет выбирать одну из них, основываясь на уровнях предпочтений (начиная с наименьшего уровня предпочтения с учётом работоспособности).
Не определяйте записи MX в pdnsd если вы не уверены в том, что вы делаете.

owner=строка;

или

ns=строка;

Определяет запись NS (сервер имён). Указывает имя узла, который должен быть полномочным для записей, определённых в секции rr. Обычно это узел, на котором запущен pdnsd.
Замечание:
В предыдущих версиях pdnsd эта опция должна была указываться перед любой записью A, PTR, CNAME, MX или SOA. В версии 1.2, ограничения на эту опцию такие же, как у только что упомянутых опций, она должна быть указана после опции name=. Это может быть неприятно, если вы используете старый конфигурационный файл, в котором указывается owner= перед name= (приносим свои извинения). Кроме большей согласованности, преимущество также состоит в том, что теперь можно указать столько записей NS, сколько необходимо (включая ноль).

soa=строка,строка,число,время,время,время,время;

Определяет запись SOA (начало полномочий). Первая строка − это доменное имя сервера, оно должно совпадать с именем, которое вы указали в качестве владельца.
Вторая строка указывает почтовый адрес администратора сервера имён. Он тоже указывается как доменное имя, так что нужно заменить знак @ в имени на точку (.) чтобы получить имя, которое нужно здесь указать. Следующий параметр (первое число) − это серийный номер записи. Вы должны увеличивать это число при изменении записи.
Четвёртый параметр − это период обновления. Он указывает время, по прошествии которого кэширующий сервер должен попытаться обновить кэшированную запись.
Пятый параметр указывает время, через которое кэширующий сервер должен попытатья обновить запись после ошибки обновления.
Шестой параметр определяет тайм−аут, после которого кэшированная запись устареет, если она не была обновлена.
Седьмой параметр − это время жизни, которое указывается в каждой ресурсной записи и должно быть таким же, как заданное с помощью опции ttl (если ttl не указан, используется значение по умолчанию − 86400).

txt=строка,...,строка;

Новое в версии 1.2.9: Определяет запись TXT. Здесь можно указать одну или более строк.

Секция neg
Каждая секция neg указывает ресурсные записи DNS или домен DNS, которые должны локально кэшироваться отрицательно. При запросе отрицательно кэшированных записей в ответ будет немедленно возвращена ошибка или пустой ответ без запроса других серверов до тех пор, пока запись действительна. Записи, определённые в секции neg, остаются действительными до тех пор, пока явно не будут аннулированы или удалены пользователем с помощью pdnsd−ctl.
Это полезно в тех случаях, когда определённое приложение периодически запрашивает несуществующие узлы или типы ресурсных записей, и вы не хотите чтобы запрос отправлялся каждый раз, когда кэшированная запись устарела. Например, ненастроенный Netscape Communicator запрашивает серверы новостей и почты при каждом запуске. Если у вас отсутствует список поиска DNS для вашей сети, вы можете предотвратить исходящие запросы к ним, указав

neg {
name = news;
types = domain;
}
neg {
name = mail;
types = domain;
}

в вашем конфигурационном файле. Если список поиска имеется, можно повторить эту запись в списке поиска в дополнение вышеуказанным записям!
В версии 1.1.11 и более поздних, при отрицательном кэшировании целого домен все поддомены ттоже кэшируются отрицательно. Таким образом если указать
neg {name=example.com; types=domain;} в конфигурационном файле, то www.example.com, xxx.adserver.example.com, и т.п. тоже будут закэшированы отрицательно.
name=
строка;

Указывает имя домена, для которого будут созданы отрицательные записи в кэше. Эта опция должна быть указана перед опцией types. Имена интерпретируются как абсолютные имена доменов (то есть pdnsd подразумевает, что они оканчиваются корневым доменом). Имена доменов должны быть указаны в точечной нотации (например venera.isi.edu.).
Предыдущая версия pdnsd требовала, чтобы доменные имена, заданные в конфигурационном файле, оканчивались точкой. Но начиная с версии 1.1.8b1−par8, pdnsd автоматически добавляет точку в конце, если она пропущена.

ttl=время;

Указывает ttl (время жизни) для всех ресурсных записей в этой секции после этой опции. По умолчанию это 86400 секунд (=1 день).

types=(domain|rr_type[,rr_type[,rr_type[,...]]]);

Указывает, что будет кэшироваться отрицательно: domain будет кэшировать отрицательно весь домен; кроме того, можно указать через запятую список типов ресурсных записей, которые будут кэшироваться отрицательно. Можно указать несколько опций types, но домен и типы ресурсых записей взаимоисключают друг друга.
Типы RR указываются с помощью их официальных имён из RFC заглавными буквами, например A, CNAME, NS, PTR, MX, AAAA, ...
Команда pdnsd−ctl list−rrtypes выдаст вам полный список этих типов. pdnsd−ctl собирается вместе с pdnsd и устанавливается во время выполнения команды make install в тот же каталог, что и двоичный файл pdnsd.

Секция source
Каждая секция source заставляет pdnsd прочитать записи из файла в формате похожем на /etc/hosts. pdnsd для каждой записи из этого файла сгенерирует по одной записи для получения адреса из имени узла и по одной − имени узла из его адреса. Это проще, чем определять ресурсную запись для каждого из нужных адресов, поскольку localhost и другие полностью определённые доменные имена обычно уже заданы в /etc/hosts.
Принимаемый формат следующий: знак # является началом комментария, продолжающегося до конца строки. Комментарии и пустые строки пропускаются.
Первая запись в строке (предварённая произвольным числом табуляций и пробелов) − это IP−адрес в точечной нотации, вторая запись в строке (отделённая от первой произвольным числом табуляций или пробелов) − это полностью определённое доменное имя (FQDN) этого IP−адреса. Остаток строки по умолчанию пропускается (в оригинальном /etc/hosts, он может содержать информацию, которая не требуется pdnsd).
owner=
строка;

Указывает имя узла, на котором запущен pdnsd и который указывается в DNS−ответах (особые записи nameserver). Должен быть указан до первой опции file.
Имена интерпретируются как абсолютные доменные имена (то есть pdnsd подразумевает, что они оканчиваются корневым доменом). Доменные имена должны бфть указаны в точечной нотации (например venera.isi.edu.).
Предыдущая версия pdnsd требовала, чтобы доменные имена, заданные в конфигурационном файле, оканчивались точкой. Но начиная с версии 1.1.8b1−par8, pdnsd автоматически добавляет точку в конце, если она пропущена.

ttl=время;

Указывает время жизни для всех ресурсных записей в этой секции после этой опции. По умолчанию 86400 секунд (=1 день).

file=строка;

Строка указывает имя файла. Для каждой записи file в секции source, pdnsd будет пытаться загрузить заданный файл, как описано выше. Ошибка может произойти только в том случае, если файл не может быть открыт. Повреждённые записи будут пропущены.

serve_aliases=(on|off);

Если эта опция включена, pdnsd будет обслуживать псевдонимы, заданные в стиле файла hosts. Это третья запись в строке файла в стиле hosts, которая обычно задаёт "короткое имя" узла. Это может быть полезно, если вы используете сломанный DNS−клиент, не поддерживающий опции domain−search. Если в строке файла нет псевдонимов, pdnsd ведёт себя так, как будто для этой строки файла эта опция отключена.
Эта возможность была предложена Бертом Фредериком (Bert Frederik).
Отключено по умолчанию.

authrec=(on|off);

Если опция включена, pdnsd будет создавать полномочные локальные записи с данными из файла hosts. За более подробным описанием опции обратитесь к описанию опции с тем же названием в секции rr. Отметим, что эта опция влияет только на следующие за ней исходные файлы, указанные в опциях file.
Эта опция включена по умолчанию.

Секция include
Файл конфигурации может включать другие файлы конфигурации. Однако, только секции global и server могут содержать только файлы конфигурации верхниего уровня, так что включаемые файлы на самом деле ограничены секциями, добавляющими в кэш локальные определения.
Секции include в настоящее время имеют только один тип оции, которая может быть указана несколько раз внутри одной секции.
file=
строка;

Строка указывает имя файла. Для каждой опции file в секции include, pdnsd будет пытаться загрузить заданный файл, как описано выше. Файл сам может содержать разделы include, но для предосторожности pdnsd проверяет, что не достигнута максимальная глубина вложенности, предохраняясь от возможной бесконечной рекурсии.

ВЕРСИЯ

Эта страница руководства корректна для pdnsd версии 1.2.9−par.

СМОТРИ ТАКЖЕ

pdnsd(8), pdnsd−ctl(8)

Дополнительную документацию можно найти в подкаталоге doc/ в исходных текстах, или каталоге в /usr/share/doc/pdnsd/, если вы используете двоичный пакет.

АВТОРЫ

pdnsd изначально написан Томасом Моэстлом <tmoestl@gmx.net> и был существенно доработан Полом Э. Ромбаутсом (Paul A. Rombouts) <p.a.rombouts@home.nl> (для версии 1.1.8b1−par и более поздних).

При разработке pdnsd были использованы дополнительные компоненты; обратитесь к исходным текстам или к файлам в каталоге /usr/share/doc/pdnsd/

Эта страница руководства была автоматически сгенерирована из HTML−документации pdnsd, с помощью модифицированного Perl−скрипта, написанного Полом Э. Ромбаутсом (Paul A. Rombouts).

Последний пересмотр: 27 февраля 2012, Пол Э. Ромбаутс (Paul A. Rombouts)

АВТОР ПЕРЕВОДА

Перевод на русский язык выполнил Владимир Ступин <vladimir@stupin.su>.