Как добавить запись CAA в dnsmasq?

Я пытаюсь добавить CAA записи на свой DNS-сервер, который использует dnsmasq, но безуспешно. На вспомогательном сайте CAA мне предлагается использовать параметр «--dns-rr = sitename », но я не знаю, куда их поместить. Я попытался добавить его в /etc/dnsmasq.con f, что дало мне синтаксическую ошибку. Я также пробовал использовать его в командной строке, но он просто пытается запустить сам демон dnsmasq.

Итак, вопрос в том, как мне добавить запись CAA в dnsmasq?

1
задан 4 June 2018 в 02:06
3 ответа

Необходимо использовать ключевое слово dns-rr в файле конфигурации или --dns-rr в командной строке. dns-rr|--dns-rr - это действительно способ поместить любое произвольное содержимое DNS, кроме типа, о котором знает dnsmasq, например A, MX, PTR и др.

Обратите внимание на его использование в руководстве:

--dns-rr=,,[]

Возвращает произвольную ресурсную запись DNS. Номер является типом записи (который всегда находится в классе C_IN). Значение записи задается шестнадцатеричными данными, которые могут иметь форму 01:23:45 или 01 23 45 или 012345 или любую их смесь.

Конечно, имя - это простая часть, это, как правило, ваше доменное имя.

Итак, сначала нужно найти "номер типа RR" для записей CAA. Если вы перейдете к IANA реестру по типам DNS RRtypes и поищете CAA, то увидите, что это номер 257. Итак, 257 переходит в вышеприведенную часть RR-номер.

Что касается части hex-data, вам нужно взять содержимое, которое вы хотите опубликовать, и закодировать его в виде шестнадцатеричных данных. В этом вам могут помочь многие инструменты.

Или же, если вы просто перейдете на https://sslmate.com/caa/, после заполнения формы со всеми вашими данными, вы увидите внизу, что она делает все за вас и дает вам именно то, что вам нужно использовать в dnsmasq, как, например, этот пример:

--dns-rr=example. com,257,000569737375653B

2
ответ дан 3 December 2019 в 17:34

Добавление к ответу Патрика, в первую очередь, чтобы прояснить, как на самом деле можно создать необходимую запись конфигурации dnsmasq, не полагаясь на стороннюю службу для ее создания.

Если вы хотите чтобы указать dnsmasq обслуживать какой-то тип записи, который он изначально не поддерживает, вам необходимо предоставить ему точные данные записи, которые он должен передать по сети.
Обратите внимание, что DNS является двоичным протоколом, поэтому dnsmasq требует точной последовательности байтов, которая соответствует вашим желаемым данным записи, а не дружественному текстовому представлению, с которым вы привыкли иметь дело, но которое dnsmasq не знает, как интерпретировать в фактический двоичный формат DNS который отправляется по сети.

Для параметра конфигурации - dns-rr требуются следующие значения:

- dns-rr = , , [< шестнадцатеричные данные>]
Возвращает произвольную запись ресурса DNS. Число - это тип записи (всегда в классе C_IN). Значение записи задается шестнадцатеричными данными, который может иметь форму 01:23:45 или 01 23 45 или 012345 или любую смесь из них.

То есть, вы знаете имя (ваше доменное имя) и можете легко найти RR-номер ( числовое представление типа записи , dnsmasq снова не имеет понятия, что такое CAA ) значения, но необходимо каким-то образом произвести форматирование данных проводов и закодировать их в шестнадцатеричном формате, чтобы иметь что-то, что работает для шестнадцатеричных данных . 1239] Пример:

example.com. IN CAA 0 issue "letsencrypt.org"

name = example.com
RR-номер = 257 (это , что соответствует CAA )
шестнадцатеричные данные = двоичный формат , описанный в спецификации CAA , затем закодированный в виде шестнадцатеричной строки

Очевидно, что вы могли бы выполнить работу вручную (на основе спецификации), но более удобно сгенерировать данные проводного формата, как указано выше, вот пример сценария python (требуется пакет dnspython , обычно устанавливается с pip ):

#!/usr/bin/env python
import dns.rdata
import io
import binascii

name = "example.com"
rclass = dns.rdataclass.IN
rtype = dns.rdatatype.CAA
rdata = '0 issue "letsencrypt.org"'


rd = dns.rdata.from_text(rclass, rtype, rdata)
f = io.BytesIO()
rd.to_wire(f)
wire_data = f.getvalue()
print "dnsmasq option: --dns-rr=" + name + "," + str(rtype) + "," + binascii.hexlify(wire_data)

Он выводит:

dnsmasq option: --dns-rr=example.com,257,000569737375656c657473656e63727970742e6f7267
2
ответ дан 3 December 2019 в 17:34

DNSMASQ добавил параметр caa-record в версию 2.80, выпущенную в октябре 2018 г. (после исходного принятого ответа). Я добавляю этот ответ, так как для меня это все еще лучший результат для «dnsmasq caa» в Google. Обратите внимание, что предыдущий ответ по-прежнему работает нормально и полезен для более старых версий DNSMASQ!

Ручной ввод для caa-record

--caa-record=<name>,<flags>,<tag>,<value>
    Return a CAA DNS record, as specified in RFC6844.

Пример файла конфигурации

caa-record=example.com,0,issue,digicert.com

Справочник

2
ответ дан 10 August 2020 в 16:15

Теги

Похожие вопросы