Skip to content
This repository has been archived by the owner on Jul 9, 2022. It is now read-only.

Настройка публичной ноды twister seeder [draft]

ofbi edited this page Jan 1, 2022 · 16 revisions

Публичная нода twister-seeder - служебный сервис для поддержки сетевой инфраструктуры twister-core, включающий в себя поисковый сервер доступных нод twisterd и DNS сервер, служащий для их ретрансляции новым узлам, которые впервые подключаются к сети twister.

Без активных узлов DNS seeder, новые пользователи twister-core не смогут получить инициальный список IP адресов для загрузки blockchain, кроме как указав известный IP:port, или рабтающий адрес DNS вручную.

Оригинальное описание из официального блога twister.net.co (архив)

DNS Seeders When twisterd is executed for the first time, it must locate some initial nodes to join the peer-to-peer network. twister, like Bitcoin, does that by trying a couple of special DNS servers (seeders) which provide an updated list of known peers. Currently twisterd is configured to try 4 different DNS Seeders but 3 of them depend on twister.net.co domain by Godaddy’s infrastructure. Some countries are known to have attacked this domain in order to prevent twister’s initial bootstrapping.

How one may help? If you have a 24×7 linux machine and you are able to add an special NS record to your domain, please consider running twister-seeder. Then let me know (@mfreitas) and I will add your domain to the code base.

В данной статье будет рассмотрен процесс организации публичной ноды twister-seeder, ее запуск и тестирование на примере Ubuntu 20.10.

Структура адресации

Для организации публичной ноды twister-seeder, необходимо зарегистрировать от 2 до 3 доменов, где первый - адрес хоста, на котором будет запущена нода и два - NS сервера для хоста. Второй NS домен необходим, поскольку большинство регистраторов требуют указания от двух NS в настройках.

На данный момент, зарегистрировать домен можно бесплатно, с помощью сервиса dot.tk или nic.ua в зоне pp.ua. По некоторой информации, сервис dot.tk/freenom.com работает не всегда стабильно и может периодически не отвечать на запросы, в то время как pp.ua, согласно регламенту зоны, потребует от вас указания полной информации о себе в данных whois, иначе домен может быть снят с регистрации и возобновлен на платной основе. Оптимальным вариантом будет регистрация платного домена, но следует учесть, что регистратор GoDaddy уже используется для официальной ноды и ранее имели место преценденты атак на инициальные ноды некоторыми странами, так что использование устойчивых к блокировкам регистраторов или отличных от GoDaddy будет оптимальным решением.

Currently twisterd is configured to try 4 different DNS Seeders but 3 of them depend on twister.net.co domain by Godaddy’s infrastructure. Some countries are known to have attacked this domain in order to prevent twister’s initial bootstrapping.

Расcмотрим на примере ноды twisterarmy. На данный момент мы используем бесплатный сервис dot.tk и три домена:

twisterarmyseed.tk NS twisterarmydns.tk, twisterarmydns2.tk  

twisterarmydns.tk A Server IP  

twisterarmydns2.tk A Server IP  

При регистрации данные домены были добавлены в корзину и оформлены на 12 месяцев бесплатно. В процессе они могут быть пролонгированы на платной основе.

Подготовка системы

Технические требования к аппаратной части

Для корректной работы twister-seeder, потребуется "белый" IP и доступ из сети по 53 порту. Большинство VPS предоставляют все необходимое для поднятия публичной ноды, но некоторые из них могут иметь ограничение в регламенте, касающиеся поисковых сервисов, которые создают нагрузку на трафик. Тем не менее, twister-seeder не требователен к ресурсам и может быть запущен на минимальном тарифе. Для этих целей можно порекомендовать yourserver.se, который так же является абузоустойчивым и принимающим оплату в криптовалюте.

Ниже представлены технические требования согласно сетевой нагрузке состоянием на 2021:

RAM: 0.2% 3Gb 
CPU: 0.3% Intel Core 2 duo
Bandwidth: 100Kb per minute

(default settings, on 7/119 available)

Настройка маршрутизации

В данном примере рассмотрен запуск twister-seeder от root, поэтому для продолжения достаточно открыть 53 порт в фаервол, например, с помощью утилиты ufw:

sudo ufw allow 53

Если для развертывания ноды используется локальная инфраструктура с роутером на выход в сеть, убедитесь что 53 порт адресуется на локальный сервер. Убедитесь, что провайдер не блокирует 53 порт а так же предоставляет "белый" / выделенный IP.

Установка

Установите зависимости ПО:

sudo apt-get install build-essential libboost-all-dev libssl-dev

Загрузите последнюю версию twister-seeder:

git clone https://github.com/miguelfreitas/twister-seeder.git

Перейдите в директорию twister-seeder и скомпилируйте dnsseed:

cd twister-seeder

make

Настройка сервера

Отключите сервис systemd-resolved для освобождения 53 порта (Ubuntu)

/etc/systemd/resolved.conf

DNSStubListener=no

Запуск

Запустите dnsseed от root

sudo ./dnsseed -h twisterarmyseed.tk -n twisterarmydns.tk

Если с момента регистрации домена прошло более 24 часов, убедитесь что dnsseed доступен в сети:

