Примерно год назад я писал об этой сети ZeroNet — Распределенные сайты через Bittorrent и Bitcoin тогда еще хабр был то
Внутри:
- Что это такое этот ваш ZeroNet
- Что изменилось за год
- Почему она полезно с точки зрения защиты от цензурирования
- Почему она полезна в качестве импорто замещения и «защиты сувереннитета»
- Что есть в сети?
Что это такое этот ваш ZeroNet
ZeroNet — распределенная сеть, она работает следующим образом: На вашем устройстве запускается Python сервер который соединяется с такими же пользователем как и вы и слушает порт 43110 на 127.0.0.1 куда вы должны зайти своим браузером.
Под капотом же используются технологии Bittorrent Bitcoin и DHT.
Руссий форум в сети
Чуть подробнее:
Каждый сайт в сети представляет из себя папку с содержимым и файлом манифеста который подписан вашим публичным ключем, только обладатель приватного ключа имеет возможность обновлять контент в дальнейшем. (Не считая сайтов с мульти-подписью но о них ниже)
Подключение к сайтам происходит следуюшим образом: Вам требуется знать его hash адрес или же .bit домен, как только вы его попытаетесь открыть (например http://127.0.0.1:43110/1HeLLo4uzjaLetFx6NH3PMwFP3qbRbTf3D) будет выполнено подключение к торрент трекеру и найдены пиры которые раздают этот сайт, после чего пойдет его загрузка. (В дальнейшем планируется работа и через DHT но в данный момент — нет)
А обновление контента?
Обладатель сайта может опубликовать новую версию сайта и если она подписана валидным ключем — она будет распространена между пирами.
Блоги в сети
Что изменилось за год
А теперь о главном — что же изменилось за год.
В прошлом посте люди критиковали сеть за то, что она не распределенная — действительно, год назад такие ресурсы как форума работали по средствам отправки get запроса на сервер а сервер уже обновлял контент для всех остальных.
Сейчас всё по другому.
Сайт в сети может быть multi-sig (т.е иметь возможность содержать контент от разных приватных ключей т.е разных пользователей)
Для этого в манифесте к сайту указывается, что запись в определенную папку могут иметь пользователи со своими ключами а не только обладатель основного ключа.
Как это выглдит внутри? — Для начала нам нужно получить свою подпись, сейчас используется ZeroID — ресурс закрепляющий соответствие ника и ключа, никто кстати не мешает клонировать его сделать свой, но мы будем рассматривать именно его.
После получения подписи вы «Входите» на сайт предоставляя свою подпись, а при написании, скажем, поста на форуме вы подписываете контент вашей подписью и рассылаете между пирами с вашей подписью.
Пиры получают контент и сверяют действительно ли вы отправили изменения (на основе ZeroID) и если это так — принимают изменения.
Для каждого сайта можно настроить свои ограничения и привелегии, но это не будет рассмотрено в этом посте.
Почему она полезно с точки зрения защиты от цензурирования / Почему она полезна в качестве импорто замещения и «защиты сувереннитета»
Эти два пункта очень сильно связаны, как нb странно. В данный момент сеть имеет только 1 центральную часть которая будет ликвидирована в скором времени — торрент трекер, в ближайшее время (по словам разработчика) будет переход на DHT сеть, что позволит быть независимым от внешних угроз. Причем, эти самые угрозы могут быть как внешние так и внутренние.
Что есть в сети?
Если вы решили посмотреть на то как работает сеть — то вам стоит загрузить клиент, доступен он на официальном сайте zeronet.io
Если OS отличается от windows, то потребуется клонировать репозиторий и запустить скрипт, для windows же всё проще, скачиваем, разархивируем и запускаем.
Некоторые ресурсы сети:
Тот самый пиратский Play из-за которого о сети недавно писали на многих зарубежных ресурсах http://127.0.0.1:43110/1PLAYgDQboKojowD3kwdb3CtWmWaokXvfp
ZeroTalk — крупный форум http://127.0.0.1:43110/Talk.ZeroNetwork.bit
Отечественный рускоговорящий аналог большого форума http://127.0.0.1:43110/1Apr5ba6u9Nz6eFASmFrefGvyBKkM76QgE
Блог разработчика сети с changelog'ом http://127.0.0.1:43110/Blog.ZeroNetwork.bit
Имиджборда http://127.0.0.1:43110/0chan.bit
Блог о разработке на русском http://127.0.0.1:43110/blog.gomzik.bit
PS В прошлой стате я в качестве теста создавал пробный сайт в сети и он как оказывается всё еще работает…
Комментарии (47)
robux
05.03.2016 14:46А у ZeroNet есть какая-то поисковая система? Какой-нибудь Zeroogle.bit?
Вообще, содержит ли ZeroNet API в себе функции поиска по пирам?
Если ничего этого нет, то есть ли хотя бы какие-нибудь каталоги, как раньше был "Rambler каталог" или типа того?
sim-dev
05.03.2016 16:07+5Сдается мне, история идет по кругу: интернет начинался с конференций Fido, и теперь снова возвращается к чему-то аналогичному: выглядит все пугающе-загадочно, все на английском, привычные стереотипы поведения "пользователя" не работают…
DjOnline
05.03.2016 19:45+1Так Fido и было p2p.
robux
06.03.2016 16:14Нет, фидо было FTN — а там уже администраторы:
Основные особенности технологии: Иерархическая адресация (зоны, сети, узлы и поинты), что предполагает наличие в такой сети административной иерархии (координаторов разных уровней).
В кошерной P2P сети никакой иерархии быть не должно, соответственно, никаких "координаторов", "администраторов" и "модераторов".bormotov
08.03.2016 19:58иерархия была нужна по простой причне — звонить между телефонными зонами было недешево. Плюс, некоторые администрирования (адресация, например) проще, если есть иерархия.
Но в общем случае, на уровне транспорта, любой узел мог обмениваться почтой с любым узлом.
А необходимость в координаторах и модераторах появится сама.
kvaps
05.03.2016 16:41в манифесте к сайту указывается, что запись в определенную папку могут иметь пользователи со своими ключами а не только обладатель основного ключа.
Все очень интересно, но как с помощью данного подхода можно организовать хотя бы простейшую файловую бд? Как она будет вести себя при обновлении информации одновременно на разных хостах — как же репликация?kvaps
05.03.2016 16:54Отвечу сам на свой вопрос:
Можно вести отдельную бд для каждого пользователя и какой-нибудь файл с мета-информацией, например когда было последнее изменение от пользователя. Потом движком проверять эти файлы, и строить из этого всего ответ на трубуемый запрос.
Например если мы говорим о форуме:
Запрос от пользователя будет содержать информацию о том с какой и по какую дату подгрузить сообщения, и движку придется сканировать только те файлы, в которых хранится метаинформация об измении за это время.
В дальнейшем можно будет обязать движок вести свою отдельную бд с метаданными об изменении от пользователей.
Еще бд, которая будет отображать поправки модераторов, удаленные сообщения и т.п.
Интересно, насколько данная реализация будет накладной по ресурсам? — Есть идеи получше?shifttstas
05.03.2016 16:58+2Там по другому сделано, контент пользователей — json файлы при добавлении они попадают а sql базу доступную из JavaScript, что позволяет удобно выдирать нужные данные.
kvaps
05.03.2016 16:59Потом движком проверять эти файлы, и строить из этого всего ответ на трубуемый запрос.
Даже нет, проверять файлы изменений от пользователей, и строить из этого одну общую бд — вот оно! :)
zim32
05.03.2016 17:17А по каким портам траф ходит? Могут забанить порты?
akhmelev
05.03.2016 19:14По-моему это же всё тот же торрент, все порты + оба транспортных протокола, так что не забанят — проще выключить всё насовсем :)
А фиксирован только порт 43110 внутри локалхоста, но это уж точно не проблема.
kreep
05.03.2016 20:19Правильно ли я понимаю, что перед тем как зайти на какой-то сайт, мне нужно его полностью скачать?
shifttstas
05.03.2016 20:41нет, у многих сайтов некоторый контент (по выбору админа) может быть опциональным к загрузке и загружатся по запросу а не сразу, пример — 0chan
gaelpa
05.03.2016 23:49+1Развивая тему, а какие решения есть для этой сети в вопросе освобождения свободного места?
Допустим мне сайт еще нужен, но сожрал уж больно много диска. Удалить-перекачать? Что-то более интеллектуальное?
И как в этой сети с историей версий сайта?
ComodoHacker
05.03.2016 20:29После получения подписи вы «Входите» на сайт предоставляя свою подпись, а при написании, скажем, поста на форуме вы подписываете контент вашей подписью и рассылаете между пирами с вашей подписью.
То есть никакой анонимности?shifttstas
05.03.2016 20:41Никто не мешает сделать 10001 учетку ну или сделать сайт который не будет это требовать.
akaluth
05.03.2016 21:32+1Очень интересен такой момент: каким образом в этой и подобных системах сообщения на тех же форумах выстраиваются в хронологическом порядке? На честном слове по предоставленному юзером таймштампу?
shifttstas
05.03.2016 21:50+1Точно не подскажу, но помню что толи уже сейчас или в скором будущем будет проверка на некорректное время через последние полученные блоки в mail/id
Master_Dante
06.03.2016 20:08-6После слова Питон дальше статью не читал… Думаю что сеть не получит распространения и развития как и i2p т.к. написана на java. Рекомендую переписать все на C# Core. И еще адреса типа http://127.0.0.1:43110/ это не айс. Должно быть что то типа zero://1HeLLo4uzjaLetFx6NH3PMwFP3qbRbTf3D Так же продумать не статичный контент, иначе это не сайт а набор файлов страниц т.е. владелец ресурса должен иметь возможность взаимодействия по ajax. Очень важна так же сетевая анонимность, вычислить раздающего файл должно быть в принципе невозможно. Всегда должно быть неизвестно является ли узел A источником файла или он просто прокси.
amarao
09.03.2016 11:31+1Не то, чтобы я сильно одобрял использование питона, но C# в качестве роутера такая же нелепость, как и java. Гигантский распухший рантайм, виртуальная машина, которая порт от ячейки памяти отличить не может а про существование cache line у процессора даже и не в курсе...
gurinderu
07.03.2016 00:05Как происходит установление соединения если оба клиента находятся за nat?
shifttstas
07.03.2016 02:55По аналогии с торрентами
gurinderu
07.03.2016 12:00Т.е два клиента за nat'ом друг с другом соединиться без третьего лица с белым IP не смогут?
И насколько я понимаю есть трекер, который опрашивается, чтобы получить обновления сети?Bal
08.03.2016 12:30В общем случае два серых IP (с непроброшенными портами NAT) и не могут соединиться друг с другом без третьего белого в принципе. Только в некоторых случаях (не гарантированно) могут поддерживать соединение, однажды установленное про посредничестве третьего белого.
gurinderu
08.03.2016 21:57В том-то и дело, что сеть получается не распределенная и все равно нужен какой-то relay.
shifttstas
09.03.2016 15:19гм, ну это может решить IPv6
gurinderu
09.03.2016 16:22Внедрение IPv6 вряд ли поможет. Я думаю крупной корпорации нет смысла иметь кучу IP на каждого сотрудника и как был у них nat, так и останется.
shifttstas
14.03.2016 18:26А причем тут компании? для конечных пользователей v6 выгоден ну и для провайдеров тоже, если оборудование умеет
lostmsu
07.03.2016 08:31+3Все сайты на http(s)://127.0.0.1:someport/siteaddress — очень плохая идея, потому что ломает Cross Site Request Policy, который должен изолировать сайты друг от друга.
Ku6ep
07.03.2016 16:27Поставил попробовать, после получения ID постоянно вываливается "Message wrapper_nonce error, please report!" и ничего не происходит, пока не закроешь окно и не зайдешь на 127.0.0.1 по новой.
Bal
07.03.2016 22:13Аналогично. Давно пытался пощупать, так и не заработало. Сейчас проверил — ошибка та же самая.
shifttstas
08.03.2016 14:05Опытным путем было выяснено, это из-за frigate или других расширений https://github.com/HelloZeroNet/ZeroNet/issues/306
prefrontalCortex
Кстати, демон на питоне под виндус авторы могли бы и виндовой службой запускать, не так уж это и сложно.
shifttstas
А зачем? так он сидит в трее и имеет управление...
icCE
Так как это более правильно и да, от того, что он будет службой, это не значит — что он потеряет управление и не сможет сидеть в трее.
shifttstas
может кто issue на гитхабе заведет тогда?
EvilPartisan
Да и под мак надо подобное запилить. Ясное дело что разрабам не до того, но приложение надо приводить к общепринятому формату в данной платформе, чтобы каждая домохозяйка справилась, а не только гики.