Guto Carvalho # 2022-21-08 @ BSB
Guto Carvalho # 2022-21-08 @ BSB

DIG Crash Course

by

DIG Crash Course

O DIG é uma ferramenta para interrogar servidores de DNS.

Com o DIG nós conseguiremos fazer lookup de DNS com objetivos simples como troubleshooting por exemplo.

A ideia aqui é fazer um crash course dessa ferramenta.

Um Crash Course é um tipo de “curso rápido” sobre um determinado assunto, indo direto ao ponto de forma mais objetiva possível.

Quando devo usar o DIG?

Sempre que você precisar verificar alguma coisa em nível de DNS, seguem alguns cenários que o DIG pode te ajudar :

  • para testar se a resolução de DNS está funcionando
  • para comparar a resolução de DNS entre NS diferentes
  • quando precisamos resolver um problema de DNS
  • para descobrir o IP de um registro de DNS
  • para descobrir o MX de um domínio
  • para descobrir o NS de um domínio
  • para descobrir o SOA de um domínio
  • para descobrir o PTR (reverso) de um endereço IP
  • para verificar se uma alteração de registro já fez efeito

Essas são algumas das situações mais básicas em que o DIG pode ser útil.

Para quem foi feito esse post?

Aqui o foco está nas pessoas atuando nas posições abaixo:

  • Sysadmin;
  • Cloud Native Engineer;
  • Cloud Engineer;
  • DevOps Engineer;
  • Plataform Engineer;
  • GitOps Engineer.

Momento Merchan :P

Me siga no twitter @gutocarvalho e acompanhe meus posts sobre Cloud Native e CI/CD.

Aproveite e siga a CD Foundation e Cloud Native Foundation no twitter.

Colaboradores

Pessoas que colaboraram com o texto.

  • Julia Lamenza (@jlamenza)
  • João (@P0ssuidao)
  • Rafael Gomex (@gomex)
  • Rafael Silva (@rafaotetra)

Dig Crash Course

Aprendendo o básico para uso no dia a dia

fazendo uma pesquisa simples com todos os detalhes

$ dig gutocarvalho.net

fazendo uma pesquisa simples retornando só o IP

$ dig +short gutocarvalho.net

pesquisando o SOA do domínio

$ dig SOA gutocarvalho.net

pesquisando o NS do domínio

$ dig NS gutocarvalho.net 

pesquisando o MX de correio

$ dig MX gutocarvalho.nmet

pesquisando o TTL do domínio

$ dig TTL gutocarvalho.net

pesquisando o PTR (reverso) de um IP

$ dig -x 8.8.8.8

pesquisando os registros TXT de um domínio

$ dig txt gutocarvalho.net

Explorando um pouco mais o DIG

pesquisando um registro em um NS específico

$ dig @1.1.1.1 lb.gutocarvalho

pesquisando as informações DNSSEC de um domínio

$ dig +dnssec gutocarvalho.net

pesquisando as chaves DNSSEC de um domínio

$ dig DNSKEY -qr gutocarvalho.net

pesquisando uma entrada de DNS com trace

$ dig +trace lb.gutocarvalho.net

verificando o tempo de resposta do SOA de um domínio

$ dig +nssearch gutocarvalho.net

Parâmetros interessantes do DIG

+short

$ dig gutocarvalho.net +short

185.199.110.153
185.199.111.153
185.199.108.153
185.199.109.153

O short só retorna os IPs para qual o registro aponta.

+tcp

$ dig +tcp gutocarvalho.net

Usado quando desejamos fazer a pesquisa via TCP, o padrão é UDP.

+time

$ dig +time=5 gutocarvalho.net

Define o timeout da pesquisa para 5 segundos.

+multiline

$ dig gutocarvalho.net A +dnssec +multiline

Vai pesquisar entradas A com DNSSEC associado em multi-linhas.

Filtrando saída do DIG com parâmetros especiais

