Как я могу управлять всеми своими доменами с минимальной конфигурацией?

10

Это канонический вопрос об администрировании DNS-сервера.

У меня есть сто или около того доменов. Все эти домены должны быть настроены одинаково, но кажется огромной тратой времени на настройку новой зоны и / или файла зоны для каждого из этих доменов. Должен быть лучший способ автоматизировать это!

Я думаю, что я к чему-то ... если я создаю зону с именем .или использую какую-то другую функцию в своем программном обеспечении DNS, чтобы всегда возвращать определенный IP при Aзапросе записи, это, кажется, приближает меня к желаемому концу результат. Мой сервер авторитетно отвечает на запросы, и им намного легче управлять!

Это работало замечательно, пока программа проверки имени сервера не начала проверять эти домены. Я понял, что смогу устранить большинство ошибок, добавив NSзаписи, но мое программное обеспечение не позволит мне поместить более одной SOAзаписи в один и тот же файл зоны.

Как мне обойти эту SOAпроблему с несколькими записями?

Андрей Б
источник

Ответы:

12

Если я не неправильно понимаю вопрос, я делаю это регулярно с BIND, и, кажется, это нормально, если каждая зона абсолютно идентична.

На моем основном сервере имен у меня есть named.confзаписи, которые указывают на общий файл зоны, например

zone "example.com" {
        type master;
        file "primary/example.GENERIC";
};

zone "example.co.uk" {
        type master;
        file "primary/example.GENERIC";
};

а затем файл зоны, primary/example.GENERICкоторый говорит, например,

;; Start of Authority
@       IN      SOA     ns.teaparty.net. dns.gatekeeper.ltd.uk. (
                        2004091201      ; serial number YYYYMMDDNN
                        28800           ; refresh  8 hours
                        7200            ; retry    2 hours
                        864000          ; expire  10 days
                        3600 )          ; min ttl  1 day
;;
;;      Name Servers
                IN      NS      ns.teaparty.net.
                IN      NS      ns2.teaparty.net.

И я не знаю никаких проблем с этими зонами вообще. Я открыт для того, чтобы мне сказали, что я неправильно понял вопрос или что мои домены фактически не работают, но до тех пор я думаю, что это работает для меня.

Обратите внимание, что вы не можете использовать тот же трюк на дополнительном устройстве ; каждая зона будет требовать другой файл должен быть сохранен. Но так как содержимое этого файла будет заполняться и постоянно актуальный по зонные пересылки от основной, это не огромная сделка.

Безумный Шляпник
источник
4

Есть несколько ярлыков, которые вы можете использовать, чтобы сделать вашу жизнь проще:

Если вы используете Bind или подобное программное обеспечение, которое использует файлы для хранения данных зоны: укажите ваши зоны на один и тот же файл, например:

zone "example.net" {
    type master;
    file "/etc/bind/zone/default.zone";
};

zone "example.org" {
    type master;
    file "/etc/bind/zone/default.zone";
};

Поскольку вы можете использовать определенные сокращения DNS, вы можете создать универсальный файл зоны:

$TTL 1h      ; default expiration time of all resource records without their own TTL value
@  IN  SOA   ns1.example.com. username.example.com. ( 
                               20140218131405 ; Serial number YYYYMMDDHHMMSS
                                        28800 ; Refresh     8 hours
                                         7200 ; Retry       2 hours
                                       604800 ; Expire      7 days
                                        86400 ; Minimum TTL 1 day )
@             IN  NS    ns1.example.com.      ; ns1.example.com is a primary nameserver
@             IN  NS    ns2.example.com.      ; ns2.example.com is a backup nameserver
@             IN  MX    10 mail.example.com.  ; mail.example.com is the mailserver
@             IN  MX    20 mail2.example.com. ; the secondary mailserver
@             IN  A     192.0.2.1             ; IPv4 address for the bare domain
              IN  AAAA  2001:db8:10::1        ; IPv6 address for the bare domain
www           IN  A     192.0.2.1             ; www.domain
              IN  AAAA  2001:db8:10::1        ; IPv6 address for www.domain - note by starting the line with a blank it becomes the continuation of the previous record and this IPv6 record applies to www
wwwtest       IN  CNAME www                   ; wwwtest is an alias for www

Это использует тот факт, что имена хостов в файлах зон, которые не заканчиваются точкой ., всегда расширяются с помощью $ORIGINкоторого в свою очередь неявно устанавливается имя зоны. И @это сокращение от $ ORIGIN.


Вместо того чтобы поддерживать отдельные файлы зон вручную, включите метод программного взаимодействия с серверами имен.

