image

Примерно год назад я писал об этой сети ZeroNet — Распределенные сайты через Bittorrent и Bitcoin тогда еще хабр был торт и в комментариях были обсуждения о том насколько сеть распределена. Да, год назад действительно были вопросы, но теперь всё изменилось.

Внутри:
  • Что это такое этот ваш ZeroNet
  • Что изменилось за год
  • Почему она полезно с точки зрения защиты от цензурирования
  • Почему она полезна в качестве импорто замещения и «защиты сувереннитета»
  • Что есть в сети?


Что это такое этот ваш ZeroNet

ZeroNet — распределенная сеть, она работает следующим образом: На вашем устройстве запускается Python сервер который соединяется с такими же пользователем как и вы и слушает порт 43110 на 127.0.0.1 куда вы должны зайти своим браузером.

Под капотом же используются технологии Bittorrent Bitcoin и DHT.

image
Руссий форум в сети

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

Подключение к сайтам происходит следуюшим образом: Вам требуется знать его hash адрес или же .bit домен, как только вы его попытаетесь открыть (например http://127.0.0.1:43110/1HeLLo4uzjaLetFx6NH3PMwFP3qbRbTf3D) будет выполнено подключение к торрент трекеру и найдены пиры которые раздают этот сайт, после чего пойдет его загрузка. (В дальнейшем планируется работа и через DHT но в данный момент — нет)

А обновление контента?
Обладатель сайта может опубликовать новую версию сайта и если она подписана валидным ключем — она будет распространена между пирами.

image
Блоги в сети

Что изменилось за год

А теперь о главном — что же изменилось за год.
В прошлом посте люди критиковали сеть за то, что она не распределенная — действительно, год назад такие ресурсы как форума работали по средствам отправки 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)


  1. prefrontalCortex
    05.03.2016 14:04

    Кстати, демон на питоне под виндус авторы могли бы и виндовой службой запускать, не так уж это и сложно.


    1. shifttstas
      05.03.2016 14:09

      А зачем? так он сидит в трее и имеет управление...


      1. icCE
        05.03.2016 14:26

        Так как это более правильно и да, от того, что он будет службой, это не значит — что он потеряет управление и не сможет сидеть в трее.


        1. shifttstas
          05.03.2016 14:28

          может кто issue на гитхабе заведет тогда?


          1. EvilPartisan
            05.03.2016 17:25
            -2

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


  1. robux
    05.03.2016 14:46

    А у ZeroNet есть какая-то поисковая система? Какой-нибудь Zeroogle.bit?
    Вообще, содержит ли ZeroNet API в себе функции поиска по пирам?

    Если ничего этого нет, то есть ли хотя бы какие-нибудь каталоги, как раньше был "Rambler каталог" или типа того?


    1. shifttstas
      05.03.2016 14:49
      +3

      Есть пару местных каталогов с сайтами, есть поиск и не один


      1. GamePad64
        05.03.2016 15:17

        А что это за .bit? Оно умеет namecoin-домены?


        1. shifttstas
          05.03.2016 16:56
          +2

          Да


  1. sim-dev
    05.03.2016 16:07
    +5

    Сдается мне, история идет по кругу: интернет начинался с конференций Fido, и теперь снова возвращается к чему-то аналогичному: выглядит все пугающе-загадочно, все на английском, привычные стереотипы поведения "пользователя" не работают…


    1. rumkin
      05.03.2016 16:36
      +5

      Почему пугающе-то? Это интригующе-загадочно.


    1. DjOnline
      05.03.2016 19:45
      +1

      Так Fido и было p2p.


      1. robux
        06.03.2016 16:14

        Нет, фидо было FTN — а там уже администраторы:

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

        В кошерной P2P сети никакой иерархии быть не должно, соответственно, никаких "координаторов", "администраторов" и "модераторов".


        1. bormotov
          08.03.2016 19:58

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

          Но в общем случае, на уровне транспорта, любой узел мог обмениваться почтой с любым узлом.

          А необходимость в координаторах и модераторах появится сама.


  1. kvaps
    05.03.2016 16:41

    в манифесте к сайту указывается, что запись в определенную папку могут иметь пользователи со своими ключами а не только обладатель основного ключа.

    Все очень интересно, но как с помощью данного подхода можно организовать хотя бы простейшую файловую бд? Как она будет вести себя при обновлении информации одновременно на разных хостах — как же репликация?


    1. kvaps
      05.03.2016 16:54

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

      Например если мы говорим о форуме:
      Запрос от пользователя будет содержать информацию о том с какой и по какую дату подгрузить сообщения, и движку придется сканировать только те файлы, в которых хранится метаинформация об измении за это время.

      В дальнейшем можно будет обязать движок вести свою отдельную бд с метаданными об изменении от пользователей.
      Еще бд, которая будет отображать поправки модераторов, удаленные сообщения и т.п.

      Интересно, насколько данная реализация будет накладной по ресурсам? — Есть идеи получше?


      1. shifttstas
        05.03.2016 16:58
        +2

        Там по другому сделано, контент пользователей — json файлы при добавлении они попадают а sql базу доступную из JavaScript, что позволяет удобно выдирать нужные данные.


        1. kvaps
          05.03.2016 17:00

          Ну вот, только додумался :)


      1. kvaps
        05.03.2016 16:59

        Потом движком проверять эти файлы, и строить из этого всего ответ на трубуемый запрос.

        Даже нет, проверять файлы изменений от пользователей, и строить из этого одну общую бд — вот оно! :)


        1. shifttstas
          05.03.2016 17:09

          Так оно и работает :)


  1. zim32
    05.03.2016 17:17

    А по каким портам траф ходит? Могут забанить порты?


    1. akhmelev
      05.03.2016 19:14

      По-моему это же всё тот же торрент, все порты + оба транспортных протокола, так что не забанят — проще выключить всё насовсем :)
      А фиксирован только порт 43110 внутри локалхоста, но это уж точно не проблема.


  1. kreep
    05.03.2016 20:19

    Правильно ли я понимаю, что перед тем как зайти на какой-то сайт, мне нужно его полностью скачать?


    1. shifttstas
      05.03.2016 20:41

      нет, у многих сайтов некоторый контент (по выбору админа) может быть опциональным к загрузке и загружатся по запросу а не сразу, пример — 0chan


      1. gaelpa
        05.03.2016 23:49
        +1

        Развивая тему, а какие решения есть для этой сети в вопросе освобождения свободного места?
        Допустим мне сайт еще нужен, но сожрал уж больно много диска. Удалить-перекачать? Что-то более интеллектуальное?
        И как в этой сети с историей версий сайта?


        1. shifttstas
          06.03.2016 00:36

          Ну вопрос в оптимизации и введении TTL о чем я писал разработчику


  1. ComodoHacker
    05.03.2016 20:29

    После получения подписи вы «Входите» на сайт предоставляя свою подпись, а при написании, скажем, поста на форуме вы подписываете контент вашей подписью и рассылаете между пирами с вашей подписью.

    То есть никакой анонимности?


    1. shifttstas
      05.03.2016 20:41

      Никто не мешает сделать 10001 учетку ну или сделать сайт который не будет это требовать.


  1. akaluth
    05.03.2016 21:32
    +1

    Очень интересен такой момент: каким образом в этой и подобных системах сообщения на тех же форумах выстраиваются в хронологическом порядке? На честном слове по предоставленному юзером таймштампу?


    1. shifttstas
      05.03.2016 21:50
      +1

      Точно не подскажу, но помню что толи уже сейчас или в скором будущем будет проверка на некорректное время через последние полученные блоки в mail/id


  1. Master_Dante
    06.03.2016 20:08
    -6

    После слова Питон дальше статью не читал… Думаю что сеть не получит распространения и развития как и i2p т.к. написана на java. Рекомендую переписать все на C# Core. И еще адреса типа http://127.0.0.1:43110/ это не айс. Должно быть что то типа zero://1HeLLo4uzjaLetFx6NH3PMwFP3qbRbTf3D Так же продумать не статичный контент, иначе это не сайт а набор файлов страниц т.е. владелец ресурса должен иметь возможность взаимодействия по ajax. Очень важна так же сетевая анонимность, вычислить раздающего файл должно быть в принципе невозможно. Всегда должно быть неизвестно является ли узел A источником файла или он просто прокси.


    1. grumbler66rus
      08.03.2016 11:03
      +1

      i2p реализован не только на Java, но и на C. См. purple i2p


    1. amarao
      09.03.2016 11:31
      +1

      Не то, чтобы я сильно одобрял использование питона, но C# в качестве роутера такая же нелепость, как и java. Гигантский распухший рантайм, виртуальная машина, которая порт от ячейки памяти отличить не может а про существование cache line у процессора даже и не в курсе...


  1. gurinderu
    07.03.2016 00:05

    Как происходит установление соединения если оба клиента находятся за nat?


    1. shifttstas
      07.03.2016 02:55

      По аналогии с торрентами


      1. gurinderu
        07.03.2016 12:00

        Т.е два клиента за nat'ом друг с другом соединиться без третьего лица с белым IP не смогут?
        И насколько я понимаю есть трекер, который опрашивается, чтобы получить обновления сети?


        1. Bal
          08.03.2016 12:30

          В общем случае два серых IP (с непроброшенными портами NAT) и не могут соединиться друг с другом без третьего белого в принципе. Только в некоторых случаях (не гарантированно) могут поддерживать соединение, однажды установленное про посредничестве третьего белого.


          1. gurinderu
            08.03.2016 21:57

            В том-то и дело, что сеть получается не распределенная и все равно нужен какой-то relay.


            1. shifttstas
              09.03.2016 15:19

              гм, ну это может решить IPv6


              1. gurinderu
                09.03.2016 16:22

                Внедрение IPv6 вряд ли поможет. Я думаю крупной корпорации нет смысла иметь кучу IP на каждого сотрудника и как был у них nat, так и останется.


                1. shifttstas
                  14.03.2016 18:26

                  А причем тут компании? для конечных пользователей v6 выгоден ну и для провайдеров тоже, если оборудование умеет


              1. gurinderu
                14.03.2016 18:42

                Кстати IPv6 не поможет, если в России будет «Великий Русский Файрволл»


                1. shifttstas
                  14.03.2016 19:16

                  Ничего не поможет =)


  1. lostmsu
    07.03.2016 08:31
    +3

    Все сайты на http(s)://127.0.0.1:someport/siteaddress — очень плохая идея, потому что ломает Cross Site Request Policy, который должен изолировать сайты друг от друга.


  1. Ku6ep
    07.03.2016 16:27

    Поставил попробовать, после получения ID постоянно вываливается "Message wrapper_nonce error, please report!" и ничего не происходит, пока не закроешь окно и не зайдешь на 127.0.0.1 по новой.


    1. Bal
      07.03.2016 22:13

      Аналогично. Давно пытался пощупать, так и не заработало. Сейчас проверил — ошибка та же самая.


      1. shifttstas
        08.03.2016 14:05

        Опытным путем было выяснено, это из-за frigate или других расширений https://github.com/HelloZeroNet/ZeroNet/issues/306