Поднятие ноды NOIA на Linux

ProVVoland
Syntropy Russia
Published in
9 min readSep 17, 2019

О NOIA

NOIA — это очень крутой проект, использующий технологию распределенного реестра (distributed ledger technology (DLT), он же блокчейн), работающий над интернетом следующего поколения, решающий задачи по масштабированию, обслуживанию и защите текущей сетевой инфраструктуры. Вы можете и обязательно должны узнать больше о NOIA на официальном веб-сайте: https://noia.network

Преимущества запуска собственной ноды NOIA

Ноды NOIA поддерживают и защищают сеть, а также обеспечивают необходимую полосу пропускания и хранение данных пользователей. Проект дает возможность запустить собственную ноду в сети NOIA, предоставляя отличный шанс для:

  • Изучения технологии распределенного реестра
  • Ознакомления с командной строкой Linux
  • Заработка жетонов NOIA в качестве бонуса

Также доступна версия NOIA для Windows, но если вы читаете это руководство, значит, вы крутой парень и пользуетесь командной строкой Linux.

Заработок токенов NOIA

Вы можете запустить ноду для удовольствия и изучения, но для заработка вам нужно пройти процедуру KYC. Вы можете сделать это, указав свой адрес электронной почты в поле GET STARTED на сайте NOIA, а затем действуя в соответствии с получаемыми инструкциями.

В настоящее время NOIA запустила 2-ую фазу тестовой сети, таким образом, вы можете получать вознаграждения за поддержку ноды в трех категориях:

  • Любой тип ноды с включенным WebRTC (IPv4): 50 NOIA
  • VPS с IPv6-адресом: 100 NOIA
  • Стационарная нода с IPv6-адресом: 200 NOIA

Все эти три категории требуют 120 часов безотказной работы в неделю. Счетчик обнуляется каждый понедельник в 15:00 по Москве. Стационарная нода, как правило, представляет собой ПК или миникомпьютер, такой как Raspberry Pi.

Использование IPv6

Обратите внимание! В настоящее время осуществляется переход на IPv6, при этом, у вас также должны быть открыты IPv4 TCP порт 8048 и UDP порт 8058. Это подробно описано в главе “Необходимые условия” далее.

Из таблицы вознаграждений видно, что узлам, использующим IPv6, предлагаются более высокие вознаграждения. Это связано с тем, что вместе с сегментной маршрутизацией IPv6 является важной частью программируемого интернета NOIA — маршрутизации данных, запрограммированных на уровне пакетов.

IPv6 на ПК и Raspberry Pi

Если вы используете компьютер дома или в сети, вы можете автоматически получить адрес IPv6 после выполнения двух основных требований:

  • Ваш интернет-провайдер должен поддерживать IPv6
  • Ваш роутер (маршрутизатор) должен поддерживать IPv6

Маршрутизаторы, поддерживающие IPv6, обычно имеют один или два переключателя, чтобы включить IPv6.

IPv6 и переадресация портов

Обратите внимание! Переадресация портов через NAT в IPv6 больше не требуется. Здесь каждое устройство, подключенное к маршрутизатору, автоматически получает уникальный общедоступный IP-адрес, который передается через маршрутизатор без дополнительных настроек NAT.

IPv6 на VPS

Обработка IPv6 варьируется у разных поставщиков облачных услуг. Например, Digital Ocean имеет переключатель на панели мониторинга VPS для включения IPv6, где Hetzner Online имеет активированный IPv6 по умолчанию (в настоящее время все еще требуются действия пользователя, описанные ниже в советах по IPv6). Обратитесь к документации своих поставщиков услуг или обратитесь в их службу поддержки, чтобы продолжить работу.

Инструкция по включению IPv6 на AWS (Amazon Web Servises) здесь.

Прочие советы по IPv6

Существует несколько веб-инструментов для тестирования возможностей IPv6, но мы сосредоточимся на командной строке, поэтому вот несколько полезных команд для проверки состояния IPv6.

Чтобы узнать, определен ли у вас адрес IPv6, введите команду:

ip -6 addr

Если вы видите адрес, начинающийся с 2xxx:.. у вас есть общедоступный IPv6-адрес. Например:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 state UNKNOWN qlen 1000
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
inet6 2001:14bb:190:2d77:6420:ab58:7508:db95/128 scope global dynamic noprefixroute
valid_lft 65276sec preferred_lft 65276sec
inet6 2001:14bb:190:2d77:bb84:b5da:29c1:9d09/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 86207sec preferred_lft 86207sec
inet6 fe80::7c9d:122c:1e01:c352/64 scope link
valid_lft forever preferred_lft forever