Primeiro vamos fazer uma pesquisa comum para ter uma saída completa

$ dig gutocarvalho.net

; <<>> DiG 9.10.6 <<>> gutocarvalho.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40038
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;gutocarvalho.net.		IN	A

;; ANSWER SECTION:
gutocarvalho.net.	300	IN	A	185.199.108.153
gutocarvalho.net.	300	IN	A	185.199.109.153
gutocarvalho.net.	300	IN	A	185.199.110.153
gutocarvalho.net.	300	IN	A	185.199.111.153

;; Query time: 38 msec
;; SERVER: 1.1.1.1#53(1.1.1.1)
;; WHEN: Sat Mar 12 18:53:55 -03 2022
;; MSG SIZE  rcvd: 109

Agora vamos testando cada parâmetro

+noall

$ dig gutocarvalho.net +noall

; <<>> DiG 9.10.6 <<>> gutocarvalho.net +noall
;; global options: +cmd

Observe que o noall omite toda a saída do comando, ele normalmente é usado com outros comandos de forma composta, um exemplo é o answer.

+answer +noall

$ dig gutocarvalho.net +noall +answer

; <<>> DiG 9.10.6 <<>> gutocarvalho.net +noall +answer
;; global options: +cmd
gutocarvalho.net.	300	IN	A	185.199.111.153
gutocarvalho.net.	300	IN	A	185.199.108.153
gutocarvalho.net.	300	IN	A	185.199.109.153
gutocarvalho.net.	300	IN	A	185.199.110.153

O answer é útil junto com o noall, ele vai nos trazer apenas a resposta, sem comments, question, authority, stats e quaisquer outras informações que estiverem disponíveis na resposta.

+nocmd

 dig +nocmd a lb.gutocarvalho.net +noall +answer
lb.gutocarvalho.net.	42	IN	A	200.150.204.87

Quando aplicado retira a versao do bind e comando

; <<>> DiG 9.10.6 <<>> a lb.gutocarvalho.net +noall +answer

Para funcionar o parâmetro tem que vir logo após o comando dig

+nocomments

$ dig gutocarvalho.net +nocomments

; <<>> DiG 9.10.6 <<>> gutocarvalho.net +nocomments
;; global options: +cmd
;gutocarvalho.net.		IN	A
gutocarvalho.net.	297	IN	A	185.199.110.153
gutocarvalho.net.	297	IN	A	185.199.111.153
gutocarvalho.net.	297	IN	A	185.199.108.153
gutocarvalho.net.	297	IN	A	185.199.109.153
;; Query time: 29 msec
;; SERVER: 1.1.1.1#53(1.1.1.1)
;; WHEN: Sat Mar 12 18:58:57 -03 2022
;; MSG SIZE  rcvd: 109

O nocomments retira toda a parte inicial da resposta

; <<>> DiG 9.10.6 <<>> gutocarvalho.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40925
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;gutocarvalho.net.		IN	A

+noquestion

$ dig gutocarvalho.net +noquestion

; <<>> DiG 9.10.6 <<>> gutocarvalho.net +noquestion
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10078
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; ANSWER SECTION:
gutocarvalho.net.	300	IN	A	185.199.108.153
gutocarvalho.net.	300	IN	A	185.199.109.153
gutocarvalho.net.	300	IN	A	185.199.110.153
gutocarvalho.net.	300	IN	A	185.199.111.153

;; Query time: 42 msec
;; SERVER: 1.1.1.1#53(1.1.1.1)
;; WHEN: Sat Mar 12 19:01:58 -03 2022
;; MSG SIZE  rcvd: 109

O noquestion retira essa parte da resposta

;; QUESTION SECTION:
;gutocarvalho.net.		IN	A

+nostats

$ dig gutocarvalho.net +nostats

; <<>> DiG 9.10.6 <<>> gutocarvalho.net +nostats
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63625
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;gutocarvalho.net.		IN	A

