Назад | Перейти на главную страницу

динамически обновляемые поддомены зоны

Я управляю bind9 (9.9.5) DNS-сервер (на Debian / jessie). Я настроил одну зону для разрешения динамических обновлений и хотел бы добавить TXT записи для определенных хостов в этой зоне.

Вот пример настройки (named.conf)

zone "example.com" {
    type master;
    notify yes;
    allow-update { key secret-key; };
    file "/etc/bind/db.example.com";
};

И сопутствующий файл db.example.com:

$ORIGIN .
$TTL 604800 ; 1 week
example.com     IN SOA  dns.example.com root.example.com. (
                1          ; serial
                10800      ; refresh (3 hours)
                3600       ; retry (1 hour)
                604800     ; expire (1 week)
                86400      ; minimum (1 day)
                )
            NS  dns.example.org.
            NS  dns1.example.org.
            NS  dns2.example.org.
$ORIGIN example.com.
*           MX  10 mail.example.com.
mail        A   127.0.0.1
http        A   127.0.1.1

Используя мой Секретный ключ, Я могу динамически добавлять новую запись прямо в эту зону (например, создать текст запись для _acme-challenge.example.com).

Однако я действительно хочу добавить записи поддоменов для хостов в зоне. Например. в зоне example.com, есть А запись mail.example.com, и я хотел бы динамически добавить текст запись для _acme-challenge.mail.example.com.

К сожалению, моему серверу имен это не нравится, и он отказывается работать с

secret-key: обновление зоны 'example.com/IN': обновление не удалось: не авторизовано для зоны обновления (NOTAUTH)

я жестяная банка добавьте эту запись вручную в db-файл, и она отлично работает.

 _acme-challenge.mail TXT "secretstring"

Однако я бы хотел автоматизировать это (учитывая, что это часть развертывания сертификатов letsencrypt через DNS-01 задача), поэтому ручная установка записей не вариант.

Есть идеи, что происходит не так и как я могу автоматически обновлять свои TXT-записи?

обновление: сценарий

фактическое обновление реализовано с помощью python-dnspython и выглядит так:

update = dns.update.Update("mail.example.com", ...)
update.add("_acme-challenge", 500, "TXT", token)
response = dns.query.udp(update, name_server_ip)

Оказывается, проблема действительно заключалась в том, как сценарий dnspython запрашивал обновление зоны.

Вместо запроса на добавление записи _acme-challenge.mail к example.com зона, вместо этого (и ошибочно) запросит запись _acme-challenge быть добавленным к mail.example.com зона.

Поскольку на сервере имен не было mail.example.com. зона, он откажется обрабатывать запрос.

Решением проблемы было итеративное добавление к родительским зонам до достижения успеха (или достижения TLD):

  • попробуйте добавить _acme-challenge в зону mail.example.com.
  • попробуйте добавить _acme-challenge.mail в зону example.com.
  • попробуйте добавить _acme-challenge.mail.example в зону com.
  • потерпеть поражение.

Я не думаю, что что-то «не так».

Мы написали сценарий, который думает, что наши тысячи доменов редактируют файл DNS вручную, а затем перезапускают службу DNS.