GNUnet (Русский)

Перевод
этой статьи или раздела не отражает оригинальное содержание.
Причина:
Невычитанная копипаста из переводчика DeepL. (
Discuss
)
Related articles
Tor
I2P
Freenet
GNUnet
- это основа для безопасной и анонимной одноранговой сети, которая не использует никаких централизованных или иным образом доверенных служб. В настоящее время фреймворк предлагает защищенный от цензуры файлообменник, обмен сообщениями,
VPN
, GNS (децентрализованная версия
DNS
) и многое другое.
См. также
https://gnunet.org/en/use.html
и
Wikipedia:GNUnet
.
Установка
GNUnet можно
установить
с помощью пакета
gnunet
AUR
. Последняя экспериментальная версия доступна как
gnunet-git
AUR
.
Начало работы
Конфигурация GNUnet по умолчанию является многопользовательской. Это означает, что системные службы запускаются системным пользователем
gnunet
, а пользователям, входящим в группу
gnunet
, разрешено взаимодействовать с демоном - например, искать и загружать файлы.
Поэтому перед использованием GNUnet вы должны убедиться, что
добавить своего пользователя
в группу
gnunet
, чтобы получить необходимые разрешения.
Конфигурация
Конфигурация по умолчанию должна работать из коробки в большинстве случаев. Для изменения конфигурации системы обратитесь к
/etc/gnunet.conf
, а для изменения конфигурации текущего пользователя - к
~/.config/gnunet.conf
.
Для более подробной информации смотрите
Configuration Handbook
в руководстве. Смотрите также
#Запуск демона от имени текущего пользователя в многопользовательской установке
.
Использование
Вхождение в сеть GNUnet
Start
и, возможно,
enable
службы
gnunet
.
Проверка сети
Вы можете проверить текущее состояние сети, запустив команду
gnunet-peerinfo
от имени обычного пользователя.
$ gnunet-peerinfo
Чтобы узнать идентификатор вашего пэра, запустите команду:
$ gnunet-peerinfo -s
Чтобы получить список пиров, с которыми вы непосредственно связаны (они называются "соседями"), запустите команду:
$ gnunet-core
Поиск файла
Используйте
gnunet-search
для поиска файла по ключевым словам (они не обязательно связаны с именем файла). Например, для поиска файлов, которые были проиндексированы по ключевому слову "commons", запустите:
$ gnunet-search --timeout='10 s' 'commons'.
Без указания таймаута (10 секунд в примере выше)
gnunet-search
работает вечно, ожидая, пока пользователь нажмет CTRL-C.
Команда
gnunet-search
имеет опцию
--printf
для работы с печатным выводом, несколько похожую на опцию
-printf
утилиты
find
. Пожалуйста, введите
man gnunet-search
для получения более подробной информации.
Загрузка
Вывод
gnunet-search
по умолчанию представляет собой список команд
gnunet-download
, которые вы можете напрямую скопировать и запустить как обычный пользователь.
Например, используя вывод, сгенерированный
gnunet-search 'commons'
,
$ gnunet-search 'commons'
#1:
gnunet-download -o "Liotard (2017)_ Fablab - a new space for commons based peer production.pdf" gnunet://fs/chk/C6369DRQ3S8RYK1FD5VDE666W2HVEJ5G5GJRX29BH6ZM08CBRWS7FY9326RBJ4G0N8V1RJ2N802KBYZT7RJT2EDK1J9JR2DXK5MTVM0.4SXJCK9NT5XGCZ0YAJ0ETXJJGY3P2SMNZ0Q94N775YEX9SXS2RW5FWRFK4GMBTP668Z3R8QZZ4WSHW1KG1AVQ5VFC1VF5T3WF57GT58.336423

#2:
gnunet-download -o "Rose, Carol (1986)_ The Comedy of the Commons_ Commerce, Custom, and inherently Public Property.pdf" gnunet://fs/chk/TQK3A2C279EJQ50B1TQWFNTPMGQZJJ4JXYTF2D88D03H038TB7SVVSRBT74FMYPNZ47YZSV096PVVZH0TQ3B8KBVBV2H8GN9VAASTJR.CQ7M7843MGPZCV8M26NKH6EB5MBGZAXRWCF39YS668WM6F22D214GSXNTJ4RYGE7XF68VPZM4C19XR48TT4J8WH8S2E00C96Q8K6790.1593230

#3:
gnunet-download -o "Hardin, Garett (1968)_ Tragedy of the Commons.pdf" gnunet://fs/chk/Y1FD7D123CEGWDW544YDEP15YA5E7ZD2XRSJBNP0847A5JXMMZEZ0XACGRG42BBBTGKZ0ZCBW0A9T6196Z5N26HA6SP1T8GDAT5H5SG.RN38G25DMYG3TBQJEGWDZT2B84N1JYYJZ8VRJ8HG2G1A4EFD4GH5TZXB0RXV7QEMZBSKWCCEF736FXNH6C5BYKG9DSTV99ETFGC93R0.1520328

...
вы можете запустить,
$ gnunet-download -o "Hardin, Garett (1968)_ Tragedy of the Commons.pdf" gnunet://fs/chk/Y1FD7D123CEGWDW544YDEP15YA5E7ZD2XRSJBNP0847A5JXMMZEZ0XACGRG42BBTGKZ0ZCBW0A9T6196Z5N26HA6SP1T8GDAT5H5SG. RN38G25DMYG3TBQJEGWDZT2B84N1JYYJZ8VRJ8HG2G1A4EFD4GH5TZXB0RXV7QEMZBSKWCCEF736FXNH6C5BYKG9DSTV99ETFGC93R0.1520328
которая загрузит
Hardin, Garett (1968)_ Tragedy of the Commons.pdf
в текущий каталог.
Монтирование удаленного каталога GNUnet без его загрузки
Был разработан модуль
gnunet-fuse
AUR
для монтирования удаленных каталогов из сети GNUnet. С помощью
gnunet-fuse
каталоги, опубликованные в сети GNUnet, могут быть смонтированы как файловые системы только для чтения, и доступ к ним осуществляется с помощью обычных файловых операций. В отличие от рекурсивной загрузки каталога через
gnunet-download
, преимущество этого метода в том, что файлы загружаются по требованию. Будут загружены только те файлы (или каталоги), к которым вы обращаетесь. Для получения дополнительной информации установите модуль и введите
man gnunet-fuse
.
Выгрузка
Публикация файла в файлообменной сети GNUnet предполагает выбор ключевых слов, которые впоследствии могут быть использованы другими людьми для поиска файла.
Ключевые слова не являются строго обязательными, но они рекомендуются. Это связано с тем, что в GNUnet разрешен поиск не по имени файла, а по ключевым словам. Библиотека
libextractor
, которая является зависимой частью GNUnet, может автоматически извлекать ключевые слова из файла, но вы можете захотеть ввести свои собственные ключевые слова.
В следующем примере мы используем ключевые слова "commons" и "state" для публикации файла с именем
ostrom.pdf
.
$ gnunet-publish -k 'commons' -k 'state' ostrom.pdf
Теперь пользователи GNUnet могут найти этот файл с помощью команды
gnunet-search
.
$ gnunet-search 'commons'
.
#1:
gnunet-download -o "ostrom.pdf" gnunet://fs/chk/M57S...
Чтобы получить список всех файлов, которые в настоящее время опубликованы, запустите
gnunet-fs -i
. Если позже вы захотите прекратить совместное использование файла, вы можете использовать
gnunet-unindex
filename
(в нашем примере
gnunet-unindex 'ostrom.pdf'
).
После публикации файла невозможно получить ключевые слова, по которым файл был проиндексирован (т.е. обратный поиск). Однако всегда можно добавить к нему дополнительные ключевые слова.
Обратите внимание, что может пройти некоторое время (до нескольких часов), пока ваши коллеги смогут увидеть ваши свежезагруженные файлы.
Warning
Отмена публикации файла остановит только текущую машину от обмена файлом, но
не
удалит файл из сети GNUnet - что по замыслу невозможно - так как другие люди могли скачать файл и поделиться им самостоятельно. В любом случае
gnunet-publish
следует считать
необратимым действием
Команда
gnunet-publish
предлагает опцию -
-n
или эквивалентно
--noindex
- для публикации файла без его индексирования. При ее использовании GNUnet выполнит полную вставку и сохранит весь файл в зашифрованном виде в базе данных GNUnet.
Эта опция была создана с целью избежать того, чтобы тот, кто имеет физический доступ к компьютеру, на котором работает GNUnet, узнал, какие файлы в настоящее время публикуются, в случае цензурированных файлов в странах с сильной цензурой. Файлы, опубликованные с опцией
--noindex
, будут отображаться как куски, загруженные из сети, и как таковые не могут быть неопубликованы/неиндексированы (они никогда не были проиндексированы в первую очередь); однако всегда можно указать низкий приоритет содержимого при публикации (
--prio
) и сказать GNUnet, что содержимое, которое будет опубликовано, может быть легко потеряно, когда база данных станет полной.
Для получения дополнительной информации, пожалуйста, прочитайте
главу о совместном использовании файлов в справочнике
. См. также
https://gnunet.org/en/use.html#filesharing
.
Изменение и удаление индексированных файлов
Когда вы изменяете файл, URI файла изменяется. Поэтому GNUnet считает, что это совершенно другой файл, и индексированный файл будет считаться отсутствующим. Поэтому сначала убедитесь, что исходный файл не проиндексирован (с помощью команды
gnunet-unindex
), измените файл, а затем проиндексируйте новый файл, чтобы сделать его доступным через сеть.
Если вы хотите удалить файл из файловой системы, то сначала нужно снять с него индексацию.
Если вы заранее знаете, что опубликованный файл, скорее всего, будет нуждаться в обновлении чаще или реже, смотрите
#Публикация обновляемых файлов
.
Загрузка + обмен
Файлообменная сеть GNUnet представляет собой DHT (см.
Wikipedia:Distributed hash table
). В качестве пиров в DHT пользователи хранят на своем диске фрагменты различных файлов,
даже из файлов, которые они не скачивают или уже скачали
. Какие файлы хранятся, зависит от метрики/алгоритма расстояния DHT.
Технически, если файл не был полностью скачан, хранятся только его части. Они хранятся в кэше (обычно в
/var/lib/gnunet/.local/share/gnunet
). Если DHT-запрос обращается к пиру для получения одной из кэшированных частей, пир предоставит ее. База данных, используемая для хранения блоков совместного использования файлов, поддерживается в ограниченном объеме (ниже настраиваемой квоты), и все кэшированные части могут истечь, чтобы освободить место для новых файлов.
Если кто-то поделится файлом в сети GNUnet, распределенные части этого файла останутся в кэше сети на некоторое время, и файл останется доступным, даже если тот, кто поделился им, уйдет в офлайн. Но если первоначальный издатель пропал, и никто больше не поделился файлом
явно
(с помощью
gnunet-publish
), файл в конце концов станет недоступным, поскольку кэш пиров истечет или пиры уйдут в оффлайн.
Единственный способ гарантировать, что файл сохраняется в сети GNUnet, - это повторно опубликовать его явно после загрузки (с помощью
gnunet-publish
) и позволить машине, которая публикует файл, регулярно посещать сеть.
Публикация файла после загрузки всегда будет генерировать тот же URI, по которому файл был загружен (
gnunet://fs/chk/Y1FD...
в примере ниже), независимо от ключевых слов, выбранных для повторной публикации:
$ gnunet-download -o 'Hardin, Garett (1968)_ Tragedy of the Commons.pdf' gnunet://fs/chk/Y1FD...
100% [============================================================]
Загрузка `Hardin, Garett (1968)_ Tragedy of the Commons.pdf' выполнена (160 b/s).
$ gnunet-publish -k 'tragedy' 'Hardin, Garett (1968)_ Tragedy of the Commons.pdf'
Публикация `/srv/filesharing/gnunet/Hardin, Garett (1968)_ Tragedy of the Commons.pdf' выполнена.
URI - `gnunet://fs/chk/Y1FD...
Общение с другими пользователями GNUnet
Для общения с пользователями GNUnet доступна утилита
gnunet-messenger
,
для которой
gnunet.service
user unit
должен быть
start
" (возможно, вместе с системным блоком
gnunet.service
- см.
#Запуск демона от имени текущего пользователя в многопользовательской установке
). Например, чтобы войти в комнату "miscellanea", используя "alice" в качестве псевдонима, запустите
$ gnunet-messenger -e alice -r miscellanea
* Добро пожаловать в мессенджер, 'alice'!
* Вы пытаетесь открыть комнату...
* Вы присоединились к комнате.
[EHDA8T] * 'anonymous' открыл комнату: 2ABN944E16FTWFMOKTMQ5JMPQ233YSPBKC47XR2DHSPQCQ8GYK80
[EHDA8T] * 'anonymous' переименован в 'alice'
VPN
GNUnet предоставляет VPN, которая может быть использована для совместного использования вашего интернет-соединения (да, это может быть опасно, как и запуск узла выхода Tor), или для предоставления доступа к службам на вашем хосте (это должно быть менее опасно, при условии, что эти службы безопасны).
Информацию о том, как настроить VPN с помощью GNUnet, см. на сайте
https://gnunet.org/en/use.html#vpn
.
Служба имен GNU (GNS)
Служба имен GNU (GNS) - это полностью децентрализованная альтернатива
Domain Name System
(DNS), которая не должна страдать теми же серьезными недостатками безопасности, что и последняя (см.
Wikipedia:Domain Name System#Security issues
).
Информацию о том, как использовать GNS, см. на сайтах
https://gnunet.org/en/use.html#gns_cli
и
https://gnunet.org/en/use.html#gns_browser
.
Экосистема приложений
GNUnet GTK
GNUnet GTK - это набор графических интерфейсов для фреймворка GNUnet. Он поставляет следующие
GTK
приложения:
gnunet-conversation-gtk
gnunet-fs-gtk
gnunet-namestore-gtk
gnunet-peerinfo-gtk
gnunet-setup
gnunet-statistics-gtk
Для установки GNUnet GTK загрузите пакет
gnunet-gtk
AUR
.
Messenger GTK
В настоящее время разрабатывается несколько графических пользовательских интерфейсов для общения в сети GNUnet. Один из них -
Messenger GTK
(
messenger-gtk
AUR
, или
messenger-gtk-git
AUR
для версии разработки), удобный для мобильных устройств
GTK
графический пользовательский интерфейс для общения с пользователями GNUnet. См. также
Cadet GTK
(
cadet-gtk
AUR
), предыдущее приложение для чата, написанное теми же авторами.
Веб-интерфейс пользователя
Веб-интерфейс для GNUnet существует и доступен как
gnunet-webui-git
AUR
.
re:claimID
re:claimID
- это децентрализованный сервис Identity Provider (IdP), построенный на базе системы имен GNU. Он позволяет пользователям безопасно обмениваться личной информацией с веб-сайтами, используя стандартизированные протоколы (OpenID Connect).
Для пользователей
re:claimID
предлагает
расширение для Firefox
и
расширение для Chromium
для управления идентификацией
re:claimID
в браузере (необходимо установить пакет
gnunet
AUR
).
После установки расширения можно будет добавить новую личность в локальный экземпляр
re:claimID
и добавить к ней некоторые атрибуты, посетив сайт
https://ui.reclaim/
(ссылка не будет работать без установленного расширения).
За дополнительной информацией обращайтесь к
руководству
.
GNU Taler
GNU Taler - это система микротранзакций и электронных платежей, построенная поверх GNUnet. В отличие от других распределенных платежных систем Taler основана не на блокчейне, а на слепых подписях.
Для получения дополнительной информации обратитесь к
официальной документации
. См. также пакеты
sync
AUR
,
taler-exchange
AUR
,
taler-mdb
AUR
,
taler-merchant
AUR
и
taler-twister
AUR
.
GNU Anastasis
GNU Anastasis
- это протокол и реализация, позволяющие пользователям надежно хранить основные секреты в открытом наборе провайдеров условного депонирования и восстанавливать эти секреты в случае потери их оригинальных копий. Anastasis доступен на AUR (
anastasis
AUR
и
anastasis-gtk
AUR
). За дополнительной информацией обращайтесь к сайтам
https://www.gnu.org/software/anastasis/
и
https://anastasis.lu/
.
Устранение неполадок
GNUnet не удается опубликовать файлы
Распространенной ошибкой для тех, кто не понимает, как работают службы GNUnet, является попытка опубликовать файлы, расположенные в домашнем каталоге (или в его подкаталогах). Проблема в том, что системный пользователь
gnunet
(который запускает службу GNUnet) обычно не имеет доступа к домашним каталогам других пользователей.
Простым решением является создание общего каталога, где права на запись имеют только пользователи, входящие в группу
gnunet
, и использование его для размещения файлов, которые будут опубликованы. Например,
/srv/filesharing/gnunet
может быть хорошим выбором:
# install -dm775 -g gnunet -o gnunet /srv/filesharing/gnunet
Каждый пользователь, входящий в группу
gnunet
, может затем создать ссылку на него в своем домашнем каталоге,
$ ln -s /srv/filesharing/gnunet ~/Publishing
которая может быть разыменована
gnunet-publish
:
$ (cd ~/Publishing && gnunet-publish -k commons ostrom.pdf) && gnunet-fs -i
/srv/filesharing/gnunet/ostrom.pdf
Низкая пропускная способность
Для совместного использования файлов рекомендуется увеличить ограничения пропускной способности GNUnet по сравнению с довольно низкими значениями по умолчанию. Приведенный ниже пример устанавливает ограничения WAN и LAN на
unlimited
.
$ gnunet-config -s ats -o WAN_QUOTA_IN -V unlimited
$ gnunet-config -s ats -o WAN_QUOTA_OUT -V unlimited
$ gnunet-config -s ats -o LAN_QUOTA_IN -V неограниченно
$ gnunet-config -s ats -o LAN_QUOTA_OUT -V unlimited
/var/lib/gnunet/ становится слишком большим
Кэш GNUnet ограничен и не может расти бесконечно. Однако квота, зарезервированная для него по умолчанию, не маленькая (в настоящее время 5 ГБ). Чтобы уменьшить это число, вы должны присвоить желаемое значение ключу
QUOTA
в секции
datastore
раздела
/etc/gnunet.conf
.
/etc/gnunet.conf
...

[datastore]
...
КВОТА = 2 ГБ
...
/var/lib/gnunet/ остается после деинсталляции
Каталог
/var/lib/gnunet/
- это домашний каталог системного пользователя
gnunet
, который остается после деинсталляции GNUnet. Если вы уверены, что больше никогда не будете использовать GNUnet, запустите:
# userdel -r gnunet
# groupdel gnunetdns
Warning
Идентификатор и вся информация о сети, хранящаяся в совокупности у текущего пира, будет уничтожена - это не повлияет на файлы, явно загруженные по другим путям.
Сеть слишком статична
По умолчанию GNUnet загружает себя, используя файл
hostlist
, загруженный из интернета (обычный
https
) каждый раз, когда подключается к сети. Если вы хотите указать ему изучать и запоминать списки хостов, предоставленные другими пользователями, вам нужно добавить опцию
-e
к ключу
OPTIONS
в разделе
hostlist
в
/etc/gnunet.conf
. Также доступны дополнительные опции.
/etc/gnunet.conf
...

[hostlist]
...
# Опции:
# -p : предоставить список хостов в качестве серверов списка хостов.
# -b : загрузка с использованием настроенных серверов списка хостов
# -e : включить обучение рекламируемых хостлистов
# -a : рекламировать список хостов другим серверам
OPTIONS = -b -e -a -p
...
Советы и рекомендации
Запуск демона от имени текущего пользователя в многопользовательской установке
После свежей установки отсутствует файл конфигурации пользователя. В многопользовательской установке он используется практически только (при необходимости) для
start
и
stop
gnunet.service
user unit
во время работы системного демона, поэтому обычно достаточно создать минимальный конфигурационный файл, содержащий только:
~/.config/gnunet.conf
[arm]
START_SYSTEM_SERVICES = NO
START_USER_SERVICES = YES
Если не установить
START_SYSTEM_SERVICES
в
NO
, запуск демона от имени текущего пользователя при запущенном системном демоне приведет к дублированию процессов.
Более подробную информацию смотрите в
Многопользовательская настройка
, в руководстве.
Кнопка для включения и выключения GNUnet
Если вы используете
GNOME
, вы можете установить расширение оболочки Systemd Manager (
gnome-shell-extension-systemd-manager
AUR
) и добавить в него GNUnet:
$ dconf write /org/gnome/shell/extensions/systemd-manager/systemd \
	''['\''{'name''':'GNUnet system service'','service'':'gnunet.service'','type''':'system'}'\'','\''{'name'':'GNUnet user service'','service'':'gnunet.service'','type''':'user'}'\'']'.
(После установки расширения вам может потребоваться перезапустить сессию).
Однопользовательская установка
Пир GNUnet может быть запущен и от текущего пользователя без запуска системной службы
gnunet
. Для однопользовательской установки убедитесь, что
START_SYSTEM_SERVICES
и
START_USER_SERVICES
установлены в
YES
в
~/.config/gnunet.conf
:
~/.config/gnunet.conf
[arm]
START_SYSTEM_SERVICES = YES
START_USER_SERVICES = YES
Чтобы запустить пир от имени текущего пользователя,
запустите
gnunet.service
user unit
. Чтобы остановить пир, запущенный от имени текущего пользователя,
stop
блок пользователя
gnunet.service
.
За дополнительной информацией обращайтесь к
главе об однопользовательской настройке в руководстве
.
Публикация обновляемых файлов
Существует возможность публикации "обновляемых" файлов (т.е. файлов, для которых вы можете захотеть выпустить другую версию в будущем, рекламируя, что это тот же самый файл - только обновленный - а не другой). Чтобы выпустить обновляемый файл, необходимо создать "я" и использовать его для подписи файла. Это единственный способ гарантировать, что злонамеренная сторона не сможет поставлять поддельные обновления.
Для создания ego доступна утилита
gnunet-identity
,
для которой
gnunet.service
user unit
должна быть
start
" (возможно, вместе с системной единицей
gnunet.service
- см.
#Запуск демона от имени текущего пользователя в многопользовательской установке
). Например, чтобы создать эго с именем "caroline",
запустите
пользовательский блок
gnunet
и запустите:
$ gnunet-identity -C caroline
Примечание
Если позже вы решите стереть это эго, вы можете запустить
gnunet-identity -D caroline
.
Теперь, когда вы создали эго, вам нужно указать строку, которая идентифицирует текущий релиз файла (опция
-t
), и
уже сейчас строку, которая будет идентифицировать вашу планируемую следующую версию
(опция
-N
) - последнюю вам придется запомнить. Для обеих строк возможно любое содержание.
$ gnunet-publish -P caroline -t 'diary version 1' -N 'diary version 2' -k 'diary' until-2020/my_diary.md
Публикация `/srv/filesharing/gnunet/until-2020/my_diary.md' выполнена.
URI - `gnunet://fs/chk/AF26...'.

URI пространства имен - `gnunet://fs/sks/V3TK.../diary version 1'.
Когда обновление будет готово, вам придется использовать ту же строку, которую вы выбрали для него ранее ("дневник версии 2" в нашем примере), возможно, сопроводив ее другим именем для следующего обновления (если это применимо):
$ gnunet-publish -P caroline -t 'diary version 2' -N 'diary version 3' -k 'diary' until-2021/my_diary.md
Публикация `/srv/filesharing/gnunet/until-2021/my_diary.md' выполнена.
URI - `gnunet://fs/chk/5Y7V...'.

URI пространства имен - `gnunet://fs/sks/V3TK.../diary version 2'.
Если вы решили, что обновление будет последним, опустите опцию
-N
(не позволит никаких последующих обновлений).
Обратите внимание, что обновление с помощью GNUnet не сделает старое содержимое недоступным, GNUnet просто позволяет издателю указать пользователям на более свежие версии.
Запуск и остановка GNUnet без systemd
GNUnet поставляется с собственной системой управления демонами,
Automatic Restart Manager
(ограничен службами GNUnet).
Для запуска системных служб вручную без
systemd
запустите утилиту
gnunet-arm
от имени пользователя
gnunet
:
$ sudo -u gnunet gnunet-arm -c /etc/gnunet.conf -s
Чтобы завершить работу системных служб вручную без systemd, запустите:
$ sudo -u gnunet gnunet-arm -c /etc/gnunet.conf -e
Чтобы запустить пользовательские службы вручную без systemd, запустите утилиту
gnunet-arm
от имени текущего пользователя
:
$ gnunet-arm -c ~/.config/gnunet.conf -s
Чтобы завершить пользовательские службы вручную без systemd, запустите:
$ gnunet-arm -c ~/.config/gnunet.conf -e