;; ANSWER SECTION:
gutocarvalho.net.	300	IN	A	185.199.109.153
gutocarvalho.net.	300	IN	A	185.199.110.153
gutocarvalho.net.	300	IN	A	185.199.111.153
gutocarvalho.net.	300	IN	A	185.199.108.153

Esse parâmetro suprime as estatísticas da pesquisa.

;; Query time: 38 msec
;; SERVER: 1.1.1.1#53(1.1.1.1)
;; WHEN: Sat Mar 12 19:13:28 -03 2022
;; MSG SIZE  rcvd: 109

+noauthority

;; AUTHORITY SECTION:
gutocarvalho.net.	3144	IN	NS	monroe.ns.cloudflare.com.
gutocarvalho.net.	3144	IN	NS	houston.ns.cloudflare.com.

É útil para remover essa parte da resposta, caso retorne o authority na pesquisa.

+noadditional

;; ADDITIONAL SECTION:
lia.ns.cloudflare.com.	84354	IN	A	  173.245.58.185
lia.ns.cloudflare.com.	170762	IN	AAAA  2400:cb00:2049:1::adf5:3ab9
mark.ns.cloudflare.com.	170734	IN	A	  173.245.59.130
mark.ns.cloudflare.com.	170734	IN	AAAA  2400:cb00:2049:1::adf5:3b82

A seção aditional pode trazer informações como o IP dos DNS Server autoritativos da seção authority, esse parâmetro suprime esse trecho.

+norec

$ dig +norec @monroe.ns.cloudflare.com. gutocarvalho.net a

Essa opção desabilita a pesquisa recursiva, neste caso a CloudFlare e responsável por responder por meu domínio, sendo que o servidor monroe é um dos meus servidores DNS, ele já sabe a resposta.

Pesquisas parametrizadas comuns

pesquisa comum e rápida que retorna apenas o endereço IP

$ dig +short lb.gutocarvalho.net

pesquisando por registro A com resposta simples

$ dig +nocmd lb.gutocarvalho.net a +noall +answer

pesquisando por CNAME com resposta simples

$ dig +nocmd mail.google.com cname +noall +answer

pesquisando por registro TXT com resposta simples

$ dig +nocmd google.com txt +noall +answer

fazendo pesquisa em múltiplos domínios

$ dig ubuntu.com mx +noall +answer redhat.com ns +noall +answer

Pesquisa usando um arquivo (bulk)

Imagine que você tem o arquivo dominios.txt com o conteúdo abaixo

gutocarvalho.net
nativetrail.io
viahorizonte.life

vamos rodar agora uma pesquisa contra o arquivo

$ dig -f dominios.txt +short

saída

185.199.110.153
185.199.111.153
185.199.108.153
185.199.109.153
185.199.111.153
185.199.108.153
185.199.109.153
185.199.110.153
185.199.110.153
185.199.111.153
185.199.108.153
185.199.109.153

:)

Quer saber mais?

Para saber mais veja o help do comando

$ dig --help

Para ir além acesse a manpage

$ man dig

Configurando seu .digrc

O dig tem um arquivo de configuração, o famoso .digrc.

$ echo "+nostats +nocomments +nocmd +noquestion +recurse" > ~/.digrc

Agora você digita menos e tem o resultado desejado.

Um pouco de teoria de DNS para quem gosta :)

Entendendo o funcionamento do DIG

Imagine que mandamos essa query pelo dig

$ dig gutocarvalho.net

Essa query é estrutura da seguinte forma pelo DIG para o servidor de DNS autoritativo


           +-------------------------------------+
Header     | OPCODE=SQUERY                       |
           +-------------------------------------+
Question   | QNAME=GUTO.NET., QCLASS=IN, QTYPE=A |
           +-------------------------------------+
Answer     | <empty>                             |
           +-------------------------------------+
Authority  | <empty>                             |
           +-------------------------------------+