Выше вы видите публичный адрес 2001:14bb:190:2d77:bb84:b5da:29c1:9d09/64. Адрес, начинающийся с fe80:.. это так называемый Link Local address. Если вы видите только это, значит ваш IPv6 настроен как-то не так.

Совет для Hetzner Online

Используя Hetzner VPS, вы можете увидеть публичный IP-адрес, но его состояние устарело. Для начала, введите команду ниже. Замените адрес 2xxx:.. адресом, который вы видите, вводя команду ip -6 addr, описанную выше.

ip -6 addr change 2xxx:../64 dev eth0 preferred_lft forever

В настоящее время IPv6-адрес сбрасывается при перезапуске VPS, поэтому после перезапуска VPS вы должны повторить приведенную выше команду. (Об этом сообщает Hetzner.)

Проверка, видимы ли вы в Интернете через IPv6

Есть несколько способов проверить, что ваш публичный IPv6-адрес доступен в Интернете.

Проверьте конфигурацию IP вашего компьютера с помощью команды

ip -6 addr

Вы должны увидеть адрес формата IPv6, начинающийся с 2xxx:.. как здесь:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 state UNKNOWN qlen 1000
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
inet6 2a01:4f8:1c17:7226::1/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::9400:ff:fe2d:c1d0/64 scope link
valid_lft forever preferred_lft forever

Вы также можете пропинговать Google через сеть IPv6:

ping6 ipv6.google.com

Еще один способ — использовать команду dig. Здесь вы должны получить адрес в формате IPv6.
Обратите внимание! Если команда dig не найдена, установите пакет dnsutils с помощью команды sudo apt install dnsutils.

dig TXT +short o-o.myaddr.l.google.com @ns1.google.com | awk -F'"' '{ print $2}'

Настройка ноды NOIA

Перейдем непосредственно к процедуре настройки ноды.

Следующие команды работают на современных Ubuntu и Debian собранных на железе, к примеру, на персональном компьютере, Raspberry Pi или виртуальном частном сервере (VPS).

Необходимые условия

  1. У вас должен быть доступ к командной строке Linux вашей машины (через консоль, ssh-терминал или мобильное устройство).
  2. Ваша машина должна быть доступна в сети Интернет через порты TCP 8048 и UDP 8058. Если ваша машина находится за NAT-маршрутизатором или межсетевым экраном, убедитесь, что у вас открыты/переадресованы порты TCP 8048 и UDP 8058.
    Подробные инструкции по переадресации портов для разных маршрутизаторов вы можете найти на https://portforward.com .
    Нода NOIA также может использовать протокол сопоставления портов NAT, поэтому, если ваш маршрутизатор поддерживает NAT PMP, вы можете установить его активным в настройках ноды (описано далее в документе), и переадресация портов будет выполнена автоматически.
  3. Если вы заблокировали порты в iptables, вы можете открыть их для вашей ноды с помощью команд ниже. Обратите внимание! Делайте это только если у вас заблокированы порты:
sudo iptables -A INPUT -p tcp –-dport 8048 -j ACCEPT
sudo iptables -A INPUT -p udp –-dport 8058 -j ACCEPT

Если у вас есть активные и блокирующие порты ufw (Universal WireWall), вам нужно использовать команды:

sudo ufw allow 8048/tcp 
sudo ufw allow 8058/udp

После того, как вы запустили ноду, вы можете проверить порты на https://check-host.net . Задайте NODE_EXTERNAL_IP_ADDRESS:8048 и нажмите [TCP], затем укажите NODE_EXTERNAL_IP_ADDRESS:8058 и нажмите [UDP].

Работа на разных платформах

Краткое руководство для того, чтобы начать работу с разными машинами:

  1. ПК с Linux

Откройте окно терминала и перейдите к « Installing the software» (“Установка программного обеспечения”).

2. Raspberry Pi

Загрузите Linux на карту MicroSD:

  • Загрузите Raspbian Buster Lite здесь: https://www.raspberrypi.org/downloads/raspbian/
  • Загрузите и установите balenaEtcher https://www.balena.io/etcher/
  • Вставьте microSD в картридер, запустите balenaEtcher, затем выберите изображение вашего microSD диска
  • Чтобы разрешить доступ ssh к вашему RPi, создайте пустой текстовый файл с именем ssh в каталог Raspbian. В терминале Linux вы можете просто напечатать touch ssh , а в Windows щелкнуть левой кнопкой мыши по папке и выбрать New ->Text file («Создать» -> «Текстовый файл»). (Обратите внимание: имя файла должно быть просто ssh , а не ssh.txt !)

