GNUnet (Русский) - ArchWiki

Jump to content

Перевод этой статьи или раздела не отражает оригинальное содержание.

Причина: Невычитанная копипаста из переводчика DeepL. (Discuss)

Related articles

- Tor
- I2P
- Freenet

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'`).

После публикации файла невозможно получить ключевые слова, по которым файл был проиндексирован (т.е. обратный поиск). Однако всегда можно добавить к нему дополнительные ключевые слова.

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

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-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

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-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

Categories:

- Anonymity networks (Русский)
- File sharing (Русский)
- Virtual Private Network (Русский)

Hidden category:

- Pages or sections flagged with Template:Bad translation (Русский)