Additional | <empty>                             |
           +-------------------------------------+
           

A resposta do servidor que responde pelo domínio foi essa


; <<>> DiG 9.10.6 <<>> gutocarvalho.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48153
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;gutocarvalho.net.		IN	A

;; ANSWER SECTION:
gutocarvalho.net.	300	IN	A	185.199.110.153
gutocarvalho.net.	300	IN	A	185.199.111.153
gutocarvalho.net.	300	IN	A	185.199.108.153
gutocarvalho.net.	300	IN	A	185.199.109.153

;; Query time: 146 msec
;; SERVER: 1.1.1.1#53(1.1.1.1)
;; WHEN: Sun Mar 13 10:37:26 -03 2022
;; MSG SIZE  rcvd: 109

Podemos estruturar dessa forma para entender melhor

           +--------------------------------------------+
Header     | OPCODE=SQUERY, RESPONSE, AA                |
           +--------------------------------------------+
Question   | QNAME=GUTO.NET., QCLASS=IN, QTYPE=A        |
           +--------------------------------------------+
Answer     | GUTO.NET. 300 IN A 185.199.108.153         | 
           |                   300 IN A 185.199.109.153 |
           |                   300 IN A 185.199.110.153 |
           |                   300 IN A 185.199.111.153 |
           +--------------------------------------------+
Authority  | <empty>                                    |
           +--------------------------------------------+
Additional | <empty>                                    |
           +--------------------------------------------+

Entendendo as repostas entregues pelo DIG

Uma resposta de consulta do DIG vem composta por informações separadas nas seções Header, Question, Answer, Authority e Additional.

+------------+
| Header     | Cabeçalho com informações diversas 
+------------+
| Question   | A questão enviada para o nameserver
+------------+
| Answer     | Registros que vão responder a query
+------------+
| Authority  | Registros da autoridade do domínio
+------------+
| Additional | Registros com informações adicionais
+------------+

Vamos entender cada uma delas.

- Header section, um cabeçalho fixo que contém ID, flgas e informações das outras seções (contadores)

- Question section, contém a query que foi passada (QNAME), o tipo (QTYPE) e a classe (QCLLASS). Na resposta receberemos novamente a query

- Answer section, pode conter a lista de reguistros, se houver resposta cada um irá trazer QNAME, QTYPE, QCLASS, TTL e informaçÕes de RDATA

- Authority section, pode conter a lista de registros que apontam para os servidores autoritativos

- Additional section, pode conter outros registros e mais informações sobre os servidores autoritativos

HEADER SECTION

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63625
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

Informações que encontramos do HEADER

+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|                      ID                       |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|QR|   Opcode  |AA|TC|RD|RA| Z|AD|CD|   RCODE   |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|                    QDCOUNT                    |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|                    ANCOUNT                    |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|                    NSCOUNT                    |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|                    ARCOUNT                    |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

Entendendo as informações do HEADER

QR pode conter

- 0, QUERY 
- 1, RESPONSE

OPCODE pode conter os seguintes valores:

- 0	Query	[RFC1035]
- 2	Status	[RFC1035]
- 3	Unassigned	
- 4	Notify	[RFC1996]
- 5	Update	[RFC2136]
- 6	DNS Stateful Operations (DSO)	[RFC8490]
- 7-15	Unassigned

No Header vamos encontrar as seguintes FLAGs:

- AA: Authoritative Answer (set by the server)
- TC: message is TrunCated (set by the server)
- RD: Recursion Desired (set by the client and copied to the response)
- RA: Recursion Available (set by the server)
- AD: Authenticated Data, DNSSEC flag (set by the server)
- CD: Checking Disabled, DNSSEC flag (set by the client, copied to the response)

 No Header vamos encontrar o RCODE/Status (4 bits) que pode conter:

