Pull to refresh

RKN Alert — база Роскомнадзора у вас в браузере

Reading time4 min
Views26K
Как и все, я пользуюсь одним из простых способов обхода блокировок, коих сейчас море. Все сайты открываются без проблем и тормозов. Но с недавних пор (2 недели назад) у меня встал вопрос: а какие сайты на самом деле заблокированы из тех, что открываются, а какие нет? Каждый сайт проверять вручную на официальном сайте РКН — не вариант, хоть это и самый надёжный способ. Естественно, я пошёл гуглить подходящие инструменты, но к великому удивлению ничего не нашёл.

Идея


Так родилась идея сделать расширение (опенсорсное), которое будет проверять каждый сайт на соответствие записям в базе РКН. Сначала оно было простое, проверяло только домен. Сейчас оно даже показывает, был ли сайт заблокирован неправомерно (попал под раздачу). Например, reactos.org или 7-zip.org (на момент прочтения статьи они могут быть уже разблокированы). Вообще с начала войны с Телеграмом многие сети до сих пор находятся в постоянной блокировке, периодически этот список меняется по неизвестным законам.

Как работает расширение


  • Скачивает базу РКН и хранит её локально.
  • В текущей вкладке проверяет URL (есть ли он в базе).
  • Вырезает домен из URL и проверяет, есть ли домен в базе.
  • Проверяет текущий ip-адрес в базе, по которому загружен текущий сайт.
  • Проверяет принадлежность ip-адреса заблокированным подсетям.
  • Показывает отчёт в форме иконки. Если её нажать, то чуть более подробная информация.

Вот и всё, никакой магии. Проверка домена всегда доступна, даже если сайт не грузится, блокируется, подменяется и т.д. — потому что анализируется строка адреса, то есть URL, который вы вбиваете в строке адреса или который появляется там сам. Все проблемы связаны только с проверкой ip.

А что если в браузере прокси?


Если в браузере настроен прокси, то расширение работает в пол силы, т.к. испытывает проблемы с определением текущего ip сайта. Вместо этого определяется ip прокси-сервера. Речь только о прокси в самом браузере, а не о VPN и прочих способах обхода. Кстати, для определения ip понадобились права webRequest (доступ к данным). Также ip не определяется из браузера Tor (к сожалению).

А если сайт заблокирован провайдером?


Другая техническая трудность — это определение текущего ip, когда сайт недоступен (предположительно заблокирован, а обход блокировок не настроен). В этом случае браузер не предоставляет информацию об ip-адресе. А нам нужен именно тот ip, по которому браузер пытается установить соединение — и его определить невозможно, увы. Но проверка по URL и домену при этом работает исправно.

А что, если сайт просто лежит?


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

Что если провайдер перенаправляет DNS?


Если у провайдера блокировка на уровне DNS, то расширение будет получать ложный текущий ip сайта и не подозревать об этом. И наоборот, если вы пропишите нужные ip в файл hosts (или даже у вас свой DNS-сервер), то во всплывающем отчёте будут именно они. Проверка по URL и домену при этом работает исправно, т.к. они берутся из строки адреса в браузере.

Пытаемся решить проблемы с ip


В качестве полумеры для решения подобных проблем расширение осуществляет DNS запрос и определяет все ip сайта, а также их статус нахождения в базе РКН. При этом расширение точно не знает, какой из нескольких ip используется в данный момент для обращения к проверяемому сайту. Поэтому если хоть один ip заблокирован, то расширение бьёт тревогу и меняет цвет иконки на красный.

Для получения DNS записей приходится использовать внешний сервис через HTTP-DNS, потому что сам браузер не позволяет резолвить адреса. Но это и хорошо, т.к. провайдеры не блокируют и не перенаправляют подобные запросы. Надёжность информации высокая. Можно использовать днс от Google или Cloudflare, а также пользователь brzsmg захостил вечный бесплатный днс, за что ему спасибо.

Где взять свежую базу РКН?


Конечно же, отдельный квест был поиск наиболее адекватной базы РКН. Дело в том, что сам РКН не держит базу в открытом доступе. Вместо этого он предлагает провайдерам использовать цифровую подпись для доступа к базе. У меня лишней ЭЦП под рукой не оказалось. Между тем, РКН рекомендует провайдерам обновлять базу раз в час. А некоторые «срочные» обновления базы происходят ещё чаще. То есть ковровая блокировка может задеть ключевые (или ваши) ресурсы всего на пару часов, а потом исчезнуть, как ни в чём не бывало. Наиболее приемлемым оказался часто обновляемый файл на github. Спасибо добрым людям!

Заглушка провайдера


Ситуации, когда показывается заглушка провайдера, расширение распознаёт. Оно запоминает информацию о странице, с которой был редирект на заглушку, и показывает информацию о сайте, а не о заглушке. Сейчас поддерживаются: Ростелеком, МТС, Билайн, Йота, ТТК, Дом.ру. Если у вас особая заглушка у провайдера, её можно указать в настройках, и она будет распознаваться (не будет рассматриваться, как сайт).

Заключение


Какие ещё хотелки добавить? Пишите. Как по мне, расширение имеет уже законченный вид. Дальше остаётся исправление мелких багов раз в год (если найдёте).

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

Спасибо всем, кто помогает! Всем добра!
Only registered users can participate in poll. Log in, please.
Полезно ли расширение?
64.41% Интересная вещь, заценим219
7.06% Бесполезная поделка24
28.53% Я параноик, не устанавливаю ничего лишнего97
340 users voted. 100 users abstained.
Tags:
Hubs:
+32
Comments46

Articles

Change theme settings