Подключите и запустите RPi

  • Подключите MicroSD к вашему RPi, LAN кабель к маршрутизатору
  • Через минуту или две подключите ssh к RPi. Вы можете наблюдать IP-адрес в списке клиентов DHCP вашего маршрутизатора, идентификатор пользователя — pi и пароль — raspberry. (Если используется Windows ПК, используйте Putty в качестве инструмента для установления ssh, даже с учетом того, что в современной Windows 10 в командной строке доступна команда ssh по умолчанию. При использовании терминала Linux команда ssh помогает.)

3. Установка на VPS

Панели разных облачных провайдеров немного различаются, но обычно они говорят сами за себя, и есть хорошие руководства. Вкратце, создайте VPS с Debian 9 или 10. (Ubuntu также подойдет, но Debian имеет намного меньше ненужных компонентов, установленных по умолчанию.) Когда все будет готово, IP-адрес в наличии, а также ssh пароль и ключи, откройте ssh сеанс для узла.

Существует также скрипт для установки узла NOIA на VPS «одним щелчком». Если вы хотите использовать скрипт, это можно сделать так:

cd ~curl -LO https://raw.githubusercontent.com/anttu-t/create-noia-node/master/nncreate.shsudo chmod u+x nncreate.sh./nncreate.sh

Справка по использованию скрипта доступна здесь:
https://github.com/anttu-t/create-noia-node/blob/master/README.md

Установка программного обеспечения

Вот шаги для установки программного обеспечения узла. Вы можете копировать и вставлять данный код в командную строку (по одной строке). Если работа кажется слишком скучной, попробуйте пропустить шаг или два, и она станет более захватывающей …

Обратите внимание! Если вы являетесь пользователем root, вам не нужно прописывать sudo перед данными командами.

1. Установите модули, необходимые для работы узла:

sudo apt update
sudo apt -y install curl git npm build-essential python-dev

2. Установите node.js:

curl -sL https://deb.nodesource.com/setup_10.x | sudo bash -
sudo apt -y install nodejs

3. Получите пакет noia-node-cli:

git clone https://github.com/noia-network/noia-node-cli.git

4. Перейдите в папку noia-node-cli и установите NPM:

cd noia-node-cli
npm install
npm audit fix
npm run build

5. Протестируйте вашу ноду:

npm start

Если все прошло хорошо, вы должны увидеть лог (журнал событий).

6. Остановите ноду:

Ctrl + C

7. Отредактируйте файл конфигурации ноды, созданный во время тестового запуска:

nano ~/.noia-node/node.settings

a) Если ваш маршрутизатор поддерживает протокол сопоставления портов NAT, который автоматически выполняет переадресацию портов, установите значение natPmp=true. Если вы сделали переадресацию портов вручную, установите значение natPmp=false. Обычно true — лучший выбор, но в случае проблем, несмотря на правильную настройку переадресации портов на вашем маршрутизаторе, вы можете попробовать установить false .

б) Измените поле airdropAddress в [node.blockchain] со значения NULL на адрес своего кошелька, который вы использовали в процессе KYC.

в) (Необязательно) Определите место и размер хранилища в [node.storage]

dir : папка на ваш выбор.
size : количество выделяемого дискового пространства в байтах.

г) Сохраните, нажав Ctrl + x, y, Enter

8. Вновь запустите ноду:

npm start

Необязательно: нода NOIA в качестве службы Linux

Чтобы ваша нода работала без открытия экрана терминала, рекомендуется запускать ноду как службу Linux. Это также позволяет использовать сценарий данных, статуса и статистики ноды NOIA, описанный ниже.

Важное замечание: Перед созданием файла службы вы должны знать, как определить Пользователя (User) службы и Рабочий Каталог (WorkingDirectory). USERNAME — это имя пользователя, которое вы даете при входе в систему (вы можете проверить это с помощью команды users.) и вашу HOME_DIRECTORY, которую вы можете проверить с помощью команд:

Ctrl+C (если нода все ещё запущена)cd ~
pwd
  1. Создайте файл noia.service:
cd ~ 
nano noia.service

Скопируйте, вставьте и отредактируйте (см. Выше) содержимое файла ниже:

