Хостинг p2p узла Monero в I2P

Тема в разделе "Мануалы", создана пользователем Mr. Pickles, 4 сен 2019.

  1. Mr. Pickles

    Команда форума Модератор Редактор

    Регистрация:
    11 сен 2017
    Сообщения:
    488
    Симпатии:
    175
    Настоящий документ является кратким руководством для тех операторов новых и/или существующих узлов Monero, которые хотят поддержать пользователей I2P, позволив их узлам передавать p2p данные через I2P.

    После того как вы прочитаете этот документ, вы сможете создать I2P узел примерно за 20 минут.

    Требования:
    • система Linux, которая может быть защищена firewall (то есть домашняя сеть);
    • последняя версия Monero (CLI), ссылка;
    • последняя версия I2P-Zero (на момент написания — v1.12), ссылка.
    I2P-Zero

    I2P-Zero (также называется i2pz) — это небольшой футпринт I2P маршрутизатора. Эта программа сократилась до встраиваемой среды выполнения Java и не имеет зависимостей как таковых.

    У неё есть контрольный порт 8051, который можно использовать для создания службы (служб) I2P. Это простой текстовый протокол. Для взаимодействия следует использовать tunnel-control.sh или, как вариант, просто использовать: netcat: echo -e "version" | nc 127.0.0.1 8051.

    I2P-Zero имеет GUI, но не будет использовать его, так как, наиболее вероятно, вы будете устанавливать программу на сервер.

    Если кратко, I2P-Zero позволяет:
    1. Разместить eepsite (веб-сайт I2P).
    2. Разместить любую службу в сети I2P (например, направить локальный DNS-сервер на 127.0.0.1:53, чтобы обеспечить к нему доступ по I2P).
    3. Создать локальный прокси-сервер SOCKS, который можно будет использовать для направления трафика в туннель.
    Наша цель состоит в размещении полного рабочего узла через I2P, поэтому нам необходимо конфигурировать как входящий, так и исходящий I2P трафик:
    • для размещения monerod через I2P нам понадобится воспользоваться опцией 2;
    • для перенаправления трафика через I2P нам понадобится воспользоваться опцией 3.
    Установка I2P-Zero
    1. Распаковать и переместить в i2p-zero-linux.vX.XX/router/bin.
    2. Запустить процесс I2P-Zero: ./launch.sh.
    3. ???
    4. w00t!!
    Убедиться в том, что программа использует netstat -tulpn | grep '8051' (мы производим обработку, используя grep, для контрольного порта).

    I2P-Zero systemd

    Для /etc/systemd/system/i2pzero.service существует скрипт запуска systemd:
    HTML:
    [Unit]
    Description=i2pzero
    
    [Service]
    Type=simple
    ExecStart=/bin/bash /home/i2pz/i2p-zero-linux.v1.10/router/bin/launch.sh
    User=i2pz
    Group=i2pz
    
    [Install]
    WantedBy=multi-user.target
    Изменить пути по желанию, перезагрузить systemd: systemctl daemon-reload, после чего можно выполнить service i2pzero start.

    Убедиться в том, что всё работает: netstat -tulpn | grep '8051'.

    Конфигурирование I2P-Zero: создание сервера

    Сначала нам необходимо зарегистрировать I2P службу/сервер:
    • ./tunnel-control.sh server.create 127.0.0.1 48083
    на выходе вы получите I2P адрес b32, например:
    HTML:
    suspiciouslyrandomandverylongstring.b32.i2p
    Это будет адрес вашего I2P сервера/службы, который будет использоваться для входящих соединений.

    Конфигурирование I2P-Zero: создание туннеля SOCKS

    Чтобы наш узел мог ретранслировать входящие транзакции по I2P, нам необходимо создать выходящие соединения по I2P. Чтобы направить трафик в I2P, нам понадобится создать туннель SOCKS. I2P-Zero позволяет сделать это.

    Для создания туннеля SOCKS выполняется следующая команда:
    • ./tunnel-control.sh socks.create 48085
    I2P-Zero подтвердит создание этого туннеля простым OK.

    Для мониторинга туннеля используется
    HTML:
    ./tunnel-control.sh all.list | python -m json.tool.
    Запуск monerod

    Пришло время запустить monerod. Нам необходимо включить следующий флаг: --anonymous-inbound (документация), чтобы monerod знал «публичный» адрес и порт нашего I2P сервера.

    Формат будет следующим:
    HTML:
    --anonymous-inbound <address>,127.0.0.1:<M>
    ,
    где M будет свободным локальным портом, а адресом — ваш адрес b32.i2p.

    Ранее нашему I2P серверу нами был назначен порт 48083. Наш флаг становится следующим:
    HTML:
    --anonymous-inbound "suspiciouslyrandomandverylongstring.b32.i2p,127.0.0.1:48083"[HTML]
    Другим флагом, который необходимо включить, будет --proxy (документация). Если не включить этот флаг, ваш узел не сможет ретранслировать транзакции в сеть I2P. Данный флаг должен включаться всегда.
    [HTML]
    --proxy i2p,127.0.0.1:48085
    Последним необходимым флагом является --add-peer, который указывает на существующий сид-узел I2P (также называемый mipseed), к которому можно подсоединиться. Без этой команды вы не сможете ретранслировать транзакции, так как вы не будете подсоединены к какому-либо узлу.
    HTML:
    --add-peer "dsc7fyzzultm7y6pmx2avu6tze3usc7d27nkbzs5qwuujplxcmzq.b32.i2p"
    Monero Daemon systemd

    Для /etc/systemd/system/monerod.service существует скрипт запуска systemd:
    HTML:
    [Unit]
    Description=monerod
    After=network.target
    
    [Service]
    Type=forking
    PIDFile=/home/monero/monerod.pid
    ExecStart=/home/monero/monero-x86_64-linux-gnu.0.14.1.0/monerod --anonymous-inbound "suspiciouslyrandomandverylongstring.b32.i2p,127.0.0.1:48083" --restricted-rpc --detach --pidfile /home/monero/monerod.pid
    User=monero
    Group=monero
    
    [Install]
    WantedBy=multi-user.target
    Вы можете изменить его по собственному усмотрению.

    Заключение

    Подытожим. Вышеуказанные 3 флага (--anonymous-inbound, --proxy, --add-peer) необходимы для того, чтобы программа I2P-Zero обеспечила возможность размещения узла Monero.

    Для понимания я опубликую полную команду monerod, которую лично я использую со своим публичным узлом RPC Monero на сервере:
    HTML:
    ./monerod
     --max-concurrency 4 \
     --rpc-bind-ip YOUR.IP \
     --rpc-bind-port 18089 \
     --restricted-rpc \
     --public-node \
     --anonymous-inbound "suspiciouslyrandomandverylongstring.b32.i2p,127.0.0.1:48083" \
     --proxy i2p,127.0.0.1:48085 \
     --add-peer "dsc7fyzzultm7y6pmx2avu6tze3usc7d27nkbzs5qwuujplxcmzq.b32.i2p" \
     --confirm-external-bind
    Что ещё можно прочитать по теме:
    Источник: Hosting a Monero p2p node on I2P

    Перевод:
    Mr. Pickles (@v1docq47)
    Редактирование:
    Agent LvM (@LvMi4)
    Коррекция:
    Kukima (@Kukima)
     
    #1 Mr. Pickles, 4 сен 2019
    Последнее редактирование: 4 сен 2019
  • О нас

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