TL;DR: IPFS позволяет хостить статические сайты распределённо, доступ к которым можно осуществлять через публичные кеширующие гейты (прозрачные реверс-прокси) в интернете, без необходимости устанавливать программу посетителю. Такие сайты можно раздавать без маршрутизируемого («белого») статического IP-адреса (будет работать за NAT), они остаются работоспособными при кратковременном (несколько часов) отсутствии раздающих, за счет кеша на гейтах. К гейтам по желанию можно привязать свой домен, причём добавить DNS-записи можно на несколько гейтов одновременно, для повышения надёжности и балансировки нагрузки. Сайт могут скачать другие пользователи IPFS и помочь с раздачей.
IPFS отлично подходит для статических блогов, простых сайтов, файловых архивов (в качестве замены Bittorrent), а также просто для единовременной передачи больших файлов без предварительной загрузки их на какой-либо сервис.
Что такое IPFS?
IPFS — децентрализованная пиринговая система передачи файлов, по принципу работы похожая на BitTorrent, но с возможностью доступа через HTTP, для Web. Все скачиваемые пользователем файлы временно кешируются IPFS-демоном и раздаются другим пользователям, запрашивающим их. Важные файлы можно «прикрепить» (pin) к IPFS-демону, тогда они не исчезнут из кеша.
Добавляемые в IPFS файлы получают глобальные хеши-идентификаторы, которые не меняются при повторном добавлении файла. Адресация в сети осуществляется по идентификаторам контента (CID), внутри которых содержится мультихеш. В контексте IPFS, они указывают на неизменяющийся или изменяющийся файл, директорию, метаданные или симлинк.
На текущий момент развития, проект полноценно работает только со статическими данными, но уже имеется экспериментальная поддержка протокола типа издатель-подписчик (publish/subscribe), а также реализация IPFS на Javascript, работающая в браузере, что в перспективе позволит создавать динамические сайты (например, блоги с комментариями) с возможностью взаимодействия в реальном времени (например, чаты).
Одно из серьезных преимуществ IPFS в сравнении с другими подобными технологиями — доступ к ресурсам из интернета через гейты, которые устанавливают компании и энтузиасты технологии. Они позволяют просматривать сайты и скачивать файлы без установки IPFS на компьютер. Самый большой гейт — от Cloudflare, он также позволяет выпустить бесплатный HTTPS-сертификат для домена.
Зачем нужен IPFS, и где его применять?
Сеть позволяет эффективно, распределённо и децентрализованно раздавать и скачивать данные, в том числе из браузера. Я вижу следующие реальные применения проекту:
Бесплатный бомж-хостинг статических веб-сайтов на домашнем компьютере, без выделенного IP-адреса (за NAT), без домена или с доменом;
Не подконтрольный цензуре хостинг сайтов повышенного риска, которые могут быть заблокированы государством или сторонними компаниями в рамках DMCA;
Раздача периодически меняющихся или добавляющихся данных, которые нельзя эффективно раздать через Bittorrent (придется постоянно пересоздавать torrent-файл и просить всех раздающих скачивать его заново, что ведёт к фрагментации сидов);
Альтернатива CDN, не требующая настроек на стороне «CDN-провайдера».
Как создать сайт в IPFS?
Это проще, чем с обычным хостингом! Рассмотрим бомж-хостинг простого статического сайта.
Самый простой вариант — с использованием графической утилиты Siderus Orion.
Устанавливаем утилиту, запускаем, нажимаем File → Add Directory, выбираем директорию с файлами сайта.
Через какое-то время появится окно с информацией импортированного контента:
Переходим во вкладку «Files», нажимаем правой кнопкой мыши на хеш → Open in browser:
Чтобы сделать веб-сайт доступным по домену https://uncleoutrage.com/, а не по длинной и некрасивой ссылке, необходимо добавить несколько DNS-записей:
A и AAAA-записи, указывающие на IP-адрес гейта, либо CNAME-запись, указывающую на доменное имя гейта;
TXT-запись "_dnslink", с содержимым вида «dnslink=/ipfs/HASH».
В моём случае, я добавил A и AAAA-записи, указывающие на IP-адреса cloudflare-ipfs.com, и TXT-запись "_dnslink.uncleoutrage.com":
uncleoutrage.com. IN A 104.18.252.167
uncleoutrage.com. IN A 104.18.255.167
uncleoutrage.com. IN AAAA 2400:cb00:2048:1::6812:fda7
uncleoutrage.com. IN AAAA 2400:cb00:2048:1::6812:40a8
_dnslink.uncleoutrage.com. IN TXT "dnslink=/ipfs/QmU8rJjkXbfkPqEE3Dr8GiUMKF1vPnnNUKWdaB5DsZDfJ7"
У Cloudflare можно получить HTTPS-сертификат для привязанного домена, его нужно запросить на специальной странице получения сертификата.
Если вам не нужна поддержка HTTPS, вы можете добавить сразу несколько A/AAAA-записей на разные гейты, актуальный список рабочих гейтов доступен на форуме проекта.
В случае обновления сайта, вам придётся обновить и TXT-запись домена.
Как не обновлять TXT-запись при обновлениях сайта?
IPFS позволяет сгенерировать специальный статичный хеш-идентификатор, указывающий на изменяющийся хеш — IPNS. В графическом клиенте достаточно нажать File → Publish to IPNS, и указывать в ссылке или в TXT-записи домена свой peer ID, а не хеш, полученный при добавлении директории. Например:
Однако, IPNS-запись нужно обновлять (публиковать) раз в несколько часов вручную, и резолвятся они заметно медленнее /ipfs/.
Заключение
Если вы хотите узнать больше об IPFS — читайте цикл отличных статейivan386. Они гиковские, и в них почти не рассказывается, зачем обычному человеку может потребоваться IPFS (иначе этой статьи бы не было).
Хотите помочь в раздаче IPFS-сайтов, или быть информированным о том, что домен привязан к IPFS-гейту? Устанавливайте браузерное дополнение (для Firefox, для Chrome), переадресующее IPFS-сайты на вашу локальную ноду.
Антизапрет уже несколько месяцев раздает терабайт PAC-файлов в сутки через IPFS, с использованием гейта Cloudflare. Работает стабильно, значительно экономит трафик сервера.