Я использовал PowerDNS, который позволяет использовать RDMS в качестве серверной части, которая очень хорошо вписывается в стек LAMP, который мы использовали в то время. Облачные сервисы, такие как Amazon Route 53, также предоставляют веб-API.

Но даже почтенный Bind также поддерживает динамическое обновление, которое является методом добавления, замены или удаления записей на главном сервере, отправляя ему специальную форму DNS-сообщений. Формат и значение этих сообщений определены в RFC 2136 .

Динамическое обновление включается включением предложения allow-updateили update-policyв оператор зоны. Для получения дополнительной информации обратитесь к Справочному руководству администратора Bind .

HBruijn
источник
2
Первая половина вашего ответа устарела, но я не уверен, что здесь применяется DDNS ... его нельзя использовать для добавления или удаления зон, что препятствует достижению большинства людей в этом сценарии. (не нужно прикасаться к named.conf для каждой добавляемой зоны). Самая близкая вещь, которую я знаю в земле BIND, - это новая rndc addzoneопция, но она все еще немного уродлива, поскольку в итоге она генерирует файл конфигурации с хешированным именем в рабочем каталоге для каждая добавленная зона.
Андрей Б
Я понимаю, что вы пытаетесь сказать, но другая интерпретация заключается в том, что сложность многих доменов заключается в поддержании и дублировании работы. Автоматизация / создание сценариев DNS - это то, что плохо документировано.
HBruijn
4

Короткий ответ

Если вы ищете установку «нулевой конфигурации» в BIND, она не существует. Настройка корневой зоны ( .) кажется хорошей идеей, но это не так, и вам нужно найти решение, которое не включает взлом DNS для удовлетворения ваших потребностей.

Длинный ответ

В прошлом году мы несколько раз получали варианты этого вопроса.

Ответ здесь довольно прост: вы не можете настроить определение одной зоны. Любое программное обеспечение, которое позволяет вам определять или иным образом синтезировать несколько SOAзаписей в этом контексте, является сломанным программным обеспечением, а выполнение сломанных вещей не является темой для ServerFault. Вам либо нужно выбрать программное обеспечение DNS, которое упростит вам это управление, либо вам нужно придумать другую стратегию, которая не предусматривает этот конкретный ярлык.

Определенно есть некоторые приемы, которые вы можете использовать, чтобы упростить жизнь ... на примере BIND довольно распространено определение нескольких зон, которые ссылаются на один и тот же файл зоны шаблона. Это совершенно законное и проверочное программное обеспечение не найдет в этом ничего плохого: см. Ответ MadHatter. Большинство людей пропускают это решение, потому что все еще «слишком много» для добавления объявления зоны при каждом приобретении нового домена, но для этого типа хостинга нет опции «настроить его один раз и уйти».

В новых версиях BIND поддерживается опция allow-new-zones, которая позволяет динамически создавать определения зон на лету с помощью новой rndc addzoneфункциональности. Возможно, вы захотите взглянуть на это и посмотреть, соответствует ли он вашим потребностям.

Кроме того, что предложенные решения, ваши варианты несколько ограничены. Иногда вы просто застреваете в работе, если программное обеспечение не работает так, как вы этого хотите.

Андрей Б
источник
-2

Когда вы говорите «домены должны быть настроены одинаково», вы имеете в виду, что они должны содержать одинаковые записи ресурсов? В таком случае, не будет ли DNAMERR для всех, кроме одного домена, более чистым решением?

Я не могу справиться с задачей @MadHatter импортировать тот же файл шаблона, оставаясь строго в рамках вашего вопроса. Я могу предложить только аналогичный подход для LDAPбэкэнда (в моем случае он используется с powerDNS): добавить associatedDomainатрибуты для соответствующих записей SOA и NS, например, так:

dn: dc=vanitydomains,ou=DNS,dc=myDIT
objectClass: dNSDomain2
objectClass: domainRelatedObject
dc: vanitydomains
associatedDomain: vanitydomain.ORG
associatedDomain: vanitydomain.NET
associatedDomain: vanitydomain.COM
associatedDomain: vanitydomain.INFO
sOARecord: NS1.example.com  sysadmin.example.com 2011100701 28800 1800 2592000 10800
dNameRecord: example.com
nSRecord: NS1.example.com
nSRecord: NS2.example.com
сема
источник
К сожалению, метод DNAME пропускает вершину зоны из-за ограничений RFC. Синтез CNAME, полученный из записей DNAME, по-прежнему подчиняется тем же ограничениям несинтетических записей CNAME. В отличие от решения MadHatter, результат очень далек от 100% идентичных RRsets.
Андрей B