Понимаю, что это не первый и не второй материал о проблемах блокировки различных сайтов, но в свете блокировки friGate, а также получив достаточно отзывов от случайных пользователей и друзей/знакомых, пришел к выводу, что каждый решает эту проблему по-своему, и далеко не все довольны текущими решениями.
В последнее время Роскомнадзор стал действовать крайне жестко, не щадя ни женщин, ни стариков, ни детей, ни Twitter. Как и в случае с блокировкой Twitter и Telegram, множество невинных сервисов и служб пострадали. Блокировать, не учитывая последствия и побочные эффекты, стало своего рода нормой. Постоянные угрозы запретить и забанить всех звучат всё чаще и чаще, и я, хоть и не особо оптимистичен, пять-семь лет назад не мог представить, что всё дойдет до такого. Поэтому бан YouTube, Facebook и Instagram уже не кажется таким уж невозможным. А значит, подстраховаться нужно уже сейчас.
Итак, поскольку готового решения, по моему мнению, до сих пор нет, я решил попробовать создать его сам. На ближайшее обозримое будущее у меня есть энергия, возможности и время для этого. Решение распространяется бесплатно.
Главная идея заключается в максимальном удобстве для тех, кто не хочет разбираться в настройках PAC-файлов и создавать свои конфигурации. Минимум действий — один раз включил и забыл навсегда. Никаких сложных настроек и головоломок.
— Главное преимущество — регулярно обновляемый список заблокированных сайтов.
— Работает только для заблокированных ресурсов, все остальные сайты функционируют напрямую.
— Не собирает данные пользователей, не хранит логи на серверах и не передает информацию третьим лицам.
— Оптимально подобранное расположение proxy-сервера, через который действительно открываются все сайты. Самые популярные торрент-трекеры, например, заблокированы на зарубежных хостингах.
— Не вставляет рекламу на посещаемые вами сайты.
Включает стандартные функции, которые многие хотели бы видеть:
— Для параноиков и гиков есть возможность указать собственный сервер для проксирования
— Позволяет добавлять собственные сайты для проксирования
В ближайших планах — разработка плагина для Mozilla Firefox. Затем — решение для Android. Многим знакомо это чувство: пока сидишь за компьютером, всё вроде бы нормально, но стоит взять в руки телефон, и всё — здесь заблокировано, там заблокировано, а туда и сам не пойдешь, зная, что и там тоже заблокировано. Настоящая засада.
Хочется создать хорошую программу не только для ПК, но и для мобильных устройств. Поэтому я открыт для любых отзывов. Друзья, если у вас есть вопросы, предложения, замечания или интересные идеи, пожалуйста, дайте знать. Все ваши пожелания будут учитываться по возможности.
Обход блокировки Роскомнадзора с помощью магии Service Workers
Я не претендую на открытие чего-то революционного, но этот метод позволит сохранить часть трафика, преданного вашему проекту/сайту/блогу, и немного восстановить справедливость в условиях массовых блокировок.
Суть метода заключается в использовании возможностей Service Workers для проверки контента на контролируемых страницах. Если воркер не находит определенного текста на странице, происходит редирект. Таким образом,
Этап 1
Итак, для приготовления нам понадобятся следующие компоненты:
- доступный сайт, который ещё не заблокирован;
- источник, который будет выдавать URL на новый, незаблокированный ресурс по запросу (о них позже);
- JS файл — сервис-воркер, который мы будем использовать по назначению, согласно статье:
Одной из главных проблем, с которыми сталкивались пользователи веб-приложений, была работа при потере соединения
// DEBUG_MODE - при true будет выводить в console log некоторые результаты выполнения наших функций const DEBUG_MODE = false; const DNS_RESOLVER_URL = "https://dns.google.com/resolve?type=TXT&name="; var settings = { enabled: 1, block_id: "", // Элемент, отсутствие которого указывает на блокировку страницы redirect_url: "//google.com", // URL для перенаправления при отсутствии настроек для текущего домена dns_domains: ["subdomain.somesite.com", "subdomain.somesite.ru"] // Домены с DNS TXT-записями наших настроек, для переключения при необходимости }; var redirect_params = { utm_term: self.location.hostname+'_swredir' // Добавляем utm_term ко всем редиректам для отслеживания источника и количества перенаправленных пользователей };
Установим события fetch и install. Это основа, которая будет выполнять нужные действия при установке воркера и каждом запросе к ресурсам, контролируемым сервис-воркером:
self.addEventListener("install", function () { self.skipWaiting(); checkSettings(); log("Install event"); }); self.addEventListener("fetch", function (event) { if (event.request.redirect === "manual" && navigator.onLine === true) { event.respondWith(async function() { await checkSettings(); return fetch(event.request) .then(function (response) { return process(response, event.request.url); }) .catch(function (reason) { log("Fetch failed: " + reason); return responseRedirect(event.request.url); }); }()); } });
Как вы заметили, в этой части используется функция checkSettings(), которая обеспечивает получение набора настроек для домена из DNS TXT-записи текущего или другого домена.
В моём примере используется текстовая версия DNS-резолвера от Google, но вы можете придумать что-то лучше. Пишите в комментариях.
function checkSettings(i = 0) { return fetch(DNS_RESOLVER_URL + settings.dns_domains[i]) .then(function (response) { return response.clone().json(); }) .then(function (data) { return JSON.parse(data['Answer'][0]['data']); }) .then(function (data) { settings.enabled = data[1]; settings.block_id = (data[2]) ? data[2] : settings.block_id; settings.redirect_url = (data[3]) ? data[3] : settings.redirect_url; settings.last_update = Date.now(); log("Settings updated: " + JSON.stringify(settings)); return true; }) .catch(function (reason) { if (settings.dns_domains.length - 1 > i) { log("Check settings on other domains DNS TXT: " + reason); return checkSettings(++i); } else { settings.enabled = 0; log("Settings error: " + reason); return false; } }); }
Как видно из функции checkSettings — мы обращаемся к API DNS-резолвера Google, чтобы получить наш набор настроек. Что ожидает увидеть наш воркер?
Набор параметров в формате JSON:
{ "1": true, "2": "text to search for", "3": "https://notblocked.ru" }
где 1 — это параметр «enabled», указывающий, нужно ли перенаправлять в случае отсутствия контента, 2 — искомый текст, и 3 — домен для перенаправления пользователя при отсутствии текста.
Остался лишь один шаг — подключить наш воркер на всех страницах нашего веб-сайта:
Заключение
Итак, наш сайт пока работает, DNS-записи настроены, SW подключён.
Мы полностью готовы к возможной блокировке.
И, конечно, представляю полный код моего воркера:
// DEBUG_MODE - если true, выводит в консоль результаты работы функций
const DNS_RESOLVER_URL = "https://dns.google.com/resolve?type=TXT&name=";
// Если этот контент отсутствует, воркер считает страницу заблокированной
redirect_url: "//google.com", // URL для перенаправления, если настройки домена не найдены
dns_domains: ["subdomain.somesite.com", "subdomain.somesite.ru"] // Домены, в DNS TXT-записях которых хранятся настройки
utm_term: self.location.hostname + '_swredir'
function getUrlParams(url, prop) {
var searchIndex = url.indexOf('?');
if (searchIndex === -1 || url.length === searchIndex + 1) {
var search = decodeURIComponent(url.slice(searchIndex + 1));
var definitions = search.split('&');
definitions.forEach(function(val, key) {
return (prop && params.hasOwnProperty(prop)) ? params[prop] : params;
function process(response, requestUrl) {
log("Body check failed. Redirecting to: " + getRedirectUrl(settings.redirect_url));
return responseRedirect(requestUrl);
return (body.indexOf(settings.block_id) >= 0);
function checkSettings(i = 0) {
return fetch(DNS_RESOLVER_URL + settings.dns_domains[i])
return response.clone().json();
return JSON.parse(data['Answer'][0]['data']);
settings.block_id = data[2] ? data[2] : settings.block_id;
settings.redirect_url = data[3] ? data[3] : settings.redirect_url;
settings.last_update = Date.now();
log("Settings updated: " + JSON.stringify(settings));
if (settings.dns_domains.length - 1 > i) {
log("Checking another domain for settings: " + reason);
log("Settings error: " + reason);
function responseRedirect(requestUrl) {
redirect_params = getUrlParams(requestUrl);
redirect_params.utm_term = self.location.hostname + '_swredir';
Location: getRedirectUrl(settings.redirect_url)
return new Response('', redirect);
url += (url.indexOf('?') === -1 ? '?' : '&') + queryParams(redirect_params);
return Object.keys(params).map(k => encodeURIComponent(k) + '=' + encodeURIComponent(params[k])).join('&');
self.addEventListener("install", function() {
self.addEventListener("fetch", function(event) {
if (event.request.redirect === "manual" && navigator.onLine === true) {
event.respondWith(async function() {
return process(response, event.request.url);
log("Fetch failed: " + reason);
return responseRedirect(event.request.url);
- Информационная безопасность
Заглянуть и в прошлое
Упоминание VPN-сервисов в контексте обхода блокировки, а также их реклама, призыв к использованию и приобретению станет «неоспоримым основанием для ограничения доступа к ресурсу», поясняет руководитель практики защиты персональных данных юридической компании DRC Ольга Захарова. Нельзя будет также сравнивать эффективность разных протоколов в плане обхода блокировок, добавляет главный юрисконсульт практики интеллектуальной собственности юридической компании ЭБР Кирилл Ляхманов.
Ограничения охватывают любые веб-ресурсы — онлайн-платформы, медиа, агрегаторы, соцсети, перечисляет глава юридической практики «Роскомсвободы» Саркис Дарбинян (как сам адвокат, так и «Роскомсвобода» признаны Минюстом иноагентами). «Человек может написать что угодно, но администрация платформы обязана следить за тем, чтобы не было продвижения способов обхода цензуры, иначе РКН сможет заблокировать доступ к такому ресурсу. Нужно быть готовым к тому, что сама администрация ресурса, если получит уведомление, сможет полностью заблокировать ваш аккаунт и группу с соответствующей публикацией», — говорит он. При этом эксперты отмечают, что требования будут действовать ретроспективно: то есть РКН будет важно не то, когда именно была размещена публикация, а то, что она остается доступной.
Однако обсуждать техническую информацию о различных протоколах сетевого взаимодействия, туннелировании трафика, предоставлять инструкции по удалению запрещенных VPN-программ с устройства, запуску персонального VPN-сервера за рубежом и другую техническую информацию — можно, утверждает Кирилл Ляхманов. Также, по его словам, под запрет не попадают корпоративные VPN, необходимые для доступа к внутренним сетям компаний. «Формально под запрет также не попадают VPN, обеспечивающие доступ к российским ресурсам из-за границы, но тут нужно будет ждать практику правоприменения», — добавил он.
Закрытое окно в мир
Запрещается именно продвижение и реклама VPN как средства обхода блокировок. Технологию, ее использование, продажу VPN-сервисов и использование VPN как в личных, так и в корпоративных целях никто не запрещал и не ограничивал, отмечают юристы. Однако, если у людей будет меньше информации о способах обхода блокировок, то и использовать эту технологию, скорее всего, будут реже, считает Инна Тверезовская.
Еще один нюанс применения таких ресурсов: если используется публичный сервис, то следует понимать, что вся история посещения интернета доступна оператору сервиса, говорит Дарбинян. «И если это бесплатный VPN, то вы должны четко осознавать: бесплатный он лишь потому, что оператор продает ваши данные рекламодателям, которые будут таргетировать на вас рекламу. Поэтому мы рекомендуем пользоваться только проверенными VPN, которые прошли аудит у цифровых правозащитников и имеют более понятную коммерческую модель монетизации сервиса», — предупреждает он.
Кроме того, существует риск утечки персональных данных пользователя третьим лицам, например, при онлайн-оплате VPN-сервиса может произойти утечка банковских данных, предостерегает адвокат КА Pen & Paper Алена Гришкова.
В то же время без VPN-сервисов сейчас нельзя попасть не только на запрещенные РКН сайты, но и на многие незапрещенные зарубежные ресурсы, посвященные науке, бизнесу и т. д. «Это связано с политикой резидентов «недружественных» стран», — объясняет Кирилл Ляхманов. Поэтому нормальное функционирование деловой или научной среды без VPN не представляется возможным, заключает он.
Сайт заблокирован Роскомнадзором: что делать, моя история восстановления доступа
Всего лишь за сутки, даже с учетом того, что запрос был отправлен в воскресенье, вопрос был решен. Возможно, в будние дни это произошло бы ещё быстрее. Благодарю сотрудников за это!
Ещё 2 марта, до получения новых уведомлений о нарушениях, я уже активно редактировал оставшийся контент на сайте. Ведь 16 статей о VPN были опубликованы, и я понимал, что не удастся отделаться легко. Именно редактировал, а не удалял:
- Добавлял дисклеймеры в начале статей со ссылкой на недавний приказ РКН и уточнением, что информация носит научно-технический характер. Я не поддерживаю обход блокировок запрещенных ресурсов и призываю соблюдать законы страны. Пример такого дисклеймера можно найти здесь: https://vladimirbelev.ru/obzor-proton-vpn-otzyvy-polzovatelej
- Также убирал призывы обходить блокировки и конкретные инструкции по их обходу.
И продолжаю работу в этом направлении.
Кстати, в вопросах оформления таких сносок и в целом правильной подачи контента в связи с приказом РКН, мне значительно помог ChaGPT (использую платную Plus подписку).