Мы используем двух DNS-провайдеров для резервирования. Я полагаю, что после DDOS-атаки DynDNS в 2016 году мы не одиноки в этой практике.
Я пытаюсь использовать certbot Let's Encrypt с вызовом DNS. Наличие двух DNS-провайдеров кажется проблемой. Нужно ли обновлять обоих DNS-провайдеров идентичными записями TXT в рамках процесса проверки?
Настоящий вопрос в том, как центр сертификации (CA) Let's Encrypt ACME проверяет записи DNS TXT? Он просто запрашивает общедоступный DNS, как это сделал бы любой клиент, или он запрашивает конкретного поставщика DNS, который сопоставляется с плагином certbot, который я использую? Я подозреваю первое.
Я попытался создать сертификат, используя только один из плагинов. Записи TXT были созданы, но проверка не прошла. Я ожидаю, что мне нужно будет обновить обоих поставщиков DNS (или выяснить, как связать этих двух поставщиков, чтобы они синхронизировали изменения).
Документация не указывает на то, что возможно использование нескольких плагинов одного типа, хотя я еще не пробовал. Один из моих провайдеров требует, чтобы я обновился, чтобы получить доступ к их API.
Если невозможно связать несколько плагинов аутентификации, то я считаю, что мой единственный вариант для автоматического обновления - это использование пре- и пост-хуков с настраиваемым скриптом для изменения обоих DNS-провайдеров.
Буду признателен за подтверждение этого, прежде чем я возьму на себя необходимые работы и расходы (или решу управлять процессом продления вручную).
РЕДАКТИРОВАТЬ: Я знаю, что StackExchange написал и опубликовал собственный модуль обновления DNS с открытым исходным кодом, dnscontrol, который можно использовать в скриптах до и после перехвата. Однако один из наших провайдеров не поддерживается.
Существует множество сторонних клиентов ACME (LetsEncrypt), которые предоставляют больше функций, чем certbot по умолчанию. Они ведут список на своем сайте здесь: Клиентские реализации ACME
Многие из них имеют какую-то архитектуру плагинов DNS, а некоторые позволяют указывать разные плагины для разных имен в сертификате. Но ни один из известных мне не позволяет комбинировать плагины для каждой зоны (так, чтобы более одного плагина обслуживали TXT-запись одной зоны).
Однако, если вы уже думаете о написании pre / post хуков, чтобы это сделать. Я бы предложил использовать что-то вроде acme.sh. Он имеет множество предварительно написанных DNS-плагинов. Вероятно, вы могли бы довольно легко объединить два или более из них в один объединенный плагин, который эффективно достигнет вашей цели.
Letsencrypt проверяет ваши записи TXT, просто запрашивая случайный преобразователь, без какого-либо контроля над тем, какой из ваших серверов имен будет использоваться.
selectedServer: = dnsClient.servers [rand.Intn (len (dnsClient.servers))]
Я рекомендую вам делегировать _acme-challenge.example.com.
zone только к одному поставщику DNS, к которому у вас есть автоматический доступ. У вас никогда не будет DoS-ситуации у любого из ваших DNS-провайдеров дольше, чем требуется, чтобы это изменить, или дольше, чем действительны сертификаты letsencrypt. Таким образом, можно пропустить избыточность только для ACME, чтобы вы могли использовать всю автоматизацию, как до добавления дополнительных серверов имен.
редактировать на основе комментариев: эта стратегия не позволит продолжить работу certbot, поскольку соответствующие плагины certbot некорректно обрабатывают псевдонимы или делегированные домены проверки. Он должен искать, чтобы изменить зону валидационной записи, но пытается изменить зону валидированного домена, не обращая внимания на то, что это очень валидно и что они отличаются.
Другие клиенты acme могут потребовать явного указания местоположения записи проверки, как в случае с acme.sh