Создание общедоступного узла Monero с поддержкой Tor Onion

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

  1. Mr. Pickles

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

    Регистрация:
    11 сен 2017
    Сообщения:
    916
    Симпатии:
    244
    Это большой вклад в работу сети Monero, предполагающий довольно сложные настройки. Если вы новичок, то вам это не нужно.

    Конечная цель: Вы будете публично предлагать следующие услуги, где xxx.yyy.zzz.vvv будет IP-адресом вашего сервера.

    Код:
    * xxx.yyy.zzz.vvv:18080 - клирнет P2P сервис (для других узлов)
    * xxx.yyy.zzz.vvv:18081 - клирнет RPC сервис (для кошельков)
    * yourlongv3onionaddress.onion:18083 - «луковый» P2P сервис (для других «луковых» узлов)
    * yourlongv3onionaddress.onion:18081 - «луковый» RPC сервис (для кошельков, подключающихся через Tor)
    Почему используются разные P2P порты для клирнет и «луковых» сервисов? Это требование monerod.

    Как и в случае с любой службой широковещательной передачи или ретрансляции публичных данных, «плохой трафик» или в нашем случае «плохие транзакции» с точки зрения внешнего наблюдателя могут передаваться с IP-адреса вашего сервера, даже если на самом деле их источником пользователь удалённого кошелька. Это потенциальный риск, о котором следует помнить.

    Зачем использовать именно эти настройки?


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

    Обслуживание блоков и транзакций в P2P сети Monero поможет новым пользователям загрузить и синхронизировать свои узлы. Это также усилит защиту P2P сети Monero от DDoS-атак и разделения.

    Открытый интерфейс кошелька (RPC) позволяет любому пользователю подключить свои кошельки к сети Monero через ваш узел. Это полезно для новичков, которые еще не успели создать своих собственных узлов.

    Сервис Tor Onion для интерфейса кошелька полезен для пользователей кошельков, подсоединяющихся через Tor, поскольку он смягчает риски проведения «атаки посредника» (MiTM) на выходные узлы Tor (которые вполне реальны). После подключения кошелька к «луковому» сервису проведение MiTM атаки не представляется реальным, поскольку в сети Tor применяется сквозная TLS защита соединений.

    Сервис Tor Onion для P2P сети полезен для других пользователей полных узлов, поскольку он позволяет им транслировать транзакции по сети Tor (при помощи опции --tx-proxy).

    Возможные предпосылки для создания узла

    Вы разбираетесь в администрировании Linux на базовом уровне. Вы ищете конкретное руководство Monero.

    У вас есть администраторский доступ к серверу Linux с оперативной памятью 2 Гб и 120 Гб SSD (или 50 Гб для обрезанной версии узла). Эта информация актуальна на январь 2021.

    Некоторые команды предназначены для Ubuntu, но вы легко переведёте их для используемого вами дистрибутива.

    Установка Tor
    Установите Tor.

    Измените /etc/tor/torrc, как показано ниже.

    Включите сервис Tor при помощи команды systemctl enable tor и перезапустите его посредством команды systemctl restart tor.

    Убедитесь в том, что Tor работает, используя команду systemctl status tor@default.

    Новый луковый адрес и соответствующая пара ключей создаются демоном tor в директории /var/lib/tor/monero/. Возможно, вы захотите произвести резервное копирование, чтобы безопасно контролировать свой "луковый" адрес. Такое копирование происходит при каждой перезагрузке, когда вы добавляете новую HiddenServiceDir в конфигурацию torrc.

    На данный момент необходимость в самом демоне Monero отсутствует. «Луковые» сервисы (также известные как «скрытые сервисы») просто будут ожидать, пока monerod локального хоста не появится на указанных портах 18081 и 18083.

    /etc/tor/torrc
    Код:
    HiddenServiceDir/var/lib/tor/monero
    HiddenServicePort 18081 127.0.0.1:18081    # интерфейс для кошелька (RPC)
    HiddenServicePort 18083 127.0.0.1:18083    # интерфейс для P2P сети
    Демон tor просто переносит трафик с виртуального «лукового» порта на фактический порт локального хоста, где какая-нибудь служба перехватит его (в нашем случае это будет monerod). По одному «луковому» адресу может находиться множество сервисов на различных виртуальных портах. Мы воспользуемся этой возможностью, чтобы иметь P2P и RPC сервисы monerod по одному «луковому» адресу. Вы можете создать любое количество «луковых» адресов на одном сервере или по одному IP-адресу, но в данном случае в этом нет необходимости.

    Установка Monero

    Создайте пользователя monero и группу useradd --system monero.

    Создайте директорию binaries Monero (пока она будет пустой) mkdir -p /opt/monero и chown -R monero:monero /opt/monero.

    Создайте директорию data Monero mkdir -p /srv/monero и chown -R monero:monero /srv/monero.

    Создайте директорию log Monero mkdir -p /var/log/monero и chown -R monero:monero /var/log/monero.

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

    Скачайте и проверьте файл.

    Извлеките tar -xf monero-linux-x64-v0.17.1.9.tar.bz2 (измените имя файла соответствующим образом).

    Переместите двоичные файлы в директорию /opt/monero/, используя mv monero-x86_64-linux-gnu-v0.17.1.9/* /opt/monero/, а затем chown -R monero:monero /opt/monero.

    Создайте /etc/monero.conf, как показано ниже и вставьте необходимые значения в соответствующие поля.

    Создайте /etc/systemd/system/monero.service, как показано ниже.

    Используя команду systemctl enable monero включите сервис Monero и перезапустите его командой systemctl restart monero.

    Проверьте, включился ли сервис, при помощи команды systemctl status monero.

    Проверьте, работает ли он надлежащим образом, используя tail -n100 /var/log/monero/monero.log.

    /etc/monero.conf

    Это просто пример возможной конфигурации, и он ни в коем случае не является обязательным для реализации. Вы вольны вносить изменения. См. monerod reference.

    Если вы изменили путь, внесите соответствующие корректировки.

    Выведите ваш «луковый» адрес на экран, используя cat /var/lib/tor/monero/hostname, и вставьте его в поле опции anonymous-inbound.
    Код:
    # /etc/monero.conf
    #
    # Конфигурационный файл для monerod. Все доступные опции можно найти в MoneroDocs:
    # https://monerodocs.org/interacting/monerod-reference/
    
    # Директория данных (база данных блокчейна и индексы)
    data-dir=/srv/monero
    
    # Опциональное обрезание
    # prune-blockchain=1           # Обрезание позволяет сэкономить до 2/3 дискового пространства без ущерба для функциональности, но вклад в работу сети будет меньшим
    # sync-pruned-blocks=1         # Позволяет скачать уже обрезанные блоки вместо того, чтобы обрезать их самостоятельно
    
    check-updates=disabled         # Отключает проверку записей DNS TXT на наличие новой версии
    
    # Регистрационный файл
    log-file=/var/log/monero/monero.log
    log-level=0                    # Минимальная запись БЕЗ РЕГИСТРАЦИИ подсоединяющихся одноранговых узлов или кошельков
    max-log-file-size=2147483648   # Устанавливается значение 2 Гб, что позволяет избежать обрезания журнала демоном monerod; вместо этого следует конфигурировать logrotate
    
    # Полный P2P узел
    p2p-bind-ip=0.0.0.0            # Привязка ко всем интерфейсам (по умолчанию)
    p2p-bind-port=18080            # Привязка к порту, используемому по умолчанию
    
    # Открытый RPC узел
    public-node=1                  # Предложение другим пользователям воспользоваться данным узлом в качестве удалённого для подсоединения их кошельков
    confirm-external-bind=1        # Открыть узел (подтверждение)
    rpc-bind-ip=0.0.0.0            # Привязка ко всем интерфейсам (для открытого узла)
    rpc-bind-port=18081            # Привязка к порту, используемому по умолчанию (для открытого узла)
    restricted-rpc=1               # Обязательно для интерфейса открытого узла
    no-igd=1                       # Отключение распределение портов UPnP
    no-zmq=1                       # Отключение ZMQ RPC сервера с целью сокращения поверхности атаки (не используется)
    
    # RPC TLS
    rpc-ssl=autodetect             # Использовать TLS, если клиент кошелька поддерживает этот протокол (задаётся по умолчанию); сертификат будет генерироваться каждый раз на ходу при каждом перезапуске
    
    # Размер пула памяти
    max-txpool-weight=268435456    # Максимальный размер пула неподтверждённых транзакций в байтах (в данном случае 256 Мб, по умолчанию составляет ~618 Мб)
    
    # Медленная, но надёжная запись в базу данных
    db-sync-mode=safe
    
    out-peers=64              # Обеспечивает значительно более быструю синхронизацию и передачу информации о транзакциях; используемое сегодня значение, равное 8, является недостаточным
    n-peers=64               # По умолчанию значение не ограничено; здесь мы предпочитаем задавать верхний предел
    
    limit-rate-up=1048576     # 1048576 КБ/с == 1 Гб/с; увеличение значения, используемого по умолчанию (2048 КБ/с); улучшение работы p2p сети
    limit-rate-down=1048576   # 1048576 КБ/с == 1 Гб/с; увеличение значения, используемого по умолчанию (8192 КБ/с; служит для ускорения начальной синхронизации
    
    # Tor: трансляция транзакций, сгенерированных подключёнными кошельками по сети Tor (не касается ретранслируемых транзакций)
    tx-proxy=tor,127.0.0.1:9050,16
    
    # Tor: добавление сид-узла P2P в сеть Tor
    add-peer=moneroxmrxw44lku6qniyarpwgznpcwml4drq7vb24ppatlcg4kmxpqd.onion:18080
    add-peer=monerozf6koypqrt.onion:18080
    add-peer=zbjkbsxc5munw3qusl7j2hpcmikhqocdf4pqhnhtpzw5nt5jrmofptid.onion:18083 # https://github.com/monero-project/monero/blob/master/src/p2p/net_node.inl
    add-peer=rno75kjcw3ein6i446sqby2xkyqjarb75oq36ah6c2mribyklzhurpyd.onion:28083        # Согласно Reddit, это основная сеть, несмотря на странное обозначение порта
    add-peer=sqzrokz36lgkng2i2nlzgzns2ugcxqosflygsxbkybb4xn6gq3ouugqd.onion:18083        # очень капризная опция, работает в 1 случае из 3
    
    # Tor: указание своего «лукового» адреса для monerod с целью его дальнейшей публикации в P2P сети
    anonymous-inbound=PASTE_YOUR_ONION_HOSTNAME:18083,127.0.0.1:18083,64
    
    # Tor: будьте снисходительны к подключающимся кошелькам; рекомендуется http://xmrguide42y34onq.onion/remote_nodes
    disable-rpc-ban=1
    /etc/.../monero.service
    Код:
    # /etc/systemd/system/monero.service
    
    [Unit]
    Description=Monero Daemon
    After=network.target
    Wants=network.target
    
    [Service]
    ExecStart=/opt/monero/monerod --detach --config-file /etc/monero.conf --pidfile /run/monero/monerod.pid
    ExecStartPost=/bin/sleep 0.1
    Type=forking
    PIDFile=/run/monero/monerod.pid
    
    Restart=always
    RestartSec=16
    
    User=monero
    Group=monero
    RuntimeDirectory=monero
    
    StandardOutput=journal
    StandardError=journal
    
    [Install]
    WantedBy=multi-user.target
    Открытие портов брандмауэра

    Если вы используете брандмауэр (а его следует использовать), откройте порты 18080 и 18081 для входящих TCP соединений. Это для входящих клирнет соединений, P2P и RPC соответственно.

    Вам не нужно открывать каких-либо портов для Tor. «Луковые» сервисы работают с виртуальными портами. Демон tor не принимает входящие соединения напрямую, поэтому ему не нужны открытые порты.

    Например, в случае с популярным брандмауэром UFW это делается следующим образом:
    Код:
    ufw allow 18080/tcp
    ufw allow 18081/tcp
    Для проверки используйте команду ufw status. Результат должен быть похож на приводимый ниже (порт 22, используемый SSH по умолчанию, не связан с Monero):
    Код:
    To                         Action      From
    --                         ------      ----
    22/tcp                     LIMIT       Anywhere             
    18080/tcp                  ALLOW       Anywhere             
    18081/tcp                  ALLOW       Anywhere             
    22/tcp (v6)                LIMIT       Anywhere (v6)         
    18080/tcp (v6)             ALLOW       Anywhere (v6)         
    18081/tcp (v6)             ALLOW       Anywhere (v6)   
    Тестирование

    На сервере

    Перечислите все службы, отслеживающие порты, и убедитесь в том, что именно то, что и ожидается:
    Код:
    sudo netstat -lntpu
    Результат должен содержать следующее (в любом порядке); очевидно, что значения PID будут отличаться.
    Код:
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
    
    ...
    tcp        0      0 0.0.0.0:18080           0.0.0.0:*               LISTEN      259255/monerod 
    tcp        0      0 0.0.0.0:18081           0.0.0.0:*               LISTEN      259255/monerod 
    tcp        0      0 127.0.0.1:18083         0.0.0.0:*               LISTEN      259255/monerod 
    tcp        0      0 127.0.0.1:9050          0.0.0.0:*               LISTEN      258786/tor          
    На клиентской машине

    Наконец, настала пора протестировать соединения с вашей клиентской машины.

    Установите tor и torsocks на свой ноутбук. Они всё равно вам понадобятся для кошелька Monero.

    Исключительно для тестирования вам также понадобятся nmap и proxychains.

    Протестируйте клирнет P2P соединение:
    Код:
    nmap -Pn -p 18080 YOUR_IP_ADDRESS_HERE
    Протестируйте клирнет RPC соединение:
    Код:
    curl --digest -X POST http://YOUR_IP_ADDRESS_HERE:18081/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_info"}' -H 'Content-Type: application/json'
    Протестируйте «луковое» P2P соединение (пропустите, если у вас нет proxychains):
    Код:
    proxychains nmap -Pn -p 18083 YOUR_ONION_ADDRESS_HERE.onion
    Протестируйте «луковое» RPC соединение:
    Код:
    torsocks curl --digest -X POST http://YOUR_IP_ADDRESS_HERE:18081/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"get_info"}' -H 'Content-Type: application/json'
    Отладка
    Tor:
    • Состояние: systemctl status tor@default
    • Записи в файле регистрации: journalctl -xe --unit tor@default
    Monero:
    • Состояние: systemctl status monero
    • Записи в файле регистрации: tail -n100 /var/log/monero/monero.log
    • Дополнительная информация в файле регистрации: измените log-level=0 на log-level=1 в файле monero.conf (не забудьте вернуть всё, как было, после того, как закончите).
    Дальнейшие улучшения

    Периодические перезапуски

    Вероятно, стоит добавить опцию периодического автоматического перезапуска tor и monerod каждые пару часов. Ни один из демонов не идеален; они могут зависать или им может не хватать памяти в критических ситуациях, например, как при недавних атаках на Tor v3 или DDoS атаках на сеть Monero. Одним из возможных способов реализации такой опции является использование таймеров systemd.

    ---

    Источник: Running Monero Open Node + Tor Onion

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

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