- 0	NoError	No Error	[RFC1035]
- 1	FormErr	Format Error	[RFC1035]
- 2	ServFail	Server Failure	[RFC1035]
- 3	NXDomain	Non-Existent Domain	[RFC1035]
- 4	NotImp	Not Implemented	[RFC1035]
- 5	Refused	Query Refused	[RFC1035]
- 6	YXDomain	Name Exists when it should not	[RFC2136][RFC6672]
- 7	YXRRSet	RR Set Exists when it should not	[RFC2136]
- 8	NXRRSet	RR Set that should exist does not	[RFC2136]
- 9	NotAuth	Server Not Authoritative for zone	[RFC2136]
- 9	NotAuth	Not Authorized	[RFC8945]
- 10	NotZone	Name not contained in zone	[RFC2136]
- 11	DSOTYPENI	DSO-TYPE Not Implemented	[RFC8490]
- 12-15	Unassigned		
- 16	BADVERS	Bad OPT Version	[RFC6891]
- 16	BADSIG	TSIG Signature Failure	[RFC8945]
- 17	BADKEY	Key not recognized	[RFC8945]
- 18	BADTIME	Signature out of time window	[RFC8945]
- 19	BADMODE	Bad TKEY Mode	[RFC2930]
- 20	BADNAME	Duplicate key name	[RFC2930]
- 21	BADALG	Algorithm not supported	[RFC2930]
- 22	BADTRUNC	Bad Truncation	[RFC8945]
- 23	BADCOOKIE	Bad/missing Server Cookie	[RFC7873]
- 24-3840	Unassigned		
- 3841-4095	Reserved for Private Use		[RFC6895]
- 4096-65534	Unassigned		
- 65535	Reserved, can be allocated by Standards Action		[RFC6895]

No Header também temos contadores, são eles:

- QDCOUNT, número de respostas da seção queries
- ANCOUNT, número de respostas da seção answers
- NSCOUNT, número de respostas da seção autoritativos
- ARCOUNT, número de respostas da seção adicional

Os contadores vão retornar o número de registros encontrados na pesquisa

Entendendo um pouco mais das Flags do HEADER

Você verá que na resposta teremos geralmente 4 flags setadas, sao elas:

- qr, rd, ra, ad.

Vamos entendê-las agora

- QR, é uma flag diferente que pode retornar 0 ou 1, 1 significa query

- RD significa "recursive desired", sinaliza que desejamos usar pesquisa recursiva, isso é definido pelo cliente.

- RA significa "recursive available", sinaliza que pesquisa recursiva está disponível, isso é definiado pelo servidor.

- AD significa "authenticated data", sinaliza que os dados de resposta e autoridade foram validados e autenticados pelas políticas de segurança daquele servidor de dns. É setado apenas quando todos os dados da resposta foram devidamente criptografados e verificados. Esse é um recurso do DNSSEC.

Existem ainda as seguintes flags opcionais

- AA, significa servidor autoritativo

- TC, significa mensagem truncada

E no caso de DNSSEC pode conter ainda

- CD, significa "checking disabled", utilizado pelo DNSSEC.

- DO, que significa que a resposta do DNSSEC está ok

Entendendo os status (RCODE) mais comuns

- NOERROR (0), a pesquisa voltou sem erros
- SERVFAIL (2), houve uma falha na resposta do servidor
- NXDOMAN (3), o domínio não foi encontrado ou não existe
- REFUSED (5), o pedido de query foi recusado

QUESTION SECTION

Aqui encontraremos dados de nossa query.

;; QUESTION SECTION:
;gutocarvalho.net.		IN	A

Uma query é estruturada da seguinte forma:

    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                                               |
    /                     QNAME                     /
    /                                               /
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                     QTYPE                     |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                     QCLASS                    |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

Vamos entender QNAME, QTYPE e QCLASS.


- QNAME possuirá o domínio que você setou na query
- QTYPE possuirá o tipo de RR que você utilizou na pesquisa
- QCLASS possuirá o tipo de classe de DNS, geralmente IN (internet)

