Como adicionar um registro CAA ao dnsmasq?

1

Estou tentando adicionar CAA records ao meu servidor DNS que usa o dnsmasq, mas não obtive êxito. O site auxiliar do CAA me diz para usar a opção "--dns-rr = sitename ", mas não tenho idéia de onde colocá-las. Eu tentei adicioná-lo ao /etc/dnsmasq.con f que me deu um erro de sintaxe. Eu também tentei usá-lo na linha de comando, mas isso apenas tenta iniciar o próprio daemon dnsmasq.

Então, a pergunta é: como posso adicionar um registro CAA ao dnsmasq?

    
por nyoatype 28.05.2018 / 13:22

2 respostas

2

Você precisa usar a palavra-chave dns-rr no arquivo de configuração ou --dns-rr na linha de comando. dns-rr|--dns-rr é de fato a maneira de colocar qualquer conteúdo DNS arbitrário além do tipo que o dnsmasq conhece como A , MX , PTR , etc.

Observe seu uso no manual:

--dns-rr=<name>,<RR-number>,[<hex data>]

Return an arbitrary DNS Resource Record. The number is the type of the record (which is always in the C_IN class). The value of the record is given by the hex data, which may be of the form 01:23:45 or 01 23 45 or 012345 or any mixture of these.

Claro que o name é a parte fácil, normalmente será o seu nome de domínio.

Primeiramente, você precisa encontrar o "número do tipo de RR" para os registros da CAA. Se você acessar o registro da IANA sobre os tipos de RR do DNS e pesquisar para a CAA, você verá que é o número 257 . Então, o 257 vai para a parte RR-number acima.

Quanto à parte hex-data , você precisa pegar o conteúdo que deseja publicar e codificá-lo como dados hexadecimais. Muitas ferramentas podem ajudá-lo nisso.

Alternativamente, se você simplesmente acessar o link , depois de preencher o formulário com todos os seus detalhes, verá no final que ele faz tudo por você e dá exatamente o que você precisa usar no dnsmasq como este exemplo:

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

    
por 04.06.2018 / 01:21
2

Acrescentando a resposta de Patrick, principalmente para esclarecer como alguém realmente produziria a entrada de configuração necessária do dnsmasq sem depender de um serviço de terceiros para criá-la para você.

Se você quiser dizer ao dnsmasq para servir algum tipo de registro que ele não suporta nativamente, você precisa dar a ele os dados exatos que ele deve colocar no fio.
Observe que o DNS é um protocolo binário, portanto, o dnsmasq precisa da seqüência de bytes exata que corresponde aos dados de registro desejados, não da representação de texto amigável com a qual você está acostumado, mas da qual dnsmasq não tem idéia de como interpretar no formato real de DNS binário que é enviado no fio.

A opção de configuração --dns-rr precisa dos seguintes valores:

--dns-rr=<name>,<RR-number>,[<hex data>]
Return an arbitrary DNS Resource Record. The number is the type of the record (which is always in the C_IN class). The value of the record is given by the hex data, which may be of the form 01:23:45 or 01 23 45 or 012345 or any mixture of these.

Ou seja, você conhece o nome (seu nome de domínio) e pode, de forma trivial, procurar o RR-number (o representação numérica do tipo de registro , novamente dnsmasq não tem idéia do que CAA é) valores, mas precisa de alguma forma produza a formatação wire-data e codifique em hexadecimal para ter algo que funcione para dados hexadecimais .

Exemplo:

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

nome = example.com em RR-number = 257 (isto é o que corresponde a CAA )
dados hexadecimais = o formato binário descrito na especificação CAA e codificado como uma string hexadecimal

Você poderia, obviamente, fazer o trabalho manualmente (baseado na especificação), mas para gerar mais convenientemente os dados em formato wire, conforme acima, aqui está um exemplo de script python (requer o dnspython , normalmente instalado com 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)

Produz:

dnsmasq option: --dns-rr=example.com,257,000569737375656c657473656e63727970742e6f7267
    
por 09.08.2018 / 02:20