host -a twisterarmyseed.tk twisterarmydns.tk

Результат:

Trying "twisterarmyseed.tk"
Using domain server:
Name: twisterarmydns.tk
Address: 95.158.54.246#53
Aliases: 

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18126
;; flags: qr aa rd; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;twisterarmyseed.tk.		IN	ANY

;; ANSWER SECTION:
twisterarmyseed.tk.	40000	IN	NS	twisterarmydns.tk.
twisterarmyseed.tk.	60	IN	A	91.199.223.71
twisterarmyseed.tk.	60	IN	A	146.185.185.41

Received 99 bytes from 95.158.54.246#53 in 0 ms

Результат выполнения текущей команды зависит от времени кеширования DNS сервера

nslookup twisterarmyseed.tk
Server:		127.0.0.53
Address:	127.0.0.53#53

Non-authoritative answer:
Name:	twisterarmyseed.tk
Address: 95.158.54.246

После завершения настройки, DNS seeder будет возвращать адреса активных узлов из файла dnsseed.dump

Автоматический запуск при старте системы

  1. Создайте в домашней директории root файл twister-seeder.sh со следующим содержимым:
/{PATH_TO}/dnsseed -h twisterarmyseed.tk -n twisterarmydns.tk
  1. Отредактируйте задание crontab от пользователя root:

sudo crontab -e

  1. Добавьте следующую строку в последней строке:

@reboot /root/twister-seeder.sh

Запуск в фоновом режиме

Используйте утилиту screen для ручного запуска twister-seeder без привязки к сессии SSH.

Поддержите сеть

Предоставьте адрес вашей ноды узлам twiter-core, отправив ваш адрес в официальный репозиторий:

https://github.com/miguelfreitas/twister-core/commit/323314ebf3e08bb2dd3e307e664a4ec055fa9dcc

Частые вопросы

Q. Нужна ли отдельная установка twister-seeder наряду с twister-core и выполняет ли twister-core ту же функцию?
A. twister-seeder является отдельной сервисной службой. состоянием на 2021 год может потребоваться запуск twister-core для поиска активных нод (см. ниже). после чего постоянная работа twister-core не требуется.

Original answer by @miguelfreitas

It does:

  • it is a crawler of all the known peers,
  • it keeps track of the uptime/availability of each peer
  • it ranks peers from the most available to the least
  • it serves DNS requests (reporting the list of the most available known peers

Q. Для чего необходима запись NS и почему нельзя обойтись статичным IP?
A. Альтернативой DNS seeder может быть добавление IP адресов в шестнадцатеричном формате (файл chainparams.cpp) это требует включение адреса в официальный релиз а также обновление пользовательских twister-core.

Original answer by @miguelfreitas

Actually it is the NS record that is important. I’m not specialist but my understanding is that you are delegating a subdomain to another server (the one running twister-seeder).

The A record would just resolve directly to another IP. What we want is to redirect the client to request the answer from that IP. Type ‘host seed.twister.net.co’ to see what i mean.


Q. Какой регистратор домена наиболее оптимален для twister-seeder?
A. Для данной цели может использоваться любой регистратор, позволяющий добавлять свои NS.

В качестве бесплатного варианта, могут использоваться провайдеры dot.tk (первый год) или nic.ua (с доменным уровнем pp.ua на постоянной основе).

Решение проблем

Q. twister-seeder не находит новые ноды с сообщением 0/2 available (2 tried in 333s, 0 new, 0 active), 0 banned; 31 DNS requests, 13 db queries
A. Это может означать, что ни одна из нод twister-seeder не доступна и DNS seeder не может получить инициальный список адресов. При наличии соединения (connections) в twister-core, в качестве решения, можно передать инициальный набор адресов в twister-seeder, для этого необходимо добавить адрес активной ноды в файл

https://github.com/miguelfreitas/twister-seeder/blob/4bffed04cee748b5354afc78f1cbf73cc0756574/main.cpp#L432

db.Add(CService("NODE_IP", 28333, true), true);

при этом, twister-core должен быть запущен на открытом порту 28333 для корректной работы twister-seeder, в сети должен присутствовать как минимум один узел на порту 28333.

./twisterd -port=28333

после чего повторно скомпиллировать dnsseed.


Q. После отключения сервиса systemd-resolved sudo systemctl stop systemd-resolved не работает обновление системы (нет подключения)
A. Для решения проблемы, необходимо в файле /etc/systemd/resolved.conf добавить строку DNSStubListener=no и перезагрузить сервер, таким образом, порт 53 будет оставаться свободным.

Ссылки

Официальная документация
Help decentralize twister even more!
Generic DNS Seeder Setup Guide - UPDATED FOR 2021

Дополнительные инструменты
Go Language dns seeder for Bitcoin based networks
Go Language utility to encode/decode ip addresses for the Twister Network
Generic altcoin DNS seeder

Примечания

Организация публичной ноды twister-seeder позволит также иметь возможность запуска удаленной ноды twister-core для удобного доступа к twister или любого ПК или смартфона. Для упрощенной настройки удаленной ноды twister-core, используйте менеджер установки twister-cli-installer или следующую страницу документации Remote Twister Node setup (Ubuntu Debian).

Благодарности

@dryabov