[Unit]
Description=noia
[Service]
User=USERNAME
WorkingDirectory=HOME_DIRECTORY/noia-node-cli
ExecStart=/usr/bin/npm start
Restart=always
RestartSec=7
[Install]
WantedBy=default.target

Закройте редактор и сохраните файл с помощью Ctrl + X, Y, Enter

2. Скопируйте файл сервиса в папку /etc/systemd/system :

sudo cp noia.service /etc/systemd/system/noia.service

3. Включите и запустите службу:

sudo systemctl enable noia.service
sudo systemctl start noia.service

Вы можете проверить, что нода работает нормально с помощью команды journalctl:

sudo journalctl -fu noia.service

Вы должны увидеть историю сообщений. (Чтобы выйти: Ctrl + C).

Ваш TCP-порт 8048 открыт, если вы видите «connected» с сообщением IP-адреса:

Sep 26 13:05:57 noia-k npm[6884]: info: [noia-node] WebRTC client client-id=WFCguYaTrkO4ZbFAncn2yNH7 connected (wrtc): ip=178.63.9.115, connected-clients=1.

Если TCP-порт 8048 заблокирован, через несколько минут после запуска узла вы увидите сообщение «connection failed»:

Sep 26 14:39:12 atu-rpi3 npm[11873]: warn: [noia-node] WebRTC connection failed. Port 8048 or IP 176.93.69.174 might be unreachable.

Сообщение «wasClean=false» сообщает вам о том, что у вас уже есть нода с тем же адресом ERC20, работающим где-то еще:

Sep 27 10:00:43 noia-k npm[25794]: info: [noia-node] Connection with master closed code=1002, reason=Unspecified connection closure reason, code=1002., wasClean=false

Обратите внимание! Это сообщение может выглядеть как ошибка, но не стоит беспокоиться, это вполне нормально:

Sep 11 16:11:23 noia-test npm[6209]: info: [noia-node] WebRTC client client-id=bLz9Qxmx07Rf3vdkfojPXsQx disconnected: connected-clients=0.

После остановки вывода журнала с помощью Ctrl + C вы можете выполнять другие задачи или закрыть терминал, а ваша нода продолжит свою работу. Нода также запускается автоматически в качестве службы после разрыва соединения и/или изменения (динамического) IP-адреса ноды, а также после сбоя питания или перезагрузки.

Сценарий данных NOIA, статус и статистика скрипта

Чтобы получить подробные данные, состояние и статистику вашей ноды, установите и запустите скрипт nnstat.sh следующим образом.

  1. Загрузите скрипт в свой домашний каталог и установите dnsutils, необходимый для проверки внешнего IP-адреса:
cd ~curl -LO https://raw.githubusercontent.com/anttu-t/noia-node-status/master/nnstat.shsudo apt install dnsutils

2. Дайте права на выполнение скрипта

sudo chmod u+x nnstat.sh

3. Запустите скрипт

./nnstat.sh

Обратите внимание! На новой ноде вы будете получать сообщение об ошибке, пока в журнале не появится первое сообщение диагностики. Это сообщение приходит раз в час, поэтому вам может потребоваться подождать это время, чтобы правильно отобразить данные/статус.

Обновление программного обеспечения ноды

В случае обновления программного обеспечения ноды, остановите её с помощью команды Ctrl + C на экране ноды или выполните команду sudo servicectl stop noia.service. Затем обновите с помощью команд:

cd ~/noia-node-cli/
rm -rf node_modules
rm package-lock.json
git pull
npm install
npm run build

Вы можете проверить текущую версию с помощью команды:

grep version ~/noia-node-cli/package.json

Затем запустите ноду с помощью команды start npm или sudo servicectl stop noia.service.

Панель управления NOIA

Вы можете проверить свои заработанные токены NOIA на https://dashboard.noia.network. Еженедельная контрольная точка — по понедельникам в 15:00 по Москве, информационная панель (dashboard) обновляется вскоре после этого.

Вы можете задавать вопросы и отправлять отзывы об этом руководстве на канал NOIA Telegram: https://t.me/NoiaNetwork. (или напрямую @anttu в Discord или @anttut в Telegram)

Этот документ будет постоянно обновляться на основе полученных отзывов и возможных изменений в сети NOIA.

Данный документ — это перевод статьи: https://medium.com/@anttiturunen/set-up-noia-node-on-linux-df4a00635759

Также по всем вопросам вы можете обращаться в официальный русскоязычный Телеграмм чат https://t.me/NOIA_RUS.

--

--