ANSWER SECTION

;; ANSWER SECTION:
gutocarvalho.net.	300	IN	A	185.199.108.153
gutocarvalho.net.	300	IN	A	185.199.109.153
gutocarvalho.net.	300	IN	A	185.199.110.153
gutocarvalho.net.	300	IN	A	185.199.111.153

Retorna os registros e informações destes, se houver.

AUTHORITY SECTION

;; AUTHORITY SECTION:
gutocarvalho.net.	3533	IN	NS	monroe.ns.cloudflare.com.
gutocarvalho.net.	3533	IN	NS	houston.ns.cloudflare.com.

Retorna dados de autoridade acerca do domínio.

ADITIONAL SECTION

;; ADDITIONAL SECTION:
monroe.ns.cloudflare.com. 107	IN	A	172.64.34.153
houston.ns.cloudflare.com. 900	IN	A	172.64.35.52

Retorna dados adicionais da query.

QUERY SECTION

;; Query time: 36 msec
;; SERVER: 1.1.1.1#53(1.1.1.1)
;; WHEN: Sat Mar 12 19:49:29 -03 2022
;; MSG SIZE  rcvd: 109

Retorna métricas da query, auto explicativo.

Glossário

termos comuns

  • Zona, Uma zona contém as informações e registros de um domínio
  • TTL, significa Time to live, é o tempo de vida de um registro ou zona
  • DNSSEC, é um sistema de proteção que aumenta a segurança do DNS

tipos de registros comuns e seus significados

  • SOA, Start of Authority ou início de autoridade
  • NS, significa nameserver, esse registro aponta para um servidor de DNS
  • A, registro tipo endereço ipv4, é associado a um endereço IP
  • AAAA, registro tipo endereço ipv6, é associado a um endereço IP
  • PTR, registro tipo reverso, ele resolve um IP para um nome
  • CNAME, nome canônico, ele resolve um nome para outro nome.
  • MX, significa mail exchange, aponta para o servidor de correio
  • TXT, registros de texto, podem ter qualquer tipo de informação

tipos de registro para DNSSEC

  • DNSKEY: keeps the public key to verify RRSIGs
  • DS: keeps the digest of a DNSKEY RR
  • RRSIG: keeps the digital signature of an RRset
  • NSEC: used for authenticated denial existence, meaning to show an RRset is not part of a signed zone

tipos de pesquisa de DNS

  • Iterative approach: where the resolver/client repeatedly queries different servers until it finds the answer
  • Recursive approach: where the resolver/client sends the query only to a single server, but the server repeatedly queries different servers until it finds and returns the answer to the resolver

Quais outras ferramentas uso para troubleshooting de DNS?

ferramentas clássicas

  • nslookup
  • host
  • whois

ferramentas extras para testes do lado do cliente

ferramentas extras para testes em seu servidor de dns

Quais os comandos que eu mais uso no dia-a-dia?

$ dig +short lb.gutocarvalho.net
$ dig -x 200.150.204.87
$ dig mx gutocarvalho.net
$ dig ns gutocarvalho.net

Amarrando as pontas

Esse post é uma tentativa de dar um norte ou um caminho para fazer um bom troubleshooting de DNS.

Volte aqui sempre que precisar :)

Aquele abraço!

Mando aquele abraço para o professor MESTRE Ulysses Almeida (@ulyssesalmeida) que me ensinou a usar o DIG lá no início do século.

Mando aquele abraço pro @gomex e @badtux que via exemplo me fazem contribuir mais e mais e mais :)

Mando aquele abraço para todos que leram, comentaram, revisaram e contribuíram de alguma forma com esse post!

DNS RFC’s

References


Este post é do tipo #Mindnodes, entenda aqui.

Se gostou manda um alô no twitter @gutocarvalho ou deixa um comentário bacana :)

[s]
Guto