Saltar al contenido
buybitcoinsmart

Glosario / Nodos y software

Semilla DNS

¿Qué es una semilla DNS?
Una semilla DNS (DNS seed) es un nombre de dominio que responde con las direcciones IP de nodos de Bitcoin alcanzables, lo que da a un nodo recién instalado un lugar donde establecer su primera conexión.

Bitcoin no tiene un servidor de directorio, así que el software nuevo tiene que encontrar la red preguntando. Bitcoin Core incluye una breve lista de nombres de host de semillas DNS escrita en el código fuente, los resuelve una vez, abre ocho conexiones salientes en el puerto 8333 y después ya no los necesita. A partir de esa negociación inicial (handshake), todo lo demás se aprende de los propios pares.

Cómo funciona

Detrás de cada nombre de host de una semilla DNS hay un rastreador, no un archivo estático.

El operador ejecuta un software que recorre la red entre pares, intenta conectarse a cada dirección de la que tiene noticia y registra cuáles respondieron recientemente. El nombre de host se resuelve entonces en registros A y AAAA tomados de esa reserva, unas dos docenas de direcciones por consulta, con un tiempo de vida corto para que las respuestas vayan rotando. Algunas semillas DNS también admiten el filtrado por bits de servicio, de modo que un nodo que necesita pares que ofrezcan filtros compactos de bloques puede consultar un subdominio que solo devuelve esos pares.

Los nombres de host están en el código fuente de Bitcoin Core, en kernel/chainparams.cpp, con una lista separada para cada red. La lista de la mainnet la mantienen personas identificadas por su nombre: seed.bitcoin.sipa.be la opera Pieter Wuille, dnsseed.bluematt.me Matt Corallo y seed.btc.petertodd.net Peter Todd. Mantener la lista corta y atribuible es deliberado, porque el operador de una semilla DNS elige a quién conoce usted.

En el primer arranque, el nodo resuelve esos nombres, llena su gestor de direcciones y abre ocho conexiones salientes de retransmisión completa más dos conexiones solo de retransmisión de bloques, que no participan en la retransmisión de transacciones y que a un observador le cuesta más detectar. A partir de ahí recopila direcciones mediante los mensajes getaddr y addr y las guarda en caché en peers.dat, así que los reinicios posteriores se saltan por completo la búsqueda. Si todas las semillas DNS son inalcanzables, Core recurre a una lista de direcciones fijas de nodos compilada en el binario, y usted puede prescindir de todo el mecanismo con dnsseed=0 más una línea seednode o addnode que apunte a un par en el que ya confía.

Dónde aparece

La única vez que la mayoría de la gente nota una semilla DNS es en las primeras líneas del registro de depuración de un nodo.

Inicie bitcoind en una máquina sin peers.dat y el registro anotará que está cargando direcciones desde semillas DNS, y luego el número de conexiones sube desde cero. Usted mismo puede hacer la misma búsqueda desde un terminal con dig, que devuelve el mismo conjunto rotatorio de direcciones IP que obtendría su nodo.

Hay un costo de privacidad que conviene conocer. La búsqueda es una consulta DNS ordinaria sin cifrar, así que su resolutor DNS y su proveedor de internet pueden ver que se está iniciando un nodo de bitcoin en su conexión, aunque la consulta no revela nada sobre su billetera ni sobre su saldo. Si eso le molesta, ejecute el nodo a través de Tor o configure dnsseed=0 y proporcione usted mismo el primer par.

La cuestión de la confianza es más acotada de lo que parece. Una semilla DNS hostil no puede falsificar un bloque ni una transacción, porque su nodo valida todo lo que recibe contra su propia copia de las reglas. Lo que sí podría hacer es devolver solo direcciones que controla y aislarlo a usted de la red honesta, y por eso Core consulta varias semillas DNS, reparte sus conexiones entre distintos rangos de red y mantiene esas conexiones solo de retransmisión de bloques como una segunda opinión discreta.

Semilla DNS frente a frase semilla

Una semilla DNS es un nombre de host público para encontrar pares; una frase semilla son las 12 o 24 palabras secretas que controlan sus monedas. Comparten una palabra y nada más. Nada de una semilla DNS es confidencial, nada de ella toca su billetera, y ningún paso legítimo de configuración le pedirá jamás que escriba las palabras de su frase semilla en una pantalla de configuración de red.

No confundir con

Preguntas frecuentes

¿Una semilla DNS es lo mismo que una frase semilla?

No, y no tienen nada en común más allá de la palabra. Una semilla DNS es un nombre de host público que su nodo consulta para encontrar otros nodos. Una frase semilla es la lista secreta de palabras que permite gastar su bitcoin, y nunca se acerca a su configuración de red.

¿Puede el operador de una semilla DNS robar mis monedas o hacerme llegar bloques falsos?

No. Una semilla DNS solo proporciona direcciones IP de pares, y su nodo valida por sí mismo cada bloque y cada transacción. El riesgo realista es el aislamiento, en el que una semilla DNS hostil devuelve solo sus propios nodos, algo que Bitcoin Core resiste consultando varias semillas DNS y diversificando sus conexiones.

Términos relacionados

Más en la sección Nodos y software

Leer esta página en inglés