Я следил за развитием проекта Freenet много лет, периодически возвращаясь к нему. В последний раз я запустил его месяц назад и после месяца использования могу сказать, что он работает гораздо быстрее, чем раньше. Сейчас я расскажу о том, как его использовать, и о том, как я обошёл кое-какие проблемы при размещении контента.
Обзор
В сети Freenet нет динамических серверов и никто не хостит сайты. Это хранилище данных, в которое пользователи размещают данные, после чего эти данные доступны всем, у кого есть ключ. Freenet, по сути – большая распределённая таблица хэшей.
Узлы сети резервируют место на диске и пользователи выбирают, какие данные хранить по ключу. Размещение данных в хранилище распределяет их по разным узлам, и обычно данные не хранятся на вашем узле. Запрос данных отправляется в сеть, и данные переходят на ваш узел. Используется система, которая позволяет восстанавливать данные. Даже если M из общего числа N сегментов данных потеряны, их всё равно можно восстановить. Данные поступают в сеть, и наименее используемые данные исчезают из неё. Данные в хранилище нельзя редактировать. Пока они находятся в хранилище, они всегда связаны с одним ключом.
Запросы данных из Freenet происходят по ключу. Ключей есть несколько видов:
KSK@somewhere
KSK-ключ выбирается тем, кто добавляет данные. 'somewhere' может принимать любое значение. Это позволяет создавать ключи с использованием фраз или слов, которые можно запомнить. Минус в том, что с этими ключами можно повторно внести другие данные. Данные, которые вы получите по определённому ключу, зависят от того, какие данные были внесены при помощи этого ключа.
CHK@...
У CHK-ключей есть часть после @, которая вычисляется на основе содержимого. У одинаковых данных одинаковые ключи. Если данные, хранящиеся по CHK-ключу, ушли из сети, их всегда можно «вылечить», вставив тот же самый файл. Это как если бы в интернете можно было починить ошибку «404», закачав нужную страницу заново.
SSK@...
SSK-ключ – криптоключи, которые получаются разные при каждом внесении данных. Их нельзя «подлечить», когда данные ушли из сети. Новая вставка породит новый ключ.
USK@.../foo/1
USK-ключ позволяет обновлять контент. Номер на конце увеличивается каждый раз при обновлении данных. При запросе данных ищутся и возвращаются данные с наибольшим номером. Это полезно для хостящихся в сети блогах с обновляемым контентом.
Настройка
Для наибольшей эффективности софт freenet должен работать круглосуточно. Я следовал инструкциям с офсайта по установке его на сервере, и доступа к сети с клиентских машин через SSH-туннель. Следующая команда настраивает туннели через локальные порты на сервер, чтобы к ним можно было обращаться локально:
ssh -L 8888:127.0.0.1:8888 -L 8080:127.0.0.1:8080 -L 9481:127.0.0.1:9481 me@myserver.local
Порт 8888 – для прокси, через которую вы получаете доступ к данным из браузера. Порт 8080 занят системой сообщений, если её установить. Порт 9481 служит для API интерфейса, который испльзует jSite
Новая нода начинает работать через несколько часов после установки. Изначально она работает медленно, но постепенно ускоряется.
Соцсети во Freenet
В сети есть возможность для соцсетей. Есть web of trust, распределённая анонимная электронная почта, микроблоггинг, форумы и IRC. Об их установке написано в инструкции. Настройка web of trust и установка Sone для микроблоггинга – хороший старт для использования Freenet в социальных целях.
Можно создать сколько угодно идентификаторов и переключаться между ними. Я использую Freenet неанонимно, и моя персона связана с тамошней деятельностью. Но при желании можно оставаться анонимным.
Сайты
Сайты обычно хранятся по USK-ключам, чтобы их можно было обновлять. Проще всего пользоваться специальным софтом, который вставляет директорию, содержащую HTML-файлы по USK-ключу. Я использую jSite. Мой блог зеркалится в freenet по ключу USK@1ORdIvjL2H1bZblJcP8hu2LjjKtVB-rVzp8mLty~5N4,8hL85otZBbq0geDsSKkBK4sKESL2SrNVecFZz9NxGVQ,AQACAAE/bluishcoder/-7.
Обратите внимание на отрицательное число в конце. Это приводит к тому, что при поиске сеть начинает поиск с ревизии 7, и оттуда уже ведёт отсчёт в поисках самого нового обновления. Сайты можно заносить в закладки в freenet прокси, и они будут обновляться автоматически.
Проблемы при зеркалировании блога во freenet включали наличие в текстах абсолютных ссылок на другие страницы. Прямое копирование во freenet в таком случае не сработало бы – в сети ключ является частью URL. Поэтому ссылка на страницу выглядит как /USK@longhash/bluishcoder/7/2014/12/17/changing-attributes-in-self-objects.html. Внутренняя ссылка, начинающаяся с /, не сработает. потому что в ней нет префикса USK. В результате я последовал вот этому совету с github. Мой файл _config.yml содержит следующие настройки:
baseurl: "file:///some/path/bluishcoder/_site"
#baseurl: /USK@longlonghash/bluishcoder/7
#baseurl: "http://bluishcoder.co.nz"
У всех моих внутренних ссылок есть префикс baseurl. К примеру:
[link to a video]({{site.baseurl}}/self/self_comment.webm)
При генерации блога это заменяется на baseurl entry из _config.yml. Я генерю мой блог с соответствующим baseurl, копирую это на веб-сервер, а затем генерю блог с baseurl, подходящим для freenet и закачиваю его в сеть через jSite. Довольно утомительно, но работает.
Уточню, что сайты во freenet не могут использовать JavaScript, а часть контента фильтруется по соображениям безопасности. Лучше всего работают чистые HTML и CSS.
Сайты с обилием фоток
По ключу USK@2LK9z-pdZ9kWQfw~GfF-CXKC7yWQxeKvNf9kAXOumU4,1eA8o~L~-mIo9Hk7ZK9B53UKY5Vuki6p4I4lqMQPxyw,AQACAAE/pitcairnisland/3 у меня есть сайт с обилием фоток. Проблема с ним состоит в том, как сохранить фотки и не дать им выпасть из сети.
Если на главной странице есть превьюшки, то они остаются в доступе, потому что к ним случаются обращения. К сожалению, полные картинки периодически выпадают из сети. В этом случае рекомендуется вставлять в страницу большую картинку, просто меняя её видимый размер через атрибуты тэга IMG.
Я пытался найти некий компромиссный подход. К сожалению, предзагрузка картинок в CSS работает плохо с фильтром контента freenet. В результате я выработал метод скрытого DIV в конце страницы, в котором содержатся все полноразмерные картинки. Их не видно, но они подкачиваются при посещении. Минус в том, что браузер информирует о загрузке страницы, хотя весь видимый контент уже загружен. Надеюсь, что в будущем проблемы с обработкой предзагрузки в CSS будут решены.
Итог
Пока что я только зеркалил свой блог в сеть. Ещё я встретил программу «биткоин через freenet», которая зеркалит цепочку блоков в сеть и позволяет совершать транзакции. Кажется, что freenet будет полезна для некоторых вещей, для которых используется Tor, без необходимости поддержания какого-то сервера, который могут накрыть.
Здесь можно посмотреть на PDF с подробным описанием сети для интерсующихся.
Мой интерес к ней заключался в исследовании вопроса зашифрованного и бессерверного хранения альтернатив для сервисов типа Twitter, Facebook, электропочты и др. Если вас не очень волнует долгий отклик и изменение
Автор: SLY_G