В связи с разгулом банхамера по интернет просторам участились советы по использованию различных прокси, vpn, tor и анонимайзеров для обхода блокировок сайтов. Эти все способы отправляют трафик третей стороне которая его может перехватывать и модифицировать. Это не наш метод. Мы сейчас просто и легко научим браузер дурить DPI.
Я вдохновился этой статьёй и сообразил относительно лёгкий способ ходить на заблокированные сайты прямо а не используя чужие прокси, дополнения и программы.
Исходные данные:
Заблокированный сайт(Адрес изменён):
Это один из сайтов на который РКН ограничил доступ.
Страница блокировки(Адрес изменён):
Адрес страницы заглушки которая появляется при попытке открытия сайта. У каждого провайдера адрес страницы заглушки наверно разный.
Итак открываем блокнот и пишем первый скрипт:
Сохраняем как «proxy.pac»
Суть этого скрипта в том чтобы использовать как прокси сам сервер к которому мы и хотим получить доступ.
Подключаем «proxy.pac» в Chrome:
1. Настройки -> Показать дополнительные настройки ->
Сеть -> Изменить настройки прокси-сервера ->
Вкладка «Поключения» -> Настройка сети
2. Ставим галочку «Использовать сценарий автоматической настройки»
3. В поле адрес пишем полный путь к «proxy.pac»
Например: C:\Users\name\Documents\proxy.pac
Теперь страница блокировки будет появляется через раз.
Снова открываем блокнот и пишем:
Сохраняем как «back.user.js» в папку «back»
Этот скрипт возвращает нас на страницу где мы можем снова кликнуть заблокированную ссылку.
И опять открываем Блокнот и пишем:
Сохраняем как «manifest.json» в папку «back»
Теперь добавим в Chrome как Расширение:
1. Дополнительные инструменты -> Расширения
2. Ставим галочку «Режим разработчика»
3. Нажимаем «Загрузить распакованное расширение...»
4. Находим папку «back» в которую сохраняли «back.user.js» и «manifest.json» и нажимаем ОК
Проверяем:
1. Перезагружаем Chrome
2. Нажимаем «Отмена» в окошке «Отключить расширения в режиме разработчика» справа.
3. Пишем в адресную строку адрес заблокированного сайта и нажимаем Enter.
4. ???
5. PROFIT
Использованные материалы:
Изучаем deep packet inspection у RETN
Proxy Auto Configuration (PAC)
Учимся писать userscript'ы
Userscripts. Упаковываем юзерскрипт для Chrome
Продолжение:
Обходим блокировку сайта фильтрующим прокси при помощи скрипта во имя Луны
Я вдохновился этой статьёй и сообразил относительно лёгкий способ ходить на заблокированные сайты прямо а не используя чужие прокси, дополнения и программы.
я осуществил необратимые манипуляции с доменным именем таким образом, чтобы не существовало ни одного достоверного и однозначного алгоритма обращения получившейся хеш-функции.
Исходные данные:
Заблокированный сайт(Адрес изменён):
rutracker.og
Это один из сайтов на который РКН ограничил доступ.
Страница блокировки(Адрес изменён):
198.51.100.0...
Адрес страницы заглушки которая появляется при попытке открытия сайта. У каждого провайдера адрес страницы заглушки наверно разный.
Итак открываем блокнот и пишем первый скрипт:
function FindProxyForURL(url, host) {
if (shExpMatch(url, "http://*") && shExpMatch(host, "rutracker.og")) {
return "PROXY rutracker.og; DIRECT";
}
return "DIRECT";
}
Сохраняем как «proxy.pac»
Суть этого скрипта в том чтобы использовать как прокси сам сервер к которому мы и хотим получить доступ.
Подключаем «proxy.pac» в Chrome:
1. Настройки -> Показать дополнительные настройки ->
Сеть -> Изменить настройки прокси-сервера ->
Вкладка «Поключения» -> Настройка сети
2. Ставим галочку «Использовать сценарий автоматической настройки»
3. В поле адрес пишем полный путь к «proxy.pac»
Например: C:\Users\name\Documents\proxy.pac
Теперь страница блокировки будет появляется через раз.
Снова открываем блокнот и пишем:
// ==UserScript==
// @name BackUserJS
// @description Window History Back Script
// @author ivan386
// @license MIT
// @version 1.0
// @include http://198.51.100.0/*
// @run-at document_start
// @grant none
// ==/UserScript==
(function (window) {
var w;
w = window;
if (w.self != w.top) {
return;
}
if (/http:\/\/198.51.100.0/.test(w.location.href)) {
w.history.back()
}
})(window);
Сохраняем как «back.user.js» в папку «back»
Этот скрипт возвращает нас на страницу где мы можем снова кликнуть заблокированную ссылку.
И опять открываем Блокнот и пишем:
{
"manifest_version": 2,
"content_scripts" : [
{
"js":[ "back.user.js" ],
"matches":[ "http://198.51.100.0/*" ],
"run_at":"document_start"
}
],
"description" : "Window History Back Script",
"name" : "BackUserJS",
"version" : "1.0.0"
}
Сохраняем как «manifest.json» в папку «back»
Теперь добавим в Chrome как Расширение:
1. Дополнительные инструменты -> Расширения
2. Ставим галочку «Режим разработчика»
3. Нажимаем «Загрузить распакованное расширение...»
4. Находим папку «back» в которую сохраняли «back.user.js» и «manifest.json» и нажимаем ОК
Проверяем:
1. Перезагружаем Chrome
2. Нажимаем «Отмена» в окошке «Отключить расширения в режиме разработчика» справа.
3. Пишем в адресную строку адрес заблокированного сайта и нажимаем Enter.
4. ???
5. PROFIT
Использованные материалы:
Изучаем deep packet inspection у RETN
Proxy Auto Configuration (PAC)
Учимся писать userscript'ы
Userscripts. Упаковываем юзерскрипт для Chrome
Продолжение:
Обходим блокировку сайта фильтрующим прокси при помощи скрипта во имя Луны
d1Mm
В ростелекоме убрали редирект на страницу-заглушку, теперь просто отдает страницу со статусом 451 (Unavailable For Legal Reasons) и данный способ не помогает это обойти.
ivan386
Видимо ваше отделение оперативней среагировало. Или у них алгоритмы блокировки по проще. У меня пока метод работает.
ivan386
Этот метод не работает против фильтрующего прокси. Изучаю вопрос.
IRainman
Ого, а покажите, пожалуйста скриншот, например, ибо у себя попробовал попасть на страницу блокировки, а там всё тоже самое. Прошу поскольку очень уж интересно посмотреть на страницу с 451 ошибкой в реальном рунете.
d1Mm
IRainman
Какой оригинальный ответ однако от блокировщика ибо приходит с block.ip.center.rt.ru похоже Ростелеком всё таки поставил полноценный DPI.
ivan386
В хедерах есть Location но переадресация не происходит. Это даже лучше. В данном случае можно просто обновлять страницу. Кстати нажмите «view source» в «Request Headers» и убедитесь что в GET полный адрес (http://...) а не только путь. Если только путь (GET /...) то proxy.pac не сработал.
IRainman
P.S. у меня просто вот такая «заглушка», как раз с кодом 451 по умолчанию выдаётся «моим пользователям»
navion
А каков принцип работы?
«Эшелонированную защиту» не пробивает, когда блокирует провайдер и его аплинк.
ivan386
DPI пакет не узнаёт и не высылает заглушку. Но работает метод через раз поэтому второй скрипт нужен.
RicoX
Сильно зависит от паранойи админов провайдера, встречал схему DPI + дополнительно все запросы на 53 порт редиректятся провайдером на свой сервер DNS, какой у себя DNS не укажи все равно будет обрабатывать провайдерский, тогда только VPN спасает до своего сервера.
Nikon_NLG
Кстати, я у себя только dns завернул в vpn, чтобы не весь трафик туда гонять. Дёшево и сердито.
RicoX
Аналогично, плюс таблица IP которые ходят исключительно через VPN, все что не в таблице идет через провайдера, оптимальное соотношение скорости работы и доступности сайтов.
arabesc
От перехвата DNS запросов может помочь DNSCrypt, он через 443 порт работает.
MaximChistov
www.torproject.org/projects/torbrowser.html — захожу через это на заблокированные сайты, полет нормальный.
Не нашел только как тут включить меня как внутрисетевой узел в сеть, раньше это просто было, мб в курсе кто?
IRainman
У тора уж очень большие шансы нарваться на человека посередине, даже в топике об этом сказано и рассматривается пример с сайтом без https.
MaximChistov
ну если им заходить только на торрент-трекеры/луркоморье и прочие заблокированные, не вижу особо проблемы. он мне не для анонимности нужен
IRainman
Проблемы, в основном, из-за авторизации возникают, хотя подделки страниц без https тоже однозначно исключить нельзя.
volk0ff
Я дико извиняюсь, но в качестве альтернативной меры использование DNS серверов гугла прям в роутере не практичнее?
Спасибо
ivan386
От DPI это не поможет. DNS прописаны и гугловские и яндексовские. Блок у меня идёт на уровне TCP пакетов. Каждый провайдер по своему решил проблему блокирования сайтов поэтому решение не универсально.
mukizu
Нет, у меня провайдер весь трафик переводит на себя, простое прописывание альтернативных DNS от этого не спасет, все равно будут его юзаться.
skolk
Фактически, вместо поля Host: имя сервера оказывается в самой строке GET.
Интересно, какие веб-сервера совместимы с этим по умолчанию?
ivan386
Видимо все. Поскольку если сделать так:
Проблем не наблюдается. Проблема здесь может быть только с сайтами которые используют альтернативный порт для http вместо стандартного (80).
skolk
А если убрать "; DIRECT"? Порт можно, кстати, выпарсить…
ivan386
Тогда проблема с другим портом будет гарантированно. Так хоть если не соедениться с 80тым попробует напрямую.
ValdikSS
Есть и более практичные способы, которые, правда, требуют устройства под управлением Linux (роутер, например):
Для ДОМ.ру и Интерзет
Для Ростелекома способ 1 (тот, что ниже, от меня) и способ 2.
Ну и на основе proxy.pac, но с прокси.
ivan386
Я также исследовал модификацию хедеров для прохода DPI как и в этой статье. Написал простенький тестер прохода на Lua. Пытался писать свой локальный прокси но он коряво работает. И собственно таки пришёл к идее как прокси использовать сам сервер.
Второй способ вообще должен быть идеален для данного типа блокировки если есть iptables. Я о нём также думал смотря в WireShark. Но в windows iptables нет. Не знаю есть ли у меня доступ к этому на роутере.
Я на кстати на основе этого proxy.pac (скачав и изменив) себе сделал свой для всех заблокированных сайтов.
Если прикроют мой способ будем пробовать вариант с 3proxy если антивирус на него ругаться не будет.
К сожалению все варианты с модификацией заголовка и отбрасыванием пакетов не работают при фильтрующем прокси. Если прокси не понимает заголовка то и сервер не поймет. Этот вопрос я поставил в очередь на исследование. Очень хочется как можно дольше не отдавать трафик в чужие руки.
Krey
Что только не придумают, лишь бы ipv6 не настраивать.
ivan386
Ну ipv6 на сервере недавно только подняли. И если использовать 6to4 гейт 192.88.99.1 то у него приоритет ниже ipv4. Это наверно можно исправить прописав в proxy.pac как прокси ipv6 адрес узла.
ValdikSS
6to4 не нужно использовать, он объявлен устаревшим в мае 2015.
ivan386
Надеюсь он всё ещё работает поскольку другого способа получения халявного ipv6 я не знаю.
ValdikSS
Его работоспособность зависит от anycast-сервера, ближайшего к вам. Обычно работает, да. Но и других способов хватает.
ivan386
А какие альтернативы?
ValdikSS
Туннельные брокеры (6in4, иначе говоря), AYIYA, умирающий Teredo (только не с серверами Microsoft).
Krey
Вы перепутали с teredo
ValdikSS
Нет.
Krey
Попробуйте тогда найти этому подтверждение. Я бегло погуглил и вику посмотрел и ничего не нашел. Про отмену тередо везде находится начиная с его rfc.
ValdikSS
Подтверждение чему? Я же привел ссылку на RFC.
Krey
Извиняюсь, на телефоне не заметил что это ссылка была. Сейчас ознакомлюсь.
ivan386
Расскажите пожалуйста вкратце почему они решили отказаться и какую альтернативу предложили.
Krey
Много ошибок, глубоко скрытых от пользователя, в результате которых пользователи отключали ipv6, считая его не надежным. В рамках этого rfc никакой альтернативы, кроме того что вернуться к изначальному rfc на 6to4 без этого эникастового релея, а в последствии подумать.
Это то что я вычитал на своем битом английском, надо бы перечитать и перепроверить.
Krey
Строго говоря RFC 7526 объявляет устаревшим только позднюю присадку к 6to4 в виде эникаста 192.88.99.1 т.е вроде бы не сам 6to4. Хотя там много всего что отговаривает от его использования. В любом случае перед продолжением его использования надо будет внимательно перечитать этот rfc и пачку связанных. Спасибо за ссылку.
Удивительно — ни одной статьи на хабре по теме.
ivan386
Включил 6to4 туннель на роутере. Задал ipv6 в proxy.pac дабы приоритет не играл роли.
Chrome спокойно погнал трафик по ipv6.
FireFox начал флудить коннектами на ipv4 адрес.
Вернул в porxy.pac как было (домен).
Прописал в hosts (Адреса изменены)
2001:db8:: rutracker.og
FireFox и Chrome пошли на сайт через ipv6 без проблем. Фильтрующий прокси трафик не порезал.
Krey
В винде приоритет (prefixpolicies) выставляется в netsh довольно удобно. У меня выставлен в приоритет разных видов ipv6 над ipv4 и только для кривых сайтов специально выставлен ipv4. Это сайты районной локалки, которые работали в ipv6 когда местный провайдер игрался с новым протоколом и перестали работать когда пров забыл что этот протокол у него есть.
foxmuldercp
Мне говорили, что некоторые ISP по IPv6 тоже блокируют ресурсы, так что только vpn и т.п, но мне без надобности запоминать местечковых ISP другой страны, так что без пруфов.
Alexey2005
Метод Chrome-only, в Firefox установка proxy.pac ничего не даёт, постоянно всплывает всё та же заглушка.
ValdikSS
Думаю, вводить нужно путь с URI, т.е. file://, а не просто путь. Честно говоря, не знал, что в Chrome можно без file:// вводить.
Alexey2005
Пробовал и так, всё равно не работает. А в Chrome без проблем.
ValdikSS
А если загрузить куда-то, или просто веб-сервер поднять, ссылка с http работает? Может, где-то синтаксическая или иная ошибка?
ivan386
Chrome в Windows использует настройки сети в IE и собственно их и открывает. Видимо IE понимает и такой путь а хром получает файл. FireFox в своих настройках автоматом меняет на file://
ivan386
У меня работает и в Firefox. Заглушка проскакивает иногда и в Chrome но второй скрипт её тут же её закрывает. Я специально не стал распыляться на все браузеры сосредоточившись на Chrome.
В Firefox для второго скрипта нужно поставить GreaseMonkey и скормить ему «back.user.js». Либо поставить RequestPolicy который запретит переадресацию и можно будет просто нажать кнопку попробовать снова.
Также посмотрите на заголовки в FireBug в исходном виде. Там должен быть полный адрес в GET. Если в GET только путь («GET /… HTTP/1.1») то proxy.pac не сработал.
Alexey2005
Получилось запустить. Если в Firefox выбрать пункт «использовать системные настройки прокси», а в системе прописать этот proxy.pac, он подхватывается. А напрямую, через предназначенное для него поле — ни в какую. Перепробовал разные варианты, даже слеш в обратную сторону разворачивал, всё равно не подхватывается.
Ну ладно, главное работает…
stas404
Можно избавиться от первого этапа ручной установки pac-скрипта и применить настройки прокси из самого расширения, дав ему соответствующие права в manifest-файле:
Далее использовать объект «chrome.proxy» в режиме «pac_script» с указанием соответствующего «PacScript».
Подробнее в документации:
https://developer.chrome.com/extensions/proxy
Спасибо за интересный материал.