Глоссарий / Узлы и ПО
DNS-сид
- Что такое DNS-сид?
- DNS-сид представляет собой доменное имя, которое в ответ сообщает IP-адреса доступных узлов биткоина, давая только что установленному узлу точку для первого подключения.
У биткоина нет сервера каталога, поэтому новому программному обеспечению приходится искать сеть, обращаясь с запросами. Bitcoin Core поставляется с коротким жестко заданным списком хостов-сидов, разрешает их один раз, открывает восемь исходящих соединений на порт 8333 и после этого больше их не использует. Все, что происходит после первого рукопожатия, узнается от самих пиров.
Как это работает
За каждым хостом-сидом стоит не статический файл, а сканер.
Оператор запускает программное обеспечение, которое обходит одноранговую сеть, пытается подключиться к каждому адресу, о котором узнает, и записывает, какие из них недавно отвечали. Затем имя хоста разрешается в записи A и AAAA, взятые из этого пула, по паре десятков адресов на запрос, с коротким временем жизни, чтобы ответы постоянно обновлялись. Некоторые сиды также поддерживают фильтрацию по битам сервисов, поэтому узел, которому нужны пиры с поддержкой компактных фильтров блоков, может запросить поддомен, возвращающий только их.
Имена хостов находятся в исходном коде Bitcoin Core, в kernel/chainparams.cpp, с отдельным списком для каждой сети. Список для основной сети поддерживают известные по именам люди: за seed.bitcoin.sipa.be стоит Pieter Wuille, за dnsseed.bluematt.me Matt Corallo, за seed.btc.petertodd.net Peter Todd. Список намеренно держат коротким и с указанием ответственных, потому что оператор сида выбирает, с кем вы встретитесь.
При первом запуске узел разрешает эти имена, заполняет свой менеджер адресов и открывает восемь исходящих соединений с полной ретрансляцией плюс два соединения только для ретрансляции блоков, которые не участвуют в распространении транзакций и которые наблюдателю труднее заметить. С этого момента он собирает адреса через сообщения getaddr и addr и кэширует их в peers.dat, поэтому при последующих перезапусках поиск полностью пропускается. Если все сиды недоступны, Core переходит к списку фиксированных адресов узлов, скомпилированному в бинарный файл, а весь механизм можно обойти с помощью dnsseed=0 и записи seednode или addnode, указывающей на пира, которому вы уже доверяете.
Где это видно
Заметить DNS-сид большинство людей может только в первых строках отладочного журнала узла.
Запустите bitcoind на машине без peers.dat, и журнал зафиксирует, что адреса загружаются из DNS-сидов, после чего число соединений начинает расти с нуля. Тот же запрос можно сделать самостоятельно из терминала с помощью dig, который вернет тот же обновляющийся набор IP-адресов, что получил бы ваш узел.
Есть цена для приватности, о которой стоит знать. Запрос представляет собой обычный незашифрованный DNS-запрос, поэтому ваш резолвер и ваш интернет-провайдер могут видеть, что на вашем подключении запускается узел биткоина, хотя сам запрос ничего не раскрывает о вашем кошельке или балансе. Если это вас беспокоит, запускайте узел через Tor или задайте dnsseed=0 и укажите собственного первого пира.
Вопрос доверия уже, чем кажется. Враждебный сид не может подделать блок или транзакцию, потому что ваш узел проверяет все полученное по собственной копии правил. Что он мог бы сделать, так это вернуть только адреса, которые контролирует, изолировав вас от честной сети; поэтому Core запрашивает несколько сидов, распределяет соединения по разным диапазонам сети и сохраняет те соединения только для ретрансляции блоков как тихое второе мнение.
DNS-сид vs сид-фраза
DNS-сид представляет собой публичное имя хоста для поиска пиров; сид-фраза представляет собой 12 или 24 секретных слова, которые управляют вашими биткоинами. У них общее только слово. В DNS-сиде нет ничего конфиденциального, он никак не касается вашего кошелька, и ни один законный шаг настройки никогда не попросит вас ввести слова восстановления на экране конфигурации сети.