Доброго времени суток.
Продолжаются мои мучения на стезе изучения bind.
Раза 3 прочитал http://www.zytrax.com/books/dns/ch7/view.html, но так и не осознал полностью принцип работы и синтаксис использования. Задам несколько вопросов, ответы на которые, надеюсь, помогут мне лучше понять принцип работы view:
1. Как я понял, условия для view могут задаваться 3-мя операторами: match-clients, match-destinations и match-recursion-only (которые и использоваться могут только совместно с view), верно?
Смущает строка: «A view clause matches when either or both of its match-clients and match-destinations statements match and when the match-recursive-only condition is met». Т.е. view работает если выполнилось одно из условий match-clients или match-destinations И если выполнено условие match-recursive-only (если match-clients и/или match-destinations не заданы явно, то они принимают значение any, т.е. любой адрес). Таким образом view сработает если: ((match-clients_IP-list) ИЛИ (match-destinations_IP-list)) И (match-recursive-only). Зачем тогда указано «when either or both»? Если и match-clients, и match-destinations явно заданы, разве не должно между ними стоять логическое И, а не ИЛИ?
2. match-clients - определяет список откуда пришел запрос?
3. match-destinations - определяет IP-адреса DNS-сервера на которые пришел запрос?
4. По поводу match-recursive-only (http://www.zytrax.com/books/dns/ch7/view.html#match-recursive-only) вообще не понял, что делает оператор. Что означают его yes и no? Можно, конечно, предположить что, например, задано match-recursive-only no;, т.е. гипотетически view сработает если запрос был не рекурсивным (итеративным), но разве это не прерогатива DNS-сервера решать как ответить на запрос - как на рекурсивный или как на итеративный, клиент же не говорит: «привет, вот у меня к тебе итеративный запрос»? Если так, то какой вообще смысл в операторе match-recursive-only?
5. Нужно ли задавать зоны отдельно за пределами view (т.е. обычными пунктами «zone») или нет? Судя по этой строке «If none of the matching conditions in view clauses matches (and there are no zone clauses outside of view clauses) then BIND will return a server error.» это МОЖНО делать, но не обязательно, если я уверен, что любой запрос удовлетворит условию хотя бы из одного какого-то view, так?
6. View со split horizon. В примере используются разные файлы для одной зоны (что вроде бы логично, для разделения ответов, в зависимости от того, откуда пришел запрос), но я совершенно не понял, как такое может быть, там в каждом файле своя SOA и т.д. что ли? Как выглядят разные файлы в таком случае и как это вообще может работать о_О. Я в курсе что можно с помощью $INCLUDE включать один файл зоны в другой, но в дочернем файле же нет специальных записей вроде SOA?