GNUnet (Русский)
GNUnet - это основа для безопасной и анонимной одноранговой сети, которая не использует никаких централизованных или иным образом доверенных служб. В настоящее время фреймворк предлагает защищенный от цензуры файлообменник, обмен сообщениями, VPN, GNS (децентрализованная версия DNS) и многое другое.
См. также https://gnunet.org/en/use.html и Wikipedia:GNUnet.
Установка
GNUnet можно установить с помощью пакета gnunetAUR. Последняя экспериментальная версия доступна как gnunet-gitAUR.
Начало работы
Конфигурация 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-fuseAUR для монтирования удаленных каталогов из сети 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'
).
После публикации файла невозможно получить ключевые слова, по которым файл был проиндексирован (т.е. обратный поиск). Однако всегда можно добавить к нему дополнительные ключевые слова.
Обратите внимание, что может пройти некоторое время (до нескольких часов), пока ваши коллеги смогут увидеть ваши свежезагруженные файлы.
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-gtkAUR.
Messenger GTK
В настоящее время разрабатывается несколько графических пользовательских интерфейсов для общения в сети GNUnet. Один из них - Messenger GTK (messenger-gtkAUR, или messenger-gtk-gitAUR для версии разработки), удобный для мобильных устройств GTK графический пользовательский интерфейс для общения с пользователями GNUnet. См. также Cadet GTK (cadet-gtkAUR), предыдущее приложение для чата, написанное теми же авторами.
Веб-интерфейс пользователя
Веб-интерфейс для GNUnet существует и доступен как gnunet-webui-gitAUR.
re:claimID
re:claimID - это децентрализованный сервис Identity Provider (IdP), построенный на базе системы имен GNU. Он позволяет пользователям безопасно обмениваться личной информацией с веб-сайтами, используя стандартизированные протоколы (OpenID Connect).
Для пользователей re:claimID предлагает расширение для Firefox и расширение для Chromium для управления идентификацией re:claimID в браузере (необходимо установить пакет gnunetAUR).
После установки расширения можно будет добавить новую личность в локальный экземпляр re:claimID и добавить к ней некоторые атрибуты, посетив сайт https://ui.reclaim/ (ссылка не будет работать без установленного расширения).
За дополнительной информацией обращайтесь к руководству.
GNU Taler
GNU Taler - это система микротранзакций и электронных платежей, построенная поверх GNUnet. В отличие от других распределенных платежных систем Taler основана не на блокчейне, а на слепых подписях.
Для получения дополнительной информации обратитесь к официальной документации. См. также пакеты syncAUR, taler-exchangeAUR, taler-mdbAUR, taler-merchantAUR и taler-twisterAUR.
GNU Anastasis
GNU Anastasis - это протокол и реализация, позволяющие пользователям надежно хранить основные секреты в открытом наборе провайдеров условного депонирования и восстанавливать эти секреты в случае потери их оригинальных копий. Anastasis доступен на AUR (anastasisAUR и anastasis-gtkAUR). За дополнительной информацией обращайтесь к сайтам 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
Сеть слишком статична
По умолчанию 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-managerAUR) и добавить в него 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