ZeroNet вместо DNS: Перспективное противодействие легальному вандализму +18


image


Мысли о защите и нападении


Простите за некоторое отступление, но оно может оказаться важным.

Все мы прекрасно осведомлены о невесёлых тенденциях последних лет в сфере «регулирования» интернета. Самое удивительное, что это «вторжение» в рунет произошло с огромным запозданием и поэтому его несостоятельность совершенно очевидна для всех, кто хоть немного знаком с реальностью.

На момент вторжения естественная саморегуляция сети была уже на очень достойном уровне. Крупнейшие и наиболее интересные ресурсы уже тогда не допускали на своих страницах хоть сколько-нибудь сомнительного контента, уже тогда существовали программные фильтры контента для детей, которые вполне могли использовать и родители и общеобразовательные учреждения. «Регулировать», по сути, было уже нечего. И что же оставалось в такой ситуации?

Обычное запугивание. Роскомнадзор и иже с ним напоминают школьного хулигана-второгодника в классе респектабельных учеников. Постоянно размахивая дубиной и кому-то угрожая, этот «регулировщик» разрушает с таким трудом создававшиеся структуры, призванные сделать нашу жизнь лучше и интересней. Взамен этого предлагаются настолько сомнительные схемы, что вызывают полную дезориентацию и сомнение в умственных способностях разбушевавшегося хулигана.

Тем не менее мы упустили один важный момент. Этот персонаж кажется безумным, мы над ним даже смеёмся, но цели своей он успешно достигает. Каким образом?

Обратите внимание на то, что в последнее время многие программные решения стали казаться нам «неполноценными», если они не удовлетворяют определённым критериям приватности и анонимности. Особенно это касается средств связи, мессенджеров. Но на самом деле это ни что иное, как попытка спрятаться, скрыться, чтобы не попасться на глаза наглому хулигану. И в этом смысле он вполне достиг своей цели, поскольку безусловное доминирование почти достигнуто и мы в страхе попрятались по своим тайным «норам» и укрытиям.

Приватность и анонимность — это важные свойства множества продуктов, которые могут быть использованы, как своеобразный «щит» от хулиганских действий. Ещё эти свойства могут обеспечивать работу журналистов, коммерческую тайну и многие подобные вещи. Но если мы начали использовать эти свойства ПО как основной способ противодействия легальному вандализму, то это значит, что мы уже проиграли. Мы испугались «хулигана» и в страхе прячемся от него. Ответ «хулигану» должен быть принципиально иным. И мы, специалисты и технари, можем его обеспечить.

Ответ может заключаться в разработке доступного для всех способа распространения информации, который «хулиган» не в состоянии контролировать. В теории мы знаем, что таким свойством обладают децентрализованные распределённые системы — трудно блокировать то, что невозможно «поймать» из-за отсутствия конкретного центра, который определяет функциональность. Это уже нападение, но не защита.

И прошу обратить внимание — приватность и анонимность для децентрализованных систем вовсе не является необходимым условием. Эти свойства могут быть вполне «прикручены» опционально при желании.

ZeroNet вместо DNS


Итак, мы остановились на необходимости децентрализованного «ответа». Мне могут указать, что такие системы существуют, например — I2P. Но эта сеть откровенно избыточна для широкой публики. Никто не будет спорить, что для решения отдельных вопросов и в профессиональных целях она идеальна и всегда будет занимать свою важную нишу.

Тем не менее приватность, анонимность, безопасность, децентрализованность, изолированность от общего Веба, преподнесённые в одной упаковке, делают её медленной и ограниченной в возможностях. Именно потому она непригодна для массового использования. Да и кто возьмётся за труд «перетаскивать» всё из обычного Веба в I2P? Необходимо что-то более простое и доступное.

С ZeroNet я познакомился здесь и здесь. За что, пользуясь случаем, выражаю автору этих статей глубокую благодарность. Однако на роль альтернативной децентрализованной сети ZeroNet пока ещё также не годится по причине своей сырости. Хотя проект очень интересный и работает быстрее и надёжнее, чем I2P. По моим субъективным ощущениям.

Но давайте порассуждаем вот в каком ключе: а какие наиболее эффективные способы блокировки ресурсов сейчас существуют? По IP-адресу и по доменному имени. И работают эти способы только благодаря опоре на централизованную природу интернета. Так может быть не стоит сразу пытаться создавать этот параллельный «децентрализованный интернет»? Может быть для начала стоит сделать децентрализованную систему входов на ресурсы? Своеобразный «децентрализованный DNS». А сами ресурсы так и оставить в обычном Вебе без малейших изменений. Это может быть интересным и весьма эффективным решением. И ZeroNet подойдёт для этого идеально!

Практическая реализация


И теперь мы подошли к тому моменту, ради которого и была написана эта статья. Для начала нам нужно установить на свой компьютер клиент ZeroNet, что и сделаем, пользуясь инструкциями, размещёнными на Гитхабе.

Предположим, что установка прошла успешно и теперь можно свободно серфить по ZeroNet, но не это является основной целью, поскольку нам нужно создать децентрализованный вход на обычный сайт. Чтобы не заниматься созданием теории «сферического коня в вакууме» возьмём совершенно реальный сайт для этих экспериментов и попробуем сделать вход на него децентрализованным. Обычных ссылок на этот ресурс не будет, чтобы максимально соответствовать условиям Geektimes о рекламе. Ссылки-же ZeroNet призваны продемонстрировать методику работы с реальным сайтом, вплоть до регистрации децентрализованного доменного имени.

Для начала стоит посетить справку ZeroNet — Create new ZeroNet site (создание сайтов ZeroNet) и создать пустой сайт ZeroNet в соответствии с инструкцией. Дело совсем несложное. Важно лишь надёжно запомнить публичный и приватный ключи сайта.

$ python zeronet.py siteCreate

Итак, пустой сайт готов! Локально на компьютере он расположен здесь:

~/ZeroNet-master/data/1CzZdjvYQKEanwVrqxMp9kZB67zBtSFmdc/

Но пустой сайт нам не нужен и поэтому делаем в нём редирект на тот ресурс, который является целевым и находится в обычном Вебе.
Довольно быстро удалось разобраться, что сайты ZeroNet работают во фрейме и поэтому расписывать всю структуру HTML-документа в index-файле не нужно. Она все равно будет создана автоматически софтом ZeroNet. Поэтому просто записываем в index.html редирект с учётом того, что это фрейм:

<script> parent.location.href='http://адрес_сайта'; </script>

Далее необходимо «оповестить» пиры ZeroNet о том, что содержимое нашего «редиректного» сайта изменилось, что и сделаем в соответствии со всё той же инструкцией Create new ZeroNet site (создание сайтов ZeroNet). Потребуется «подписать» выполнение нижеследующей команды с помощью приватного ключа этого сайта.

$ python zeronet.py siteSign  1CzZdjvYQKEanwVrqxMp9kZB67zBtSFmdc

Каков результат всех этих манипуляций? Да очень простой. Теперь выбранный для экспериментов сайт, который находится в обычном интернете, доступен децентрализованно из сети ZeroNet. И если у вас установлен ZeroNet-клиент, то вы легко убедитесь в этом, если перейдёте по адресу http://127.0.0.1:43110/1CzZdjvYQKEanwVrqxMp9kZB67zBtSFmdc/ (Внимание! ZeroNet запускается не слишком быстро, и сразу после старта ресурсы не откроются).

Если же клиент у вас не установлен и лень с ним возиться, то можно использовать один из шлюзов, которые дают доступ в ZeroNet (работать могут не все и не всегда):


Для перехода на нужный вам сайт ZeroNet просто добавьте публичный ключ сайта через слэш после адреса шлюза, например вот так:
http://bit.no.com:43110/1CzZdjvYQKEanwVrqxMp9kZB67zBtSFmdc/
Вполне возможно, что это первый из сайтов обычного интернета с децентрализованным доступом через ZeroNet.

Однако адрес выглядит довольно коряво. Но на наше счастье ZeroNet поддерживает bit-домены, которые можно легко приобрести с помощью криптовалюты Namecoin, что мы и сделаем.

Может прозвучать вопрос, а почему бы сразу не использовать систему bit-доменов для доступа к сайту? Ответ простой. Обычные DNS-сервера зоны bit вовсе не децентрализованы и могут быть легко заблокированы. В паре же с ZeroNet заблокировать зону bit очень проблемно.

Идём дальше. Для покупки bit-домена нам потребуется установить официальный кошелёк Namecoin. Наберёмся терпения и подождём, пока не синхронизируется весь блокчейн Namecoin — это часы ожидания. Потом нам понадобится немного неймкоинов для регистрации домена. В настоящее время домен стоит 0.02 NMC, что составляет примерно $0.01. Внезапно оказалось, что NMC — не такая уж распространённая криптовалюта и сходу её не купишь. Регистрировать аккаунт на бирже из-за таких сумм просто глупо, но удалось найти ресурс, где небольшие суммы NMC можно купить за биткоины — https://www.changer.com.

Купить bit-домен проще простого. В нашем случае регистрируем домен estilibera.bit. В кошельке нужно перейти на вкладку «Manage Names» и в строке ввода записать d/estilibera (без расширения). Потом следует оплата и опять ожидание в течение нескольких часов, пока в блокчейне не накопится достаточное количество подтверждений произведённой операции. Кошелёк отключать во время этого процесса нельзя.

Время терять не следует — необходимо настроить запись конфигурации домена. Для этого нужно выбрать в кошельке зарегистрированное имя и нажать «Configure Name», а потом перейти на вкладку «Custom Configuration». На этой вкладке нужно вписать строку JSON, которая содержит тип подключения и публичный адрес сайта ZeroNet:

{"zeronet": {"": "1CzZdjvYQKEanwVrqxMp9kZB67zBtSFmdc"}}

А теперь просто ждать. И вот мы дождались — наше доменное имя вступило в силу. Через некоторое время пробуем перейти по адресу http://127.0.0.1:43110/estilibera.bit. Это уже значительно лучше! А для тех, кто пробует подключиться через шлюз, будет что-то вроде http://bit.no.com:43110/estilibera.bit.

Но и такой адрес выглядит не слишком привлекательно. Однако локальный браузер можно «научить» понимать простые адреса bit-доменов ZeroNet в виде example.bit. Создадим для этого файл proxy.pac со следующим содержанием:

function FindProxyForURL(url, host) { 
    if  (dnsDomainIs(host, ".bit")) { 
        return "PROXY 127.0.0.1:43110"; 
    } 
    else { 
        return "DIRECT"; 
    } 
} 

Далее нужно указать путь к этому файлу в разделе автоматической настройки прокси-сервера. Например, в Firefox это находится здесь: Правка=>Настройка=>Дополнительные=>Сеть=>Настроить=>Url автоматической настройки сервера прокси.

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

Аппетит приходит во время еды и было решено создать ещё один вход на тот же сайт через другой редирект, что и было сделано. Только имя сайта для редиректа в этом случае будет 0estilibera.bit — в таком стиле принято именовать сайты, которые созданы специально для ZeroNet. Абсолютно всё сделано точно так же, как и в предыдущем случае, за одним маленьким исключением. Редирект выполняется во фрейм ZeroNet.

<script> location.href='http://адрес_сайта'; </script>

Таким образом у пользователей ZeroNet остаётся в руках весь их инструментарий, мы не выходим из ZeroNet и создаётся впечатление, что это «внутренний, зеронетовский сайт», хотя это всё тот же самый сайт из обычного интернета. Это своеобразный «реверанс» в сторону последователей ZeroNet.

Преимущества представленного метода


Первое и самые заметное преимущество — сайты с децентрализованным входом невозможно заблокировать в принципе. Конечно, можно заблокировать IP-адрес. Но смысла в этом довольно мало, поскольку владельцу сайта будет достаточно переключится на другой айпишник, что не займёт и минуты. Для этого достаточно изменить IP-адрес в редиректной строке пустого сайта ZeroNet (Предположим, что загодя к сайту уже подключен целый стэк альтернативных IP-адресов — мы же понимаем, с кем связались. Пусть «запретители» воюют с ветряными мельницами!) А на посетителях это вообще никак не отразится. Они попросту не заметят такую «блокировку».
И потом, блокировки налево и направо IPv4 при их тотальной нехватке — это просто ещё одна форма вандализма, которая при таком подходе становится очень заметной и выставляет напоказ несостоятельность «регулировщиков».

Вторым преимуществом является независимость от чьей-то доброй воли, от конкретных централизованных служб. Прокси-сервера, VPN, даже ноды Tor поддерживаются благодаря частной инициативе. Но в варианте ZeroNet количество пиров, которое поддерживает вход на сайт, определяется только его популярностью и создаётся автоматически. В этом смысле система идентична торрентам.

Третье достоинство этого метода заключается в том, что сайты, вход на которые организован таким способом, совершенно не занимают дисковое пространство пользователя! Понятно, что структура ZeroNet подразумевает копирование нативных зеронетовских сайтов на компьютер каждого, кто желает с ними познакомиться. Однако в нашем случае это не так.

Децентрализованно распространяется только узел редиректа, который фактически не занимает места!

Другое преимущество менее заметно, но кажется мне более важным. Такой подход позволяет создать практически «бесшовный» переход от обычного интернета к полностью распределённому и децентрализованному.

В рамках ZeroNet можно создавать полноценные динамические сайты, но для этого есть два существенных препятствия.

1. Если система создания статического контента почти не поменялась в ZeroNet, то создание динамического сайта в этой сети — процесс, к которому подавляющее большинство сайтостроителей просто не готово.
2. Сама по себе система ZeroNet еще сыровата и нуждается в серьёзном «допиливании».

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

А настроить децентрализованный вход на любой сайт через ZeroNet даже сейчас не составит труда любому веб-мастеру, как мы убедились выше.

Для нативных сайтов ZeroNet не нужен сервер! И если децентрализованная модель прекрасно подходит для небольших, индивидуальных ресурсов, то для корпоративных и прочих сайтов, перегруженных информацией, старая модель является предпочтительной, поскольку ресурс не будет «съедать» дисковое пространство пользователей.

Уже и сейчас возможно создание комбинированных сайтов, создатель которых сам будет решать, какую часть контента содержать на центральных серверах, а какую — раздавать децентрализованно.

Вопрос лишь в уровне подготовки веб-мастера. Кажется хорошей стратегией децентрализованно обеспечивать структуру сайта и его динамику (если удовлетворяет скорость!). А централизованно — быстрые скрипты и «тяжёлые» ресурсы. Впрочем, могу и ошибаться. А ваше мнение?

Недостатки и способы их преодоления


Некоторую неприятность может доставить вебмастеру факт использования абсолютных ссылок при внутренней навигации по сайту. Внутренние ссылки при переходе на другие базовые IP-адреса могут оказаться в этом случае «дохлыми» и навигация поломается. Впрочем, проблема эта не слишком существенна — скрипты, устраняющие такие проблемы, написать не сложно.

Ещё одна неприятность. При смене IP-адреса ссылки на отдельные страницы ресурса могут быть утеряны пользователем. Доступным останется только «парадный вход», главная страница. Эту проблему можно решать несколькими способами.

1. Делать «парадный вход» на сайт более информативным и удобным для пользователей.
2. Создавать для отдельных страниц сайта собственные «входы».

Возможно, есть и какие-то решения на уровне плагинов для браузера.

Но самый существенный недостаток в настоящее время — сложность установки и запуска ZeroNet для обычного человека. Это беда не только ZeroNet, но и целого спектра другого ПО, которое не доходит до конечного пользователя. Такая ситуация порождена каким-то чрезмерным размножением гиков-портяночников, которые к своему, зачастую уникальному и замечательному продукту, прикладывают целую «портянку» команд для установки-запуска и попросту «забивают болт» на доведение ПО до удобоваримой кондиции. Философия «гик для гиков» завоевала совершенно нереальную популярность и это свидетельствует вовсе не о развитии культуры программирования, а о её деградации.

Для чего мы пишем программы, ради самих программ? Только ради собственного удовольствия? Или всё-таки для людей, для того, чтобы сделать их жизнь лучше и интересней?

Врать не буду, меня тоже иногда упрекают в подобном подходе, но у меня имеется кое-какое оправдание. В программировании я — неуклюжий дилетант и мне просто не по силам доводить подобные системы до пользовательского уровня.

Итак, что необходимо, чтобы подобный подход «взлетел»? (IMHO) Простой установочный файл, который за один заход установит и запустит всю систему. Что в эту систему должно входить? На самом деле не так уж и много, сущая ерунда:

1. Полная установка клиента ZeroNet.
2. Плагин для текущего браузера, который будет автоматически перенаправлять запросы зоны bit на 127.0.0.1:43110.
3. Маленькая панелька в системном трее или в браузере, которая позволит включать и выключать ZeroNet. Нужна она на данном этапе просто потому, что ZeroNet очень жаден до трафика, а это полезно контролировать вручную, пока не придумали что-нибудь более забавное.

В идеале вся эта система запуска ZeroNet+bit должна быть собрана в установочный экзешник для виндов или в deb-пакет для Debian и Ubuntu без всяких сопроводительных «портянок» по запуску и установке.

Чрезвычайно нужна также поддержка ZeroNet крупными уважаемыми ресурсами, которые либо уже изгнаны из рунета, либо находятся на грани этого. Нужна ЛЮБАЯ поддержка ВСЕХ прогрессивных сил.

Ещё было бы чрезвычайно здорово портировать в русский сегмент ZeroNet ресурсы вроде такого http://127.0.0.1:43110/1PLAYgDQboKojowD3kwdb3CtWmWaokXvfp/. Это намёк крупнейшим торрент-трекерам. Такие сайты порождают добрую зависть к нашим забугорным друзьям и вызывают обильное слюноотделение. Безусловно, подобные ресурсы могут сильно помочь росту популярности, развитию интернета будущего, интернета децентрализованного.

Отцы-программисты! Прислушайтесь к этим призывам. Наше будущее и будущее рунета, да и всего интернета, — в ваших руках. Необходимо рунет превратить в такой Рунет, которым мы могли бы гордиться, невзирая на всяких хулиганов.

Прятаться за випиэнами, торами — это значит терять пядь за пядью свободного пространства и всё дальше залезать в глухие норы, где и придётся пропасть в безвестности. Надо дать достойный технический ответ.

Что вы думаете об этом?
-->


К сожалению, не доступен сервер mySQL