Провайдеры Российской Федерации, в большинстве своем, применяют системы глубокого анализа трафика (DPI, Deep Packet Inspection) для блокировки сайтов, внесенных в реестр запрещенных. Не существует единого стандарта на DPI, есть большое количество реализации от разных поставщиков DPI-решений, отличающихся по типу подключения и типу работы.

Существует два распространенных типа подключения DPI: пассивный и активный.

Пассивный DPI

Пассивный DPI — DPI, подключенный в провайдерскую сеть параллельно (не в разрез) либо через пассивный оптический сплиттер, либо с использованием зеркалирования исходящего от пользователей трафика. Такое подключение не замедляет скорость работы сети провайдера в случае недостаточной производительности DPI, из-за чего применяется у крупных провайдеров. DPI с таким типом подключения технически может только выявлять попытку запроса запрещенного контента, но не пресекать ее. Чтобы обойти это ограничение и заблокировать доступ на запрещенный сайт, DPI отправляет пользователю, запрашивающему заблокированный URL, специально сформированный HTTP-пакет с перенаправлением на страницу-заглушку провайдера, словно такой ответ прислал сам запрашиваемый ресурс (подделывается IP-адрес отправителя и TCP sequence). Из-за того, что DPI физически расположен ближе к пользователю, чем запрашиваемый сайт, подделанный ответ доходит до устройства пользователя быстрее, чем настоящий ответ от сайта.

Выявляем и блокируем пакеты пассивного DPI

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

Мы видим, что сначала приходит пакет от DPI, с HTTP-перенаправлением кодом 302, а затем настоящий ответ от сайта. Ответ от сайта расценивается как ретрансмиссия и отбрасывается операционной системой. Браузер переходит по ссылке, указанной в ответе DPI, и мы видим страницу блокировки.

Рассмотрим пакет от DPI подробнее:
image

HTTP/1.1 302 Found
Connection: close
Location: http://warning.rt.ru/?id=17&st=0&dt=195.82.146.214&rs=http%3A%2F%2Frutracker.org%2F

В ответе DPI не устанавливается флаг «Don't Fragment», и в поле Identification указано 1. Серверы в интернете обычно устанавливают бит «Don't Fragment», и пакеты без этого бита встречаются нечасто. Мы можем использовать это в качестве отличительной особенности пакетов от DPI, вместе с тем фактом, что такие пакеты всегда содержат HTTP-перенаправление кодом 302, и написать правило iptables, блокирующее их:
# iptables -A FORWARD -p tcp --sport 80 -m u32 --u32 "0x4=0x10000 && 0x60=0x7761726e && 0x64=0x696e672e && 0x68=0x72742e72" -m comment --comment "Rostelecom HTTP" -j DROP

Что это такое? Модуль u32 iptables позволяет выполнять битовые операции и операции сравнения над 4-байтовыми данными в пакете. По смещению 0x4 хранится 2-байтное поле Indentification, сразу за ним идут 1-байтные поля Flags и Fragment Offset.
Начиная со смещения 0x60 расположен домен перенаправления (HTTP-заголовок Location).
Если Identification = 1, Flags = 0, Fragment Offset = 0, 0x60 = «warn», 0x64 = «ing.», 0x68 = «rt.ru», то отбрасываем пакет, и получаем настоящий ответ от сайта.

В случае с HTTPS-сайтами, DPI присылает TCP Reset-пакет, тоже с Identification = 1 и Flags = 0.

Активный DPI

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

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

Изучаем стандарт HTTP

Типичные HTTP-запросы в упрощенном виде выглядят следующим образом:
GET / HTTP/1.1
Host: habrahabr.ru
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/50.0
Accept-Encoding: gzip, deflate, br
Connection: keep-alive

Запрос начинается с HTTP-метода, затем следует один пробел, после него указывается путь, затем еще один пробел, и заканчивается строка протоколом и переносом строки CRLF.
Заголовки начинаются с большой буквы, после двоеточия ставится символ пробела.

Давайте заглянем в последнюю версию стандарта HTTP/1.1 от 2014 года. Согласно RFC 7230, HTTP-заголовки не зависят от регистра символов, а после двоеточия может стоять произвольное количество пробелов (или не быть их вовсе).
   Each header field consists of a case-insensitive field name followed
   by a colon (":"), optional leading whitespace, the field value, and
   optional trailing whitespace.

     header-field   = field-name ":" OWS field-value OWS

     field-name     = token
     field-value    = *( field-content / obs-fold )
     field-content  = field-vchar [ 1*( SP / HTAB ) field-vchar ]
     field-vchar    = VCHAR / obs-text

     obs-fold       = CRLF 1*( SP / HTAB )
                    ; obsolete line folding

OWS — опциональный один или несколько символов пробела или табуляции, SP — одинарный символ пробела, HTAB — табуляция, CRLF — перенос строки и возврат каретки (\r\n).

Это значит, что запрос ниже полностью соответствует стандарту, его должны принять многие веб-серверы, придерживающиеся стандарта:
GET / HTTP/1.1
hoSt:habrahabr.ru
user-agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/50.0
Accept-Encoding:           gzip, deflate, br
coNNecTion:	keep-alive      < здесь символ табуляции между двоеточием и значением

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

Старый стандарт, RFC 2616, рекомендует снисходительно парсить запросы и ответы сломанных веб-северов и клиентов, и корректно обрабатывать произвольное количество пробелов в самой первой строке HTTP-запросов и ответов в тех местах, где требуется только один:
Clients SHOULD be tolerant in parsing the Status-Line and servers tolerant when parsing the Request-Line. In particular, they SHOULD accept any amount of SP or HT characters between fields, even though only a single SP is required.
Этой рекомендации придерживаются далеко не все веб-серверы. Из-за двух пробелов между методом и путем ломаются некоторые сайты.

Спускаемся на уровень TCP

Соединение TCP начинается с SYN-запроса и SYN/ACK-ответа. В запросе клиент, среди прочей информации, указывает размер TCP-окна (TCP Window Size) — количество байт, которые он готов принимать без подтверждения передачи. Сервер тоже указывает это значение. В интернете используется значение MTU 1500, что позволяет отправить до 1460 байтов данных в одном TCP-пакете.
Если сервер указывает размер TCP-окна менее 1460, клиент отправит в первом пакете данных столько, сколько указано в этом параметре.

Если сервер пришлет TCP Window Size = 2 в SYN/ACK-пакете (или мы его изменим на это значение на стороне клиента), то браузер отправит HTTP-запрос двумя пакетами:

Пакет 1:
GE
Пакет 2:
T / HTTP/1.1
Host: habrahabr.ru
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/50.0
Accept-Encoding: gzip, deflate, br
Connection: keep-alive


Используем особенности HTTP и TCP для обхода активного DPI

Многие решения DPI ожидают заголовки только в стандартном виде.
Для блокировки сайтов по домену или URI, они ищут строку "Host: " в теле запроса. Стоит заменить заголовок «Host» на «hoSt» или убрать пробел после двоеточия, и перед вами открывается запрошенный сайт.
Не все DPI можно обмануть таким простым трюком. DPI некоторых провайдеров корректно анализируют HTTP-заголовки в соответствии со стандартом, но не умеют собирать TCP-поток из нескольких пакетов. Для таких DPI подойдет «фрагментирование» пакета, путем искусственного уменьшения TCP Window Size.

В настоящий момент, в РФ DPI устанавливают и у конечных провайдеров, и на каналах транзитного трафика. Бывают случаи, когда одним способом можно обойти DPI вашего провайдера, но вы видите заглушку транзитного провайдера. В таких случаях нужно комбинировать все доступные способы.

Программа для обхода DPI

Я написал программу для обхода DPI под Windows: GoodbyeDPI.
Она умеет блокировать пакеты с перенаправлением от пассивного DPI, заменять Host на hoSt, удалять пробел между двоеточием и значением хоста в заголовке Host, «фрагментировать» HTTP и HTTPS-пакеты (устанавливать TCP Window Size), и добавлять дополнительный пробел между HTTP-методом и путем.
Преимущество этого метода обхода в том, что он полностью автономный: нет внешних серверов, которые могут заблокировать.

По умолчанию активированы опции, нацеленные на максимальную совместимость с провайдерами, но не на скорость работы. Запустите программу следующим образом:
goodbyedpi.exe -1 -a
Если заблокированные сайты стали открываться, DPI вашего провайдера можно обойти.
Попробуйте запустить программу с параметром -2 и зайти на заблокированный HTTPS-сайт. Если все продолжает работать, попробуйте режим -3 и -4 (наиболее быстрый).
Некоторые провайдеры, например, Мегафон и Yota, не пропускают фрагментированные пакеты по HTTP, и сайты перестают открываться вообще. С такими провайдерами используйте опцию -3 -a

Эффективное проксирование для обхода блокировок по IP

В случае блокировок по IP-адресу, провайдеры фильтруют только исходящие запросы на IP-адреса из реестра, но не входящие пакеты с этих адресов.
Программа ReQrypt работает как эффективный прокси-сервер: исходящие от клиента пакеты отправляются на сервер ReQrypt в зашифрованном виде, сервер ReQrypt пересылает их серверу назначения с подменой исходящего IP-адреса на клиентский, сервер назначения отвечает клиенту напрямую, минуя ReQrypt.

ReQrypt

Если наш компьютер находится за NAT, мы не можем просто отправить запрос на сервер ReQrypt и ожидать ответа от сайта. Ответ не дойдет, т.к. в таблице NAT не создана запись для этого IP-адреса.
Для «пробива» NAT, ReQrypt отправляет первый пакет в TCP-соединении напрямую сайту, но с TTL = 3. Он добавляет запись в NAT-таблицу роутера, но не доходит до сайта назначения.

Долгое время разработка была заморожена из-за того, что автор не мог найти сервер с возможностью спуфинга. Спуфинг IP-адресов часто используется для амплификации атак через DNS, NNTP и другие протоколы, из-за чего он запрещен у подавляющего большинства провайдеров. Но сервер все-таки был найден, хоть и не самый удачный. Разработка продолжается.

Заключение и TL;DR

GoodbyeDPI — программа под Windows, позволяющая обходить пассивные и активные DPI. Просто скачайте и запустите ее, и заблокированные сайты станут снова доступны.
Для Linux есть аналогичная программа — zapret.

Используйте кроссплатформенную программу ReQrypt, если ваш провайдер блокирует сайты по IP-адресу.

Определить тип блокировки сайтов можно программой Blockcheck. Если в тестах DPI вы видите, что сайты открываются, или видите строку «обнаружен пассивный DPI», то GoodbyeDPI вам поможет. Если нет, используйте ReQrypt.

Дополнительная полезная информация есть здесь и здесь.

Комментарии (296)


  1. FisHlaBsoMAN
    11.08.2017 19:48

    Я когда то обходил блокировку подменяя GET на POST, изначально проверял head'ом и обнаружил что работает


    1. ValdikSS Автор
      11.08.2017 20:34
      +4

      Это будет работать только на очень ограниченном количестве сайтов.


      1. FisHlaBsoMAN
        13.08.2017 04:05

        Это само собой, но качать файлики через wget самописным скриптом мне удавалось. Если что я про ныне покойный(?) ex


  1. nesselrode
    11.08.2017 19:54
    +5

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


    1. Meklon
      11.08.2017 20:02
      +13

      Боюсь скоро начнут выпиливать эти публикации. И прошлые тоже. Вариантов нет особо.


      1. vconst
        11.08.2017 20:11
        +10

        Тогда тут останутся только пустые корпоративные блоги с нулем просмотров


        1. Meklon
          11.08.2017 21:17

          Беда утром, что баланса особо не получится (( законы хреновые.


        1. Dmitry_5
          14.08.2017 11:43
          +1

          Просмотры будут писаться кто сколько проплатит


      1. tersuren
        11.08.2017 21:30
        +3

        Тут скорее надо боятся что ValdikSS'а выпилят :(


      1. omgiafs
        11.08.2017 21:56
        +4

        Пора выводить часть статей в Tor.

        Как у флибусты — зайдешь на «луковый» сайт — полный доступ, зайдёшь на flisland.net — нет доступа к текстам.

        Заходят ребята к РосКомНадзора — всё чинно, благородно.
        Заходят остальные через Тор — всё как до РосКомНадзоров и регулирований интернета.


      1. eov
        11.08.2017 21:56

        нужно качнуть для автономного прочтения…


      1. arabesc
        13.08.2017 02:42

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


      1. gorbln
        13.08.2017 21:36

        Я сделал так: распечатал статью в ПДФ. Единственное, что непонятно — сконвертировались ли ссылки.


        1. ivan386
          13.08.2017 21:39
          +2

          У браузеров же есть возможность сохранить HTML со всеми ресурсами.


          1. gorbln
            14.08.2017 10:16

            Согласен. Не подумал.


  1. EvilGenius18
    11.08.2017 20:36

    А, кроме DPI и IP, какие еще типы блокировок существуют?
    Провайдеры разве не имеют возможность видеть кто обходит блокировки, а кто нет?


    1. vilgeforce
      11.08.2017 20:40
      +7

      Есть подозрение, что дрючат провов за то, что «ревизор» обходит блокировки, а не продвинутые юзеры


    1. ivan386
      11.08.2017 21:39
      +1

      Кальмаром ещё блокируют.


      1. ValdikSS Автор
        11.08.2017 21:50
        +3

        Да, у некоторых провайдеров установлен zapretservice, который представляет собой настроенный Squid.

        EvilGenius18

        Провайдеры разве не имеют возможность видеть кто обходит блокировки, а кто нет?
        Имеют, конечно.


      1. ivan386
        11.08.2017 21:54

        Объясняю. По IP трафик заворачивают на прозрачный прокси а он уже вычитывает url или домен в случае https и блокирует в случае соответствии с правилами. Такой способ используют мелкие провайдеры.


    1. ivan386
      12.08.2017 13:26
      +1

      Ещё подменяют ответы DNS.


  1. DenimTornado
    11.08.2017 21:47

    Спасибо, интересно. Для Мака подобное есть?


    1. ValdikSS Автор
      11.08.2017 21:56
      +2

      ReQrypt должен работать и на macOS, и на FreeBSD, но его никто не собирал. Попробуйте, напишите о результатах, если будете пробовать.
      Вот что пишет автор:

      It is supported, see the build instructions for MacOSX in the INSTALL file. The Mac build is mostly the same as FreeBSD since they are similar systems. That said, I have not tested it in a long time, so I don't know if it still works.

      Вообще, я планировал перенести всю функциональность GoodbyeDPI в ReQrypt, чтобы была одна большая кроссплатформенная программа, с веб-интерфейсом, но пока как-то руки не доходят. Будет здорово, если кто-нибудь поможет мне и автору ReQrypt. Здесь есть план: https://github.com/ValdikSS/ruqrypt/issues/1


      1. DenimTornado
        11.08.2017 21:57

        Спасибо за наводку, попробую собрать под Мак!


      1. DenimTornado
        12.08.2017 01:36

        Не собралось, к сожалению. Оставил issue — https://github.com/basil00/reqrypt/issues/2


        1. ValdikSS Автор
          12.08.2017 08:22
          +1

          Автор исправил, теперь собирается?


          1. DenimTornado
            12.08.2017 10:59

            Собраться-то собралось, только на новых версиях macOS нет ipfw, его заменили на PF, в итоге пакет превратился в тыкву…


    1. dzhidzhoev
      13.08.2017 03:57
      +1

      Запилил небольшое расширение ядра для macOS (IP Filter), блокирующее пакеты пассивного DPI Ростелекома.
      Можно попробовать переписать фильтры под себя, если необходимо.

      https://github.com/dzhidzhoev/AntiRTDPI


      1. ValdikSS Автор
        13.08.2017 13:29

        Надоело копипастить сравнение «warning.rt.ru» побайтово?


        1. ValdikSS Автор
          13.08.2017 13:31

          Вы, видимо, хотели оптимизировать сравнение вложенными if'ами, но это не нужно: как только не сработает первое правило, сравнение остальных не будет производится, если это логическое «и» (&&).


          1. dzhidzhoev
            13.08.2017 14:01

            В Си ведь нет сокращенного вычисления логических выражений?
            UPD: ок, понял, есть.


            1. ValdikSS Автор
              13.08.2017 14:04

              if (0 && exit(-1)) {something};

              exit(-1) не будет выполняться.


  1. MonkAlex
    11.08.2017 22:09
    +3

    Внезапно, просто запустил и работает.
    Спасибо.

    UPD: я правильно понимаю, что это единственное решение, когда мой трафик не ходит никуда, всмысле в том числе на неизвестные прокси\впн? =)


    1. ivan386
      11.08.2017 22:14

      Да


    1. ValdikSS Автор
      11.08.2017 22:53
      +49

      Клёво. Я и хотел так сделать, чтобы можно было просто запустить, и оно просто заработало.
      Считаю, что у нас глобально не хватает хороших программ. Есть идеи, есть технологии, есть исследования, а софт писать разучились, либо просто лень людям. Что ни прокси-сервер или мессенджер, то обязательно на Electron, с chromium и ffmpeg.dll, на 60+ МБ, отъедающий 200+ МБ RAM, и еще нужно, чтобы при нажатии правой кнопки вываливалось меню с пунктами «Back» и «Refresh». И обязательно с рекламой или привязкой ко своим серверам.

      Я написал GoodbyeDPI, потому что мне было интересно, и потому что я стараюсь заботиться о людях. Я не пользуюсь Windows, но, тем не менее, эта программа под Windows.


      1. OnkelTem
        12.08.2017 03:59
        +5

        Человечище!


  1. nikitasius
    11.08.2017 22:44
    +1

    VPS за 3 бакса, проброс порта PuTTy (win)/ssh (linux), Firefox, sock5 прокси, галка «proxy DNS when using SOCK v5».

    Все.


    1. ValdikSS Автор
      11.08.2017 22:45

      Ну и работать это будет только в браузере. Зачем мне браузер, ведь есть telnet. Я же не браузер смотрю, а интернет!


      1. nikitasius
        11.08.2017 23:12
        +1

        Работать это будет где угодно :)
        Это sock5. И браузер, и игрушки, TCP/IP который приносит радости. Если прописать на уровне системы — то весь системный софт, который умеет "в настройки системы" будет ее юзать.


        Конечно, это чуть дольше чем скачать программу, которая будет обходить какие-то частные случаи.


        Это всего лишь:


        • купить виртуалку за 3 бакса или евро (если дорого, скинуться с 3 друзьями, кто будет сидеть на ней же)
        • выбрать установку дебиана в админ панели хостера, сервер можно и не настраивать, ну или минимум добавить юзера для прокси
        • скачать PuTTy (windows) и настроить как на картинке (и нажать [Add]):
          image
        • в случае линукса обойтись 1й строкой ssh -D 3128 -i /путь/к/ключу root@айпи_сервера -p22, вместо root указать юзера, которого сделали для прокси, если сделали.
        • Следом в системе или в браузе указать проксю
          image

        Радоваться тому, что траффик зашифрован до VPS и далее спокойно идет до цели и это работает во всех случаях, а ныть можно будет, когда всех обяжут пускать ssh траффик через главный сервер прокуратуры.


        1. avost
          12.08.2017 00:59
          +2

          А где повод для радости-то? Закон о незаконности вашего способа уже есть.


          1. edogs
            12.08.2017 04:00

            Не совсем так. VPN не запрещены, запрещены сервисы для обхода блокировок. Автор статьи описал один способ обхода блокировок, автор комментария второй способ обхода блокировок. В контексте закона они равноценны.


            1. avost
              12.08.2017 11:13

              Не совсем так. Способ автора не является сервисом и не запрещён текущим законодательством совсем.
              Способ из комментария предлагает использовать именно запрещённый сервис и при выявлении подлежит блокировке.


              1. darkslave
                12.08.2017 12:43
                +2

                Не соглашусь, nikitasius предлагает использовать ssh туннель до своего vds/vps, на котором запущен прокси (тот же squid). По факту о вашем закрытом прокси знает только хостер и провайдер vds. Ваш же провайдер видит только шифрованный ssh траффик — а чем вы там занимаетесь ему неизвестно. Пока что закона об ограничении ssh нет, и надеюсь не будет.


                1. nikitasius
                  12.08.2017 12:54
                  +1

                  Запущенный прокси НЕ нужен. Это просто туннель до сервера.
                  При использовании SOCK5 все запросы улетают через сервер на нужные ресурсы. Никакого лишнего софта.


                  user -> {ssh} -> VPS -> TCP/IP {worldwide}


                  будь то сайты или онлайн игры.


              1. edogs
                12.08.2017 13:00
                +2

                > Способ из комментария предлагает использовать именно запрещённый сервис
                Не-а, еще раз — vpn не запрещены.
                Запрещено оказывать услуги vpn если не блокируются нужные сайты, но автор комментария услуги не предлагает оказывать, он предлагает использовать это «лично для себя».


                1. avost
                  12.08.2017 13:20
                  -2

                  Так автора комментария и не будут запрещать. Заблокируют тот впн, который предоставляет ему эту услугу. Всё в точном соответствии.


                  1. SergeyUstinov
                    12.08.2017 13:46

                    Если найдут. :)))
                    Количество VPN соединений не очень маленькое.


                  1. mayorovp
                    12.08.2017 14:23
                    +3

                    Так он предлагает же не чужой VPN искать, а VDS арендовать.


                    1. avost
                      12.08.2017 14:30
                      -3

                      Сомневаюсь, что вы сможете доказать разницу прокурору. Или роскомпозору. Но можно да, тешить себя и такой мыслью.


                      1. nikitasius
                        12.08.2017 14:59
                        -2

                        А что мешает сказать, что это твои вирусы коннекты поднимают?
                        Ейбогу… соображалка-то где?


                        1. Hardcoin
                          12.08.2017 16:40
                          +3

                          Сказать — ничего не мешает. Это не я, я просто рядом стоял. На степень виновности это не повлияет (тем более, что самому обходить блокировки пока можно)


                        1. avost
                          12.08.2017 22:12

                          Кому, простите, сказать? — дяденька прокурор, снимите с моего сервера блокировку, это не я там впном на "запрещённые" сайты ходил, это мои вирусы туда что-то сливали… — и прокурор, такой, — а, ну раз вирусы, то это меняет дело, снимаем блокировку, спасибо, что сказали!
                          Ей богу, соображалка-то где?


                      1. ximaera
                        12.08.2017 16:07
                        +1

                        Просто поверьте на слово тем, кто читал закон: это будет работать.


                      1. alek0585
                        12.08.2017 17:31


                      1. JerleShannara
                        12.08.2017 18:15

                        Тут работает принцип неуловимого джо, который неуловим потому, что никому нафиг не нужен.


                  1. edogs
                    12.08.2017 14:36
                    +3

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

                    Оказание услуг третьим лицам и личное пользование — сильно разные вещи, в том числе и юридически.


                    1. avost
                      13.08.2017 00:52
                      -1

                      Вы полагаете, вы сможете это доказать? А действительно сможете? Расскажите Дмитрию Богатову как доказать, что это не он был тем экстремистом, за которого его закрыли. Серых мразей не смутило даже то, что "экстремист" действовал в то время, когда Богатов уже сидел в тюрьме. Прочтите его интервью. "Там" никому не интересно ничего ни юридически ни, даже, то, что некоторые вещи невозможно сделать физически. Поэтому Богатова обвиняют в экстремизме, который он "совершал" сидя в тюрьме. Поэтому Серебренникова обвиняют в том, что он не ставил спектакль, не смотря на то, что его посмотрели тысячи людей и даже в момент обвинения он шёл в театрах. Поэтому парализованного чувака в инвалидной коляске обвиняют в разбойном нападении и завладении мотороллером. Поэтому в крови сбитого насмерть шестилетнего ребёнка находят дозу алкоголя, срубающую с ног взрослого мужика… В общем, удачи вам!


        1. Renaissance
          12.08.2017 16:00
          +3

          К сожалению, «системные» настройки прокси, которые в Windows реализованы через Internet Explorer, не умеют «Proxy DNS when using SOCKS v5» и будут слать DNS запросы через DNS прописанный в системе.

          В итоге получается, что работать это будет только в Mozilla Firefox (потому что он умеет слать запросы DNS через прокси) и в ПО где предусмотрены такие настройки.

          Google Chrome и его производные, а также любое ПО использующее системные настройки прокси Windows будут слать запросы через DNS роутера-провайдера.

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

          GoodbyeDPI и ReQrypt в моем случае не работают.


          1. ValdikSS Автор
            12.08.2017 17:16
            +1

            Так настройте себе DNSCrypt.


            1. Renaissance
              12.08.2017 21:14

              DNSCrypt настроен на роутере.
              Но при таком раскладе теряется доступ ко внутренним сервисам провайдера.


              1. SagePtr
                13.08.2017 00:55
                +1

                Внутренние сервисы через hosts прописать, если их не так много


              1. Bonio
                13.08.2017 00:59

                Так настройте dnsmasq.


                1. Renaissance
                  13.08.2017 10:53

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

                  Есть вариант выловить всё это дело вручную, но я до него ещё не дошел.


                  1. Bonio
                    13.08.2017 11:08

                    Я думал, у вас локальные адреса с локальными же доменами, вроде sitename.local.
                    А если их там считанные единицы и вы их все знаете, то можно так же в dnsmasq указать, через какой dns сервер разрешать конкретное имя.


                    1. Renaissance
                      13.08.2017 11:16

                      К сожалению, нет, .local не используется.
                      Про настройку dnsmasq я в курсе, спасибо.

                      У прошлого провайдера всё было проще в этом плане, а вот текущий добавил сложностей.

                      По крайней мере, в своём браузере у меня блокировок нет, спасибо ValdikSS за это.


                      1. ivan386
                        13.08.2017 11:34

                        Можно у провайдера спросить список доменов локальных сервисов (возможно на форуме он уже есть) и скриптом вогнать в hosts.


                        1. Renaissance
                          13.08.2017 11:35

                          На форуме нет, провайдер не даёт такой информации (и я его понимаю прекрасно), уже пробовал.


                          1. skobkin
                            14.08.2017 11:45

                            Я, если честно, не прекрасно понимаю провайдера. Можно, например, пользоваться сторонними (Google, Яндекс, HE, etc) DNS-серверами и хотеть подключаться к сервисам провайдера. Предоставить список доменов доступным клиентам мешает скорее лень.


        1. Geograph
          13.08.2017 00:45
          -1

          Минусы способа:
          — падение скорости интернета
          — ограничения трафика у хостинга за 3 бакса.


          1. nikitasius
            13.08.2017 01:55
            +2

            Вам, с дивана, виднее. 100 Мбит и анлим траффик, и все за 3 евро.


            1. Geograph
              13.08.2017 09:49

              Да, с дивана хороший обзор.
              100 Мбит на сервере, не равно 100 Мбит на локальном ПК + увеличение пинга.
              Особенно, если VPS не из твоей страны (не все живут в России).


              1. vconst
                13.08.2017 10:19
                +2

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


              1. nikitasius
                13.08.2017 23:21
                +3

                Правильные ДЦ имеют правильные маршруты, так что если до VPS 40мс (40мс это между москвой и францией или германией), а до западного сайта 60мс, то в итоге будет 50мс :)
                Я одно время держал "публичный гейт" (sock5) для игроков eveonline, так как из России до Исландии было дольше, чем из России до германии и из германии до исландии. Некоторые получили -30мс (минус 30мс к пингу) + у них "обрывов не было" при такой игре.


                Теперь про 100Мбит — на сервере гарантированно 100 Мбит (реально 104 на 100 тарифе), следом имеет важность канал провайдера (юзера) в европу. И если он говно, то прямой ли коннент или через сервер — одни яйца.


                Пример сервера — VPS1 от OVH. Я использую из в пакете public cloud, а конкретно этот мелкий ВПС для частных прокси для друзей и как нода TOX.


      1. NickyX3
        13.08.2017 16:26

        Поставьте Proxifier, он умеет заворачивать в любой SOCKS5 сервер ЛЮБОЙ трафик прозрачно на уровне TCP/IP.


    1. ivan386
      11.08.2017 22:54

      Помоему скачать и запустить прграмму легче чем ваш вариант. Да и много дешевле.


      1. nikitasius
        11.08.2017 22:56

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

        Он требует вложений, но не требует настройки сервера (если только idle уменьшить, чтобы sshd не рвал коннекты с клиентами, которые долго молчат).


      1. softaria
        12.08.2017 17:47
        +2

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


        1. nikitasius
          13.08.2017 23:25

          Именно так. А запрет SSH… ну это вообще "приехали".


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


          Например такой провайдер как OVH ничего не запрещает ставить, то бишь можно ставить что угодно (реально что угодно), но если активность носит нелегальный характер — будет разбирательство и саспенд.


          Это гораздо более гибкая политика, чем тот же hetzner, запрещающий tor или швейцарцы, которые против irc, tor и любый проксей.


    1. klirichek
      12.08.2017 08:01

      Да ну, это слишком узкое применение.
      Лучше уж sshuttle — он по крайней мере весь трафик заворачивает одной командой, а не только из браузера.


      1. nikitasius
        12.08.2017 12:56

        Узкое — если sock5 только в firefox использовать.


        Если на уровне системы — тогда глобальное.


    1. Lsh
      14.08.2017 00:13

      VPS за 3 бакса

      Где взять? Какие там ограничения на место/трафик? Там дают root права на систему и можно доустановить что потребуется? Спасибо!


      1. sticks
        14.08.2017 18:51

        Как вариант мониторить предложения на https://lowendbox.com/.


      1. ValdikSS Автор
        14.08.2017 18:51

      1. nikitasius
        14.08.2017 20:51

        https://www.ovh.com/fr/vps/vps-ssd.xml


        полный доступ, любая система (для винды дороже есессно).


  1. mike_y_k
    11.08.2017 22:49

    Спасибо за статью. Будем собирать арсенал.


  1. Digriz
    11.08.2017 23:09
    +3

    Заработало отменно с -4, автору глубочайший респект.
    Закину свои мысли по поводу «запуска как сервис» — в Win это можно сделать проще, через планировщик.
    Ставим задание «при старте машины запускать от имени аккаунта SYSTEM», прописываем путь к программе с нужными ключами, PROFIT!

    XML для импорта
    <?xml version="1.0" encoding="UTF-16"?>
    <Task version="1.3" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
      <RegistrationInfo>
        <Date>2017-08-11T22:54:06.3052904</Date>
        <Author>Habrahabr</Author>
      </RegistrationInfo>
      <Triggers>
        <BootTrigger>
          <Enabled>true</Enabled>
        </BootTrigger>
      </Triggers>
      <Principals>
        <Principal id="Author">
          <UserId>S-1-5-18</UserId>
          <RunLevel>HighestAvailable</RunLevel>
        </Principal>
      </Principals>
      <Settings>
        <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
        <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
        <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
        <AllowHardTerminate>false</AllowHardTerminate>
        <StartWhenAvailable>false</StartWhenAvailable>
        <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
        <IdleSettings>
          <StopOnIdleEnd>true</StopOnIdleEnd>
          <RestartOnIdle>false</RestartOnIdle>
        </IdleSettings>
        <AllowStartOnDemand>true</AllowStartOnDemand>
        <Enabled>true</Enabled>
        <Hidden>true</Hidden>
        <RunOnlyIfIdle>false</RunOnlyIfIdle>
        <DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession>
        <UseUnifiedSchedulingEngine>false</UseUnifiedSchedulingEngine>
        <WakeToRun>false</WakeToRun>
        <ExecutionTimeLimit>PT0S</ExecutionTimeLimit>
        <Priority>7</Priority>
        <RestartOnFailure>
          <Interval>PT1M</Interval>
          <Count>3</Count>
        </RestartOnFailure>
      </Settings>
      <Actions Context="Author">
        <Exec>
          <Command>"goodbyedpi.exe"</Command>
          <Arguments>-4</Arguments>
        </Exec>
      </Actions>
    </Task>
    


    1. mayorovp
      12.08.2017 11:40

      А останавливать такой сервис предполагается перезагрузкой? :-)


      1. Digriz
        12.08.2017 12:49

        Зачем, достаточно просто задание остановить.


    1. AcidVenom
      13.08.2017 17:16

      Есть еще NSSM, с ним полноценная служба получится.


  1. Reeze
    12.08.2017 00:00
    +1

    Какие методы могут начать применять провайдеры для обхода данной программы (общими чертами)?
    Насколько будет просто их будет обходить обновлениями?
    Гонка вооружений или в один момент могут глобально что-то придумать?


    1. vsb
      12.08.2017 00:15
      +12

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

      Резюмируя — думаю этот способ будет работать для большинства провайдеров, если он работает сейчас. Однако во исполнение закона о запрете обхода блокировок скорее всего эту статью удалят, а доступ к софту постараются так или иначе заблокировать. Его прокси-сервер, наверное, тоже. Ну по крайней мере если это будет популярный способ.


      1. softaria
        12.08.2017 17:51

        Тогда вопрос в том насолько «умным» сделают этого самого Ревизора и как часто станут его обновлять.


  1. eov
    12.08.2017 00:06
    -5

    Испытываю смешанные чувства по поводу того, что наш умный (DPI-ный) блокиратор обходится утилитой goodbyedpi. Как сотрудник компании расстроен, а как резидент страны и пользователь ru.net рад…
    Я по-прежнему убежден, что все ограничительные меры в сфере информационных технологий, придуманные "теми кого в слух не произносим" и продвинутые "народными избранниками" направлены исключительно против простых сограждан. Родина от этого НЕ становится безопаснее....


    1. Reeze
      12.08.2017 00:10
      +22

      Как сотрудник компании расстроен...


      Напомню, что ваша компания перенаправляла (и наверняка делает это и сейчас) доставку SMS для авторизации на устройства третьим лицам.


      1. eov
        12.08.2017 00:13
        -17

        Не думаю, что это уместно обсуждать здесь и сейчас...


        1. Reeze
          12.08.2017 00:22
          +21

          Этот факт просто необходимо выводить под комментариями расстроенных сотрудников МТС.
          Вы на другой стороне баррикад, вы работаете там и размещение здесь мнимых рефлексий неуместно.


          1. OnkelTem
            12.08.2017 04:04
            +4

            Человек к вам со всей душой, за Родину радеет, а вы его так отхлестали! Быгы… :)


          1. eov
            12.08.2017 08:49
            +5

            Я не буду оправдываться, вполне допуская, что что-то подобное и было и в этом преступлении были задействованы и сотрудники компании. Скажу лишь, что мир не идеален и некоторые вещи (пример) можно делать без участия оператора. Еще скажу, что если «Яровая» заработает, то использовать sms для чего-то серьезного (авторизация, восстановление пароля и др.) станет просто невозможно, потому что к текстам (как в on-line, так и off-line) получит куда более широкий “круг лиц”, как говорится, без «суда и следствия»...


            1. skobkin
              14.08.2017 11:58

              Да и сейчас СОРМ — «чёрный ящик», который без спросу снимает данные у оператора.


              1. eov
                14.08.2017 12:19

                +1
                Ключевое слово "снимает". А тут еще будет и хранить…
                Еще прикол в том, что разработка "решения" для "Яровой" еще в самом начале. На этапе тестирования "решения" к трафику получат доступ дополнительные люди (разработчики).
                Сейчас, формально, голосовой СОРМ работает путем установки "на мониторинг" конкретных абонентов на оборудовании оператора, а по "Яровой" потребуется полный слив сигнализации (в ней ходят SMS-ки) и самого голоса.


                1. skobkin
                  14.08.2017 13:35

                  Да. Суть в том, что текущий СОРМ — реалтайм, а пакет Яровой-Озерова — доступ в ретроспективе. Причём в текущих формулировках — доступ достаточно широкого круга лиц. Огромная дыра в безопасности и конфиденциальности.


          1. skobkin
            14.08.2017 12:06
            -1

            Не очень понимаю, чего вы хотите от eov. Я правильно понимаю, что он и все остальные сотрудники МТС должны были написать заявление об увольнении по собственному желанию после того случая?
            А почему тогда они не должны этого делать при каждом мелком нарушении прав абонентов многие годы назад? А где они тогда будут искать работу, если все разом уволятся? Или уволиться должен был только eov? Если так, то почему только он? И почему он теряет право «расстраиваться», что решение компании не работает с точки зрения сотрудника (это проффесионализм) и радоваться этому же с точки зрения прав человека (это гражданская позиция)?

            Вы так всё это пишете как будто он — депутат, который эти законы разрабатывает.

            // Да, вы, конечно, можете и на Нюрнбергский процесс сослаться. Вот только это с натяжкой будет работать если eov сам занят блокировками в своей компании.


        1. eov
          13.08.2017 11:54
          -1

          Спасибо, я уже все понял… Это была просто попытка остановить офтоп обсуждение…
          Еще бы напомнил бы правила Хабра:


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

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


        1. Dmitry_5
          14.08.2017 11:55

          Это надо пометить тегом 'хранить вечно'


      1. akzhan
        12.08.2017 03:30

        можно пруф, я что-то пропустил.



    1. Antelle
      12.08.2017 01:15
      +2

      Не расстраивайтесь :) Задача компании заработать бабки, а не заблочить. Закон, он такой: надо — сделали; можно не делать, пользователи довольны, роскомпозор не бесится — всем пофиг.


    1. akzhan
      12.08.2017 03:32
      +4

      Знаете, многие немцы абсолютно так же оправдывались насчет Освенцима.


      Пока это просто аналогия...


  1. kromm
    12.08.2017 02:20

    Замечательная статья, спасибо!
    Одно грустно, что это все привязка к конкретному ПК. Вот бы все это на роутер утащить.

    У себя пока решил проблему так: микротик отлавливает входящие пакеты с переадресацией на заглушку провайдера, добавляет IP в отдельный список, после чего уже все IP из этого списка через policy-based routing маршрутизируются в поднятый там же vpn. В итоге при первом заходе на сайт вылазит заглушка (которую тот же микротик подменяет на свою), последующие уже идут через vpn.

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


    1. Furriest
      12.08.2017 06:35

      А не будет наглостью попросить описать решение на микротике поподробнее, для повторения? Я недостаточно знаю эту платформу для реализации первой половины задачи (отловить ответы от заглушки и на этом основании сделать таблицу для PBR), а решение по описанию красивое.


      1. kromm
        12.08.2017 12:48

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


    1. ValdikSS Автор
      12.08.2017 08:27
      +2

      zapret работает на роутерах под OpenWRT.


  1. IGHOR
    12.08.2017 03:27

    Еще HTTP клиент может вместо CRLF присылать LF, что тоже должно корректно обрабатываться сервером.


    1. ValdikSS Автор
      12.08.2017 08:41

      Это рекомендация, ее не придерживаются еще большее число веб-серверов, чем несколько пробелов в первой строке запроса.


      1. Akuma
        12.08.2017 15:06

        А вообще на каких веб-серверах тестировали?
        Поидее нужны всего три: Apache, nginx, IIS, может быть lighttpd. Остальные встречаются или крайне редко или используются только при разработке.


        1. mayorovp
          12.08.2017 15:29
          +1

          А куда пропали Tomcat, а также сервера встроенные в node.js, go и другие популярные языки?


          PS IIS не парсит заголовки HTTP, этим занимается HTTP.SYS


          1. Akuma
            12.08.2017 16:33

            Да, про ноду что-то я и забыл. Хотя ее часто ставят за nginx, но не знаю будет ли это играть какую-то роль.

            На счет go и «других попурярных языков», не хочу никого обидеть, но в процентном соотношении их использование в интернете стремится к нулю: https://news.netcraft.com/archives/category/web-server-survey/ или https://trends.builtwith.com/web-server
            Поправьте если ошибаюсь.

            Поддерживать все и вся, я думаю, у автора не получится, да и не нужно это, думаю оно и так будет работать.


      1. IGHOR
        13.08.2017 03:44

        Как знать без статистики? Такие пакеты даже iOS отправляет из некоторых сервисов.


  1. ukt
    12.08.2017 04:10
    +2

    Отличная статья. Сразу почему то вспомнился Марк Руссинович.


  1. weirded
    12.08.2017 08:21

    [удалил]


  1. saag
    12.08.2017 08:48

    На мой взгляд не хватает варианта для мобильных устройств…


    1. ValdikSS Автор
      12.08.2017 08:53

      Телефоны ограничивают свободу, не давая пользователю права root. Обоим программам они потребовались бы, будь они переделаны для телефонов. Это можно обойти через VPN API, но все же, на iOS и Windows Phone нельзя установить программы не из магазина программ штатными средствами, а в магазин такое вряд ли пропустят.


      1. vconst
        12.08.2017 09:57
        -4

        Подавляющее количество телефонов — андроид, а там никаких проблем с root. Другое дело, что там проще пользоваться обычным VPN.


        1. vconst
          12.08.2017 23:58
          -1

          Минусующие могут объясню свою точку зрения?

          У меня Mi5, он на андроид, у меня есть рут (хотя он в данном случае не нужен) и я пользуюсь своим собственным ВПН, потому что предлагаемое решение на телефоне не работает и работать не может.


          1. S-trace
            13.08.2017 00:06
            +1

            Ну тут уж вы точно не правы.

            Утром нашёл эту статью, протестировал на ПК, потом попытался на телефоне — получил ошибку.
            Пересобрал ядро и boot.img, прошил — команды отработали, проверил — всё работает.
            Написал скрипт init.d, положил куда надо, перезагрузил смарт — изменения перезагрузку пережили.
            Вытащил этот скрипт со смарта в device tree, пересобрал прошивку, прошил полностью — работает.

            Так что со всей ответственностью могу заявить — этот способ на Android смартфоне в принципе работоспособен. Если лично у вас не работает — претензии к производителю.


            1. vconst
              13.08.2017 00:33

              Ну тогда это автор не прав, потому что он выше говорит о том, почему его способ не для телефонов. И пересборка ядра прошивки — это, мягко говоря, не самый тривиальный способ. ВПН на порядок проще и надёжнее.


          1. skobkin
            14.08.2017 12:14

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


            1. vconst
              14.08.2017 13:13

              Мой Mi5 пришлось разблокировать через сайт сяоми, это заняло пару дней и с тех пор никаких проблем, никаких эксплоитов.


              1. skobkin
                14.08.2017 13:31

                Вы же в курсе, что Xiaomi могут НЕ РАЗРЕШИТЬ разблокировку? Я вам сейчас могут провести небольшую аналогию между конституционным правом и согласованием митингов, и покупкой устройства и просьбой получить root.

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


                1. vconst
                  14.08.2017 13:39

                  Начнем сначала.

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


                  1. skobkin
                    14.08.2017 18:32

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


                    1. vconst
                      14.08.2017 18:35

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

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


                      1. skobkin
                        14.08.2017 18:38
                        +1

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


                        1. vconst
                          14.08.2017 18:41
                          +2

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


        1. kSx
          13.08.2017 20:45
          +1

          С получением root, может, и никаких проблем, но, например, банковский клиент отказывается работать на рутованном телефоне. И не только он.


          1. jryj
            13.08.2017 22:57

            Это уже давно обходится. Гугли — Magisk.


      1. SegaZero
        12.08.2017 21:30

        На iOS можно, если собрать самому со своим провижн профилем, который доступен фор фри. Так что можно попробовать. Любой маковод сможет собрать и накатить на девайс из сорцов. Для других можно настроить сборку в travis. Тогда можно будет форкнуть реп и вписать туда teamId от личного аккаунта


      1. Alexufo
        13.08.2017 03:33

        opera vpn есть в маркетах гугла и апла


        1. vconst
          13.08.2017 10:20
          +1

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


  1. frees2
    12.08.2017 08:52

    У меня создалось впечатление ( не профессиональное, ибо не знаю сетей), что DPI таки стоят не только у провайдеров, какие то узлы, пути прохождения меняются. Тестировал только ReQrypt.
    Напрягает отключение ipv6.


    1. ValdikSS Автор
      12.08.2017 09:10
      +1

      Поддержки IPv6 нет в ReQrypt потому, что когда он писался, IPv6 был еще не везде, и автор его просто проигнорировал. Ее обязательно добавят. В GoodbyeDPI тоже пока нет, тоже добавлю.


  1. ks0
    12.08.2017 08:53

    А почему апач на 127.0.0.1 при запущенной программе тоже отваливается? Куда копать?


    1. ValdikSS Автор
      12.08.2017 09:05

      Не знаю, посмотрю.


  1. DCNick3
    12.08.2017 08:58

    Похоже, что у dom.ru не работает (проверял с -1 -a в Internet Explorer)


    1. ValdikSS Автор
      12.08.2017 08:59
      +1

      У Дом.Ру еще и DNS подменяется и перенаправляется. Используйте GoodbyeDPI в связке с DNSCrypt. Это должно быть написано в результатах Blockcheck.


      1. DCNick3
        12.08.2017 12:06

        Да, с DNSCrypt завелось с -1, спасибо


      1. bgBrother
        12.08.2017 14:27

        Спасибо, всё заработало с DNSCrypt+ReQrypt.

        Lanet, Украина. Блокирует по IP+подменяет DNS.
        Провайдер выдает только IPv4 и блокирует, видимо, только IPv4.

        По этому ранее был доступ через IPv6 over IPv4 тунель. Яндекс, КиноПоиск и другие (кто имел АААА запись) открывались сразу же, но не ВКонтакте. Для него был FriGate.


    1. pha
      13.08.2017 21:53

      ValdikSS
      У Zapret'a есть способ без DNSCrypt — игнорить липовые ответы от domru.

      iptables
      iptables -t raw -C PREROUTING -p udp --sport 53 -m string --hex-string "|5cfff164|" --algo bm -j DROP --from 40 --to 300 ||
      iptables -t raw -I PREROUTING -p udp --sport 53 -m string --hex-string "|5cfff164|" --algo bm -j DROP --from 40 --to 300
      iptables -t raw -C PREROUTING -p udp --sport 53 -m string --hex-string "|2a022698a00000000000000000000064|" --algo bm -j DROP --from 40 --to 300 ||
      iptables -t raw -I PREROUTING -p udp --sport 53 -m string --hex-string "|2a022698a00000000000000000000064|" --algo bm -j DROP --from 40 --to 300
      iptables -t raw -C PREROUTING -p udp --sport 53 -m string --hex-string "|5cfff16e|" --algo bm -j DROP --from 40 --to 300 ||
      iptables -t raw -I PREROUTING -p udp --sport 53 -m string --hex-string "|5cfff16e|" --algo bm -j DROP --from 40 --to 300
      iptables -t raw -C PREROUTING -p udp --sport 53 -m string --hex-string "|2a022698a00000000000000000000110|" --algo bm -j DROP --from 40 --to 300 ||
      iptables -t raw -I PREROUTING -p udp --sport 53 -m string --hex-string "|2a022698a00000000000000000000110|" --algo bm -j DROP --from 40 --to 300
      


  1. dolcom
    12.08.2017 09:10

    Весьма интересная статья: открыла мне глаза на то, как блокируется доступ к сайтам. Ранее не задумывался. Естественно, после прочтения побежал испытывать представленные в статье утилитки: Blockcheck'ом выяснил, что провайдер блокирует доступ по IP, соответственно, скачал попытался скачать ReQrypt. Так как сайт reqrypt.org заблокирован, утилитка работать не будет, если верить схеме работы и её описанию. В итоге, reqrypt скачал через прокси. Запустил и вуаля — не работает. Решил проверить GoodbyeDPI на деле. Запустил, попробовал открыть незаблокированный сайт и посмотреть заголовки: заголовки не видоизменены (проверял chrom'ом). Вердикт: утилиты более не эффективны (по крайней мере для обхода блокировок провайдера Telenet)


    1. ValdikSS Автор
      12.08.2017 09:11

      Сервер ReQrypt находится на другом IP-адресе, не связанным с сайтом, он не заблокирован. Приложите полный вывод Blockcheck, чтобы делать какие-то выводы.


    1. eov
      12.08.2017 09:21

      Я так вижу, что блокировка по IP выполняется мелкими операторами, которые не могут себе позволить потратиться на DPI. Мой домашний провайдер точно блочит по IP. Они сами сказали, когда я переписывался с поддержкой после того, как стал недоступен Хабр и Гик (их IP адреса тоже на какое-то время попали в DNS одного ресурса из списка РКН).


  1. Blogoslov
    12.08.2017 09:12

    Статья — бомба. Автору огромный респект (жаль, что нет возможности плюсануть пару плюсиков в карму) за техническое разъяснение тонкостей работы DPI.
    Всегда интересно было узнать, а как там все блокируется. Оказывается, что много подводных камней в работе DPI и на самом деле это все технические недочеты, на программном уровне, который можно устранить новой прошивкой. Все эти неточности с парсерами и разбивками пакетов — ведь это тоже можно предусмотреть, но тк это провайдерское оборудование, то чуется все это не скоро исправится и можно пользоваться этим обходным путем достаточно долго.


  1. TerraV
    12.08.2017 10:29
    +11

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


    1. ivan386
      12.08.2017 13:32

      Цензура распространяется потихоньку и на другие страны. Это очень удобный инструмент для политиков. С ней надо бороться.


      1. TerraV
        12.08.2017 13:39
        +4

        Я имею возможность купить козу, но не имею желания. Я имею желание купить автомобиль но не имею возможности. Давайте все-таки смотреть на мир трезво, это продлевает жизнь. Сейчас бороться в России с цензурой это все равно что бороться с ветряными мельницами. Но даже не смотря на бессмыслицу я уважаю таких людей. А вы лично к ним относитесь? В скольки политических акциях поучаствовали за последние 3 года? А то призывы призывами а дел как правило нет.


        1. ivan386
          12.08.2017 13:48

          Я техническими и просветительскими методами борюсь с цензурой.


          1. TerraV
            12.08.2017 13:51
            +6

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


            1. ivan386
              12.08.2017 16:11

              Технические решения противостоят цензуре здесь и сейчас. Приведите примеры эффективности ваших методов.


              1. TerraV
                12.08.2017 18:13
                +3

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


                1. ivan386
                  12.08.2017 18:43

                  Я естественно спрашивал про трактор. Это можно по вашему назвать борьбой с цензурой?


                  1. TerraV
                    12.08.2017 18:54
                    +4

                    Я вроде бы довольно ясно сформулировал отношение к борьбе с цензурой в России. Трактор это не способ борьбы, это способ обхода блокировок. Я понимаю что это никак не влияет на ситуацию, но мне приятно осознавать что теперь я ни единым рублем не поддерживаю Роскомнадзор.


                    1. ivan386
                      12.08.2017 19:40
                      -2

                      Но даже не смотря на бессмыслицу я уважаю таких людей. А вы лично к ним относитесь? В скольки политических акциях поучаствовали за последние 3 года?

                      Какие акции? Они более эффективны?


  1. fukkit
    12.08.2017 11:18

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


    1. ivan386
      12.08.2017 13:41
      +1

      Этим способам 100 лет в обед и не исправили: Изучаем deep packet inspection у RETN 2013г.


      1. fukkit
        12.08.2017 17:14

        Дело не в возрасте способов, а в грамотном пиаре на профильном ресурсе.

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

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


  1. S-trace
    12.08.2017 11:22

    iptables -A FORWARD -p tcp --sport 443 -m u32 --u32 "0x0=0x45000028 && 0x4=0x10000" -m comment --comment "Rostelecom HTTPS" -j DROP


    Для настройки оконечного устройства заменить FORWARD на INPUT


    1. ValdikSS Автор
      12.08.2017 11:29

      У вас плохое правило, с ним могут перестать работать некоторые сайты, которые не выставляют бит «Don't Fragment» (хотя, правда, именно в этом случае это маловероятно).
      Нужно проверять и TCP Identification, и TCP.RST = 1, и только в первых нескольких пакетах в TCP-сессии.
      У меня так:

      iptables -A FORWARD -p tcp --sport 443 -m connbytes --connbytes-dir reply --connbytes-mode packets --connbytes 1:3 -m u32 --u32 "0x4=0x10000 && 0x1E&0xFFFF=0x5004" -m comment --comment "Rostelecom HTTPS" -j DROP


      1. S-trace
        12.08.2017 11:37

        Спасибо, буду теперь знать!


  1. rd_nino
    12.08.2017 11:37

    Возможно я туплю, но я запустил эту программу, попробовал — да, работает. Оставил работающей и у меня прекратила обновляться страница хабра. :) Выключил — хабр открывается, включил — не открывается.
    Но в любом случае — автору программы спасибо! Это решение лучше, чем остальные. (по крайней мере для меня).


    1. ValdikSS Автор
      12.08.2017 12:46

      Предоставьте больше информации: как конкретно не открывается, выдает какую-то ошибку, или бесконечно долго загружается?


      1. rd_nino
        12.08.2017 21:30

        Смотрю страницу этой статьи в FireFox.
        Запускаю программу со следующими параметрами (ключи -4 -a).
        Block passive: 1, Fragment HTTP: 0, Fragment HTTPS: 0, hoSt: 1, Host no space: 1, Additional space: 1

        Нажимаю в браузере обновить страницу — идёт бесконечная загрузка и всё… Дольше 2 минут ждать не стал.
        Выключаю программу, ещё раз нажимаю «обновить страницу» — всё ОК. Страница грузится.


  1. inakrin
    12.08.2017 11:38

    А в Китае тоже работает?


    1. ValdikSS Автор
      12.08.2017 12:47

      Сомневаюсь.


  1. zumpel
    12.08.2017 14:19

    Подскажите пожалуйста, как запустить под win7 эту программу, я новичок в этом деле. Скачать то я ее скачал, а дальше не вижу exe-шник или bat-ник. Я так понимаю набор этих файлов надо каким-то образом «собрать»? Или подскажите ссылочку как это сделать, на сайте github я не разобрался, к сожалению…


    1. ValdikSS Автор
      12.08.2017 14:20

      Вы скачали исходники. Скомпилированная версия скачивается из раздела releases.


      1. zumpel
        12.08.2017 14:24

        Спасибо!


  1. pha
    12.08.2017 14:26

    Тут даже аддон для firefox кто-то делал с частью функционала (про host и пробел).


  1. zumpel
    12.08.2017 14:31

    Хотел бы поинтересоваться, проверил своего провайдера (билайн) программой Blockchek, выдал результат:
    [!] Результат:
    [] Ваш провайдер полностью блокирует доступ к HTTPS-сайтам из реестра.

    Что это означает «из реестра»?


    1. ValdikSS Автор
      12.08.2017 14:37

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


      1. zumpel
        12.08.2017 14:40

        понял, спасибо


      1. GreatWizard
        12.08.2017 18:38

        Для таких случаев есть возможность обхода?


        1. ValdikSS Автор
          12.08.2017 18:43

          ReQrypt.


        1. Tomok
          13.08.2017 09:50

          Если сам ip-адрес не заблокирован, то можно попробовать зайти на https://ip-адрес/ и передать нужные заголовки для сайта, например, плагином для firefox Header Tool правилом:


          @108.174.10.14
          Host:www.linkedin.com
          Referer:https://www.linkedin.com

          Для удобства, можно придумать себе любой домен и намапить его на адрес заблокированного ресурса в hosts и отредактировать правило header tool'а.


          1. ValdikSS Автор
            13.08.2017 09:50

            Это будет работать только в том случае, если на IP-адресе только один домен, и веб-сервер настроен так, что сайт доступен с любым Host.


            1. Tomok
              13.08.2017 12:09

              А адреса cloudflare именно так настроены? Ведь с одного их адреса можно получить разные сайты, которые там хостятся, меняя host.


              1. ivan386
                14.08.2017 00:06
                -1

                Протестировал CloudFlare используя proxy.pac.


                function FindProxyForURL( url, host)
                {
                 if (host == "blocked.example")
                  return "https allowed.example;";
                 else
                  return "DIRECT";
                }

                Способ работает если целевой домен и домен прикрытия записаны в одном сертификате. Иначе ошибка 403.


                Такой способ использовал Signal:
                Мобильное приложение Signal обходит государственную блокировку, пропуская трафик через Google App Engine


                Как понятно из иллюстрации внизу, схема предусматривает использование промежуточной «крыши» — это сервер фронтенда на промежуточном веб-сервисе. Для такой «крыши» используется легальный посторонний домен. Для этого подходят домены различных облачных сервисов, которые пропускают трафик. Самый надёжный — это домен Google.
                image
                Схема обхода государственной цензуры через крышевание доменов, из научной работы 2015 года


                1. ivan386
                  14.08.2017 14:31

                  Алгоритм действий такой.


                  1. Заходим на sslchecker
                  2. Вводим заблокированный домен
                  3. В поле SAN выбираем рабочий не заблокированный домен
                  4. Проверяем выбранный домен(должен открываться по https)
                  5. Подставляем домены в proxy.pac скрипт соответственно

                  function FindProxyForURL(url, host)
                  {
                   if (host == "[заблокированный домен]" && shExpMatch(url, "http:*"))
                    return "HTTPS [не блокируемый домен];";
                   else
                    return "DIRECT";
                  }

                  Данный скрипт сработает для адреса http://[заблокированный домен]


    1. edogs
      12.08.2017 14:39

      http://eais.rkn.gov.ru/



  1. i_told_you_so
    12.08.2017 14:42
    +1

    Фокус с iptables не сработал. Наверное, мой провайдер закрывает соединение на удалённом хосте.

    Но зато у меня сработало разбиение «GET» на два пакета, например «G» и «ET». Пропатчил Firefox:

    в файле nsSocketTransport2.cpp заменяем

        int32_t n = PR_Write(fd, buf, count);
    
    на
        int32_t n;
        if( count>4 && buf[0] == 'G' && buf[1] == 'E' && buf[2] == 'T' && buf[3] == ' ')
        {
        	n = PR_Write(fd, buf, 1);
        	if( n == 1 ) {
        		int32_t n1 = PR_Write(fd, buf+1, count-1);
        		if(n1 == count-1) n += n1;
        		else n=n1;
        	}
        } else {
        	n = PR_Write(fd, buf, count);
        }
    


    1. mayorovp
      12.08.2017 14:46

      Э… какая-то у вас странная проверка на n1 стоит.


      Вот так правильнее:


      if (n1 < 0) n = n1;
      else n += n1;

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


      1. mayorovp
        12.08.2017 14:52

        UPD: хотя при отключенном HTTP pipelining алгоритм Нейгла можно не отключать.


      1. ivan386
        12.08.2017 14:54

        А я то думаю почему первый пакет отправляется отдельно а остальные склеиваются. Интересно как эту опцию отключить?


        1. ivan386
          12.08.2017 14:57

          Сам спросил и сам ответил: TCP_NODELAY


        1. mayorovp
          12.08.2017 14:57
          +1

          https://linux.die.net/man/2/setsockopt
          https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms740476(v=vs.85).aspx


          см. параметр TCP_NODELAY


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


  1. zumpel
    12.08.2017 15:04

    Все работает, спасибо, у меня правда только с параметром: -3 или -4


  1. akzhan
    12.08.2017 15:44
    -2

    ValdikSS, вы на чем это все компилируете?


    Код вообще не рабочий, вы попробуйте его сбилдить с clang.


    https://github.com/basil00/reqrypt/issues/4


    1. ValdikSS Автор
      12.08.2017 17:20

      Вам уже ответили в issue, что gcc это симлинк на clang на macOS.


      1. akzhan
        12.08.2017 17:22
        -1

        то есть, вы считаете, что некорректный код, который можно скомпилировать GCC, типа ОК?


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


        Но вам решать.


        P.S.: прочел ваш ответ в issue, все ок.


        1. ValdikSS Автор
          12.08.2017 17:32

          Я не разработчик ReQrypt. Код корректный, он использует массивы динамической длины, что поддерживается только в GCC.


        1. mayorovp
          12.08.2017 20:01
          +1

          В стандарте C99 VLA присутствуют, так что код совершенно корректен. То, что его не компилирует clang — это проблема clang. Ну и еще ваша :-)


          1. akzhan
            12.08.2017 22:44
            -1

            1. В стандарте C11 VLA уже вынесены из списка обязательных возможностей.
            2. Clang поддерживает VLA.
            3. VLAIS не поддерживаются и никогда не будут поддерживаться стандартом С.

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


  1. MonkAlex
    12.08.2017 20:30

    Попытался завести zapret на linux mint, но я нуб-нубом и что-то получаю не то:

    systemctl start zapret
    Failed to start zapret.service: Unit zapret.service not found.
    Откуда должен был взяться сервис?


    1. fukkit
      12.08.2017 22:07
      -2

      Подобный класс ошибок начинает распутываться с /etc/rc*, ну или маны почитать можно, если религия позволяет.


    1. Renaissance
      13.08.2017 00:00

      Юнит нужно сгенерировать вручную, описано в разделе «Пример установки -> ubuntu 16,debian 8».


  1. zumpel
    12.08.2017 22:57

    еще раз хочу вас поблагодарить за эту программку, дело в том, что запуская ее, интерент у меня стал работать гораздо шустрее и отзывчивее (серфинг, открытие одновременно нескольких вкладок в браузере, скачка, снизились даже пинги в wot!). не знаю с чем это связанно, но думаю что у провайдера (билайн) стоят какие то тормозные «фильтра», что непосредственно и влияет на скорость работы инета


  1. TriAn
    12.08.2017 23:20

    Спасибо за интересное исследование. Но у меня осталась пара вопросов после прочтения материала:


    1. Как вы "фрагментируете" https?
    2. В статье вообще не освещены механизмы работы DPI с https трафиком. На сколько я понимаю без того, чтобы в DPI был установлен валидный (с точки зрения браузера) сертификат, организовать глубокую инспекцию невозможно, и значит нужно блокировать весь https по IP. Тогда опять же в каких случаях ваше ПО помогает обойти DPI для https?


    1. TriAn
      12.08.2017 23:41

      Отдельный вопрос в том, как вообще получить такой доверенный сертификат, который позволяет выдавать сертификаты на любые веб ресурсы. Мне кажется, что производителю DPI в таком случае нужно очень тесно дружить с разработчиками ОС и браузеров.


      1. ivan386
        13.08.2017 00:31

        DPI вычитывает Server Name Indication. Он идёт открытым текстом. Так что сертификат не нужен.


        1. TriAn
          13.08.2017 11:41

          Спасибо! Не думал, что SNI идёт открытым текстом. Хотя это логично было бы предположить.


          1. sumanai
            13.08.2017 20:18
            +1

            В TSL 1.3 его предлагают зашифровать, но когда он ещё придёт.


            1. ivan386
              13.08.2017 21:46

              На сколько я понял будет два серфиката. Один общий а второй конкретного сайта. Общий будет также открыто запрашиватся. А сертификат сайта будет запрашиватся под шифрованием.


            1. TriAn
              14.08.2017 22:28

              Что-то не нашел в драфте RFC упоминание о шифрованном SNI. Только лишь в случае 0RTT-Data, а он работает только в случае переиспользование предыдущей уже установленной сессии. Так как SNI это часть Client Hello, то что-то я не представляю как его можно зашифровать до обмена ключами.


              1. ivan386
                14.08.2017 22:44

                Есть обсуждение: Encrypted SNI


      1. bgBrother
        13.08.2017 00:31

        Отдельный вопрос в том, как вообще получить такой доверенный сертификат, который позволяет выдавать сертификаты на любые веб ресурсы.
        Нужно быть доверенным центром сертификации (Certification authority, CA). Не самое трудное.

        производителю DPI в таком случае нужно очень тесно дружить с разработчиками ОС и браузеров
        Смею предположить, что производителю DPI никогда не позволят использовать корневой сертификат для дешифрации трафика. Сертификат скорее всего отзовут. Подобное было в Китайском Фаерволе (ссылку найти не смог, но есть вот это)


        1. TriAn
          13.08.2017 11:49

          Да, все верно. Но мне кажется, что достаточно проблематично стать таким CA и выдавать сертификаты на любые домены, чтобы при этом сертификат такого CA не заблокировал, например, Google в своём браузере. Производитель браузера может затем и надавить на root CA подписавший такой сертификат. Думаю root CA под угрозой блокировки своего сертификата быстренько отзовет сертификат выданный для CA поставщика DPI решений.


    1. bgBrother
      13.08.2017 00:11

      без того, чтобы в DPI был установлен валидный (с точки зрения браузера) сертификат, организовать глубокую инспекцию невозможно, и значит нужно блокировать весь https по IP.

      Скорее всего возможно и по домену заблокировать.
      HTTPS пакет к vk.com в ПО Charles
      image


    1. ValdikSS Автор
      13.08.2017 00:58

      Как вы «фрагментируете» https?
      Так же, как и HTTP — изменением TCP Window Size.
      В статье вообще не освещены механизмы работы DPI с https трафиком.
      Большинство DPI просто проверяют значение TLS SNI, и блокируют по домену.


      1. TriAn
        13.08.2017 11:53

        Так же, как и HTTP — изменением TCP Window Size.

        Т.е. если я правильно понимаю, ПО фрагментирует не HTTP заголовок (которой идёт уже зашифрованным), а сообщение TLS Client Hello?


        1. ValdikSS Автор
          13.08.2017 11:54

          Да.


  1. zxsavage
    13.08.2017 00:58

    В Казахстане (Казахтелеком) работает. Частично правда.
    -p -f 2 -e 40 открывается часть сайтов (flickr.com, например).
    Не открывается к примеру archive.org, в т.ч. с параметрами "-1" и "-1 -a" — превышено время ожидания.


  1. Lomuel
    13.08.2017 00:58

    Словил bluescreen через пару секунд после запуска goodbyedpi.exe -1 -a
    WIndows 8.1
    Консоль была открыта от пользователя.

    В чем может быть проблема?


    1. ValdikSS Автор
      13.08.2017 01:01

      В драйвере WinDivert. Попробуйте последнюю версию 1.2, во всех трех вариантах: MSVC, WDDK, MINGW. Просто подмените sys и dll-файлы. Каждый раз нужно перезагружаться. Заведите issue по результатам, пожалуйста.


  1. alkoro
    13.08.2017 01:01

    Как я понял, эта программа бесполезна, если в браузере используется прокси-подключение. Что будет, если эту программу запустить прямо на прокси-сервере с win2008r2+TMG2010? Не будет ли проблем или конфликтов драйвера Windivert и TMG?

    Ну а дома всё прекрасно «работает» (РТ) — даже с единственным ключом "-p". Пока отлаживал, обнаружил дополнительную блокировку по DNS. Если использовать открытые DNS, то до вывода заглушки дело даже не доходит — host not found. Так что DNScrypt+GoodByDPI.


    1. ValdikSS Автор
      13.08.2017 01:01

      Попробуйте, не знаю, будет ли работать.


      1. alkoro
        14.08.2017 06:16

        Отчитываюсь, добравшись до раб. места… Никаких заморочек с Win2008R2/TMG2010, установил, запустил, никаких перезапусков служб, работает сразу. Провайдер (не общероссийский) выдаёт местную заглушку, но помогает просто ключ -p без модификаций заголовков. Также необходим DNSCrypt, видимо пров. тем самым просто облегчает себе работу.
        зы. Осталось потестировать на нагрузке, когда юзеры толпой навалятся на проксик.


  1. Bonio
    13.08.2017 01:13

    ReQrypt у меня не заработал, как я не пытался.
    Интересно, а его можно перенести с компьютера на роутер или на отдельный сервер? Чтобы работало не на единственном компьютере, а на всех устройствах в сети.


    1. ValdikSS Автор
      13.08.2017 01:15

      Какой у вас провайдер и роутер? У вас ReQrypt может не заработать только в том случае, если провайдер блокирует по IP-адресу в том числе и входящий трафик, или у вас симметричный NAT. Подразумевается, что у вас с DNS все в порядке, а если не в порядке, то вы используете DNSCrypt.


      1. Bonio
        13.08.2017 01:23

        Провайдер Билайн, ip адреса серверов ReQrypt пигнуются, DNSCrypt использую. Роутер TP-Link TL-WR1043N с OpenWRT прошивкой.
        А про тип NAT не скажу, не знаю, но он есть, провайдер выдает только серые ip. Как это можно узнать?


        1. ValdikSS Автор
          13.08.2017 09:46

          Вы же включили ReQrypt в веб-интерфейсе?


          1. Bonio
            13.08.2017 09:48

            Конечно же. И настройки по всякому изменял. Не работает. Проверял на рутрекере. Может я чего-то не учел? Программу же просто запустить надо и все?


            1. ValdikSS Автор
              13.08.2017 10:01

              Да, достаточно просто запустить.
              Скачайте stuntman, запустите так:

              stunclient --mode behavior stun.ekiga.net

              И приложите вывод.


              1. Bonio
                13.08.2017 10:05

                stunclient --mode behavior stun.ekiga.net
                $ stunclient --mode behavior stun.ekiga.net
                Binding test: success
                Local address: 172.16.xx.xx:25479
                Mapped address: xx.xx.xx.xx:25479
                Behavior test: success
                Nat behavior: Endpoint Independent Mapping
                


                1. ValdikSS Автор
                  13.08.2017 10:13

                  А если TTL увеличить? Поставьте 5, например.


                  1. Bonio
                    13.08.2017 11:04

                    Я разобрался. reqrypt работает, но только на заблокированных http url, например, вот на этом. Заблокированные https сайты, такие, как рутрекер, и заблокированные по ip, такие, как bt.t-ru.org, не открываются и с reqrypt.
                    Это нормально?


                    1. ValdikSS Автор
                      13.08.2017 11:07

                      Возможно, ваш провайдер блокирует и входящий трафик с заблокированных IP-адресов, увы.


                      1. Bonio
                        13.08.2017 11:14

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


                        1. ValdikSS Автор
                          13.08.2017 11:14

                          Я пробовал на 6 разных провайдерах, и все блокировали только исходящий.


                          1. Bonio
                            13.08.2017 11:33

                            А вот, что интересно, ip рутрекера у меня не заблокирован, на 195.82.146.214 я могу зайти браузером. То есть там не по ip блокировка, а по имени. И все равно он через reqrypt не открывается.


                          1. rogoz
                            13.08.2017 15:41

                            В копилку глухих блокировок. Это на роутере помогает полностью:

                            iptables
                            -A PREROUTING --ipv4 -i ppp0 -p tcp -m tcp --tcp-flags RST RST --sport 443 -m ttl --ttl-eq=62 -j DROP
                            -A PREROUTING --ipv4 -i ppp0 -p tcp -m tcp --tcp-flags RST RST --sport 443 -m ttl --ttl-eq=63 -j DROP
                            -A PREROUTING --ipv4 -i ppp0 -p tcp -m tcp --tcp-flags RST RST --sport 80 -m ttl --ttl-eq=62 -j DROP
                            -A PREROUTING --ipv4 -i ppp0 -p tcp -m tcp --tcp-flags RST RST --sport 80 -m ttl --ttl-eq=63 -j DROP
                            -A PREROUTING --ipv4 -i ppp0 -p tcp -m tcp --sport 80 -m ttl --ttl-eq=62 -m length --length 384 -j DROP
                            -A PREROUTING --ipv4 -i ppp0 -p tcp -m tcp --sport 80 -m ttl --ttl-eq=63 -m length --length 384 -j DROP


          1. Bonio
            13.08.2017 09:58

            Наврал я вам, что ip пингуются, прошу прощения. Но, похоже, что они они просто на icmp запросы не отвечают, судя по tracert. C запущенным reqrypt никакие сайты не открываются.


  1. sumanai
    13.08.2017 08:20
    -1

    Эх, на XP не запускается.


  1. coalesce
    13.08.2017 09:14

    Кинозал.тв не открывается, хотя рутрекер заработал


  1. Infactum
    13.08.2017 09:33

    К сожалению не работает. Проверено со всеми вариантами опций. В том числе в связке с DNSCrypt.

    blockcheck
    [O] Тестируем обход DPI
    Пробуем способ «фрагментирование заголовка, hoSt и отсутствие пробела одновременно» на pbooru.com
    [?] Сайт открывается
    Пробуем способ «отсутствие пробела между двоеточием и значением заголовка Host» на pbooru.com
    [?] Сайт открывается
    Пробуем способ «перенос строки перед GET» на pbooru.com
    [] Сайт не открывается
    Пробуем способ «необычный порядок заголовков» на pbooru.com
    [] Сайт не открывается
    Пробуем способ «фрагментирование заголовка» на pbooru.com
    [] Сайт не открывается
    Пробуем способ «точка в конце домена» на pbooru.com
    [?] Сайт открывается
    Пробуем способ «дополнительный пробел после GET» на pbooru.com
    [] Сайт не открывается
    Пробуем способ «заголовок hoSt вместо Host» на pbooru.com
    [] Сайт не открывается
    Пробуем способ «перенос строки в заголовках в UNIX-стиле» на pbooru.com
    [?] Сайт открывается
    Пробуем способ «табуляция в конце домена» на pbooru.com
    [] Сайт не открывается
    Пробуем способ «фрагментирование заголовка, hoSt и отсутствие пробела одновременно» на rutracker.org
    [] Ошибка: timeout('timed out',)
    Пробуем способ «отсутствие пробела между двоеточием и значением заголовка Host» на rutracker.org
    [] Ошибка: timeout('timed out',)
    Пробуем способ «перенос строки перед GET» на rutracker.org
    [] Ошибка: timeout('timed out',)
    Пробуем способ «необычный порядок заголовков» на rutracker.org
    [] Ошибка: timeout('timed out',)
    Пробуем способ «фрагментирование заголовка» на rutracker.org
    [] Ошибка: timeout('timed out',)
    Пробуем способ «точка в конце домена» на rutracker.org
    [] Ошибка: timeout('timed out',)
    Пробуем способ «дополнительный пробел после GET» на rutracker.org
    [] Ошибка: timeout('timed out',)
    Пробуем способ «заголовок hoSt вместо Host» на rutracker.org
    [] Ошибка: timeout('timed out',)
    Пробуем способ «перенос строки в заголовках в UNIX-стиле» на rutracker.org
    [] Ошибка: timeout('timed out',)
    Пробуем способ «табуляция в конце домена» на rutracker.org
    [] Ошибка: timeout('timed out',)

    [] Ваш провайдер подменяет DNS-записи, но не перенаправляет сторонние IPv4 DNS-серверы на свой.
    Вам поможет смена DNS, например, на Яндекс.DNS 77.88.8.8 или Google DNS 8.8.8.8 и 8.8.4.4.
    [] Ваш провайдер полностью блокирует доступ к HTTPS-сайтам из реестра.
    [] У вашего провайдера «обычный» DPI. Вам поможет HTTPS/Socks прокси, VPN или Tor.


    1. ValdikSS Автор
      13.08.2017 09:46

      Приложите весь вывод Blockcheck.


      1. Infactum
        13.08.2017 10:05

        Blockcheck
        BlockCheck v0.0.9.5
        Для получения корректных результатов используйте DNS-сервер провайдера и отключите средства обхода блокировок.

        Проверка работоспособности IPv6: IPv6 недоступен.
        IP: 176.226.179.xxx, провайдер: Intersvyaz-2 JSC Route/ Интерсвязь

        [O] Тестируем IPv4 DNS
        Через системный DNS: ['5.178.68.100', '78.29.1.40', '78.29.1.40', '78.29.1.40', '78.29.1.40', '78.29.1.40']
        Через Google DNS: ['104.20.134.45', '104.20.135.45', '104.24.10.70', '104.24.11.70', '184.173.146.95', '195.8.215.136', '195.82.146.214', '5.178.68.100']
        Через Google API: ['104.20.134.45', '104.20.135.45', '104.24.10.70', '104.24.11.70', '184.173.146.95', '195.8.215.136', '195.82.146.214', '5.178.68.100']
        Несуществующий DNS не вернул адресов (это не ошибка)
        [] DNS-записи подменяются
        [?] DNS не перенаправляется

        [O] Тестируем HTTP (по настоящим IP-адресам сайтов)
        Открываем http://furry.booru.org/
        [] Сайт не открывается, пробуем через прокси
        [?] Сайт открывается через прокси
        Открываем http://a.putinhuylo.com/
        [?] Сайт открывается
        Открываем http://pbooru.com/
        [?] Сайт открывается
        Открываем http://pbooru.com/index.php?page=post&s=view&id=303026
        [] Сайт не открывается, пробуем через прокси
        [?] Сайт открывается через прокси
        Открываем http://furry.booru.org/index.php?page=post&s=view&id=111173
        [] Сайт не открывается, пробуем через прокси
        [?] Сайт открывается через прокси
        Открываем http://rutracker.org/forum/index.php
        [] Сайт не открывается, пробуем через прокси
        [?] Сайт открывается через прокси

        [O] Тестируем HTTPS
        Открываем https://www.dailymotion.com/
        [] Сайт не открывается
        Открываем https://lolibooru.moe/
        [] Сайт не открывается
        Открываем https://e621.net/
        [] Сайт не открывается
        Открываем https://rutracker.org/forum/index.php
        [] Сайт не открывается

        [O] Тестируем обход DPI
        Пробуем способ «фрагментирование заголовка, hoSt и отсутствие пробела одновременно» на pbooru.com
        [?] Сайт открывается
        Пробуем способ «отсутствие пробела между двоеточием и значением заголовка Host» на pbooru.com
        [?] Сайт открывается
        Пробуем способ «перенос строки перед GET» на pbooru.com
        [] Сайт не открывается
        Пробуем способ «необычный порядок заголовков» на pbooru.com
        [] Сайт не открывается
        Пробуем способ «фрагментирование заголовка» на pbooru.com
        [] Сайт не открывается
        Пробуем способ «точка в конце домена» на pbooru.com
        [?] Сайт открывается
        Пробуем способ «дополнительный пробел после GET» на pbooru.com
        [] Сайт не открывается
        Пробуем способ «заголовок hoSt вместо Host» на pbooru.com
        [] Сайт не открывается
        Пробуем способ «перенос строки в заголовках в UNIX-стиле» на pbooru.com
        [?] Сайт открывается
        Пробуем способ «табуляция в конце домена» на pbooru.com
        [] Сайт не открывается
        Пробуем способ «фрагментирование заголовка, hoSt и отсутствие пробела одновременно» на rutracker.org
        [] Ошибка: timeout('timed out',)
        Пробуем способ «отсутствие пробела между двоеточием и значением заголовка Host» на rutracker.org
        [] Ошибка: timeout('timed out',)
        Пробуем способ «перенос строки перед GET» на rutracker.org
        [] Ошибка: timeout('timed out',)
        Пробуем способ «необычный порядок заголовков» на rutracker.org
        [] Ошибка: timeout('timed out',)
        Пробуем способ «фрагментирование заголовка» на rutracker.org
        [] Ошибка: timeout('timed out',)
        Пробуем способ «точка в конце домена» на rutracker.org
        [] Ошибка: timeout('timed out',)
        Пробуем способ «дополнительный пробел после GET» на rutracker.org
        [] Ошибка: timeout('timed out',)
        Пробуем способ «заголовок hoSt вместо Host» на rutracker.org
        [] Ошибка: timeout('timed out',)
        Пробуем способ «перенос строки в заголовках в UNIX-стиле» на rutracker.org
        [] Ошибка: timeout('timed out',)
        Пробуем способ «табуляция в конце домена» на rutracker.org
        [] Ошибка: timeout('timed out',)

        [!] Результат:
        [] Ваш провайдер подменяет DNS-записи, но не перенаправляет сторонние IPv4 DNS-серверы на свой.
        Вам поможет смена DNS, например, на Яндекс.DNS 77.88.8.8 или Google DNS 8.8.8.8 и 8.8.4.4.
        [] Ваш провайдер полностью блокирует доступ к HTTPS-сайтам из реестра.
        [] У вашего провайдера «обычный» DPI. Вам поможет HTTPS/Socks прокси, VPN или Tor.


        1. ValdikSS Автор
          13.08.2017 10:10

          Я не вижу ошибки в Blockcheck. Ваш провайдер не подменяет DNS-запросы, если использовать сторонний DNS-сервер. DNSCrypt вам не обязателен. И, похоже, провайдер блокирует часть сайтов по IP-адресу.


  1. Vizavi
    13.08.2017 10:19
    -7

    Как мило, ANTI DPI от человека стоящего за сервисом по сливу юзеров теоррнетов — iknowwhatyoudownload.
    Просто хрестоматийное лицемерие.


    1. ValdikSS Автор
      13.08.2017 10:29
      +5

      Я не причастен к iknowwhatyoudownload, не знаю, почему вы думаете иначе.
      Но, в любом случае, если что-то технически можно сделать, сервис для этого появится, и ни в чьих силах не будет убить все форки и зеркала.


    1. ExplosiveZ
      13.08.2017 12:35

      Такой сервис любой школьник сделать может, клеветать плохо.


    1. ivan386
      13.08.2017 19:18

      Между прочим отличный сервис. Я там смотрю что смотрят соседи. По имени файла нахожу на btdig.com. Тем более будет быстрее с локалки.


  1. deustech
    13.08.2017 12:48

    А есть альтернативы модулю u32 для iptables?
    на большинстве томато роутерах на arm с ним сложности:

    x_tables: ip_tables: u32.0 match: invalid size 2032 (kernel) != (user) 1984


    1. ValdikSS Автор
      13.08.2017 12:48

      Вероятно, у вас что-то не так с модулями iptables. Обращайтесь к создателю прошивки.


    1. u007
      13.08.2017 18:02

      Можно вот так, но это сугубо в качестве эксперимента

      iptables -A INPUT --protocol TCP -i eth0 --sport 80 -m ttl --ttl-eq 62 -j DROP

      От меня до провайдерского дпи be101.tf01.Moscow.gldn.net ровно два хопа. Это меньше, чем до любого другого сайта, правда, есть сайты, которые ставят изначальный ttl больше 64, и тут можно перебдеть. Но таких мало.


      1. ivan386
        13.08.2017 19:23

        TTL=64 (Linux, Mac, Android, iOS), TTL=128 (Windows).

        Это сайты с Windows хостинга. Но врятли у них TTL будет меньше 64.


  1. u007
    13.08.2017 18:18
    -3

    А вообше, я считаю, все эти блокировки только на пользу. Посмотрите, сколько людей повысили свои технические навыки! Потрогали iptables, поковыряли tcp/ip, полистали спецификации. А вы ругаетесь, мол, роскомпозор, бешеный принтер… Всё к лучшему!


    1. ivan386
      13.08.2017 21:36
      +1

      Ещё списочек годных сайтов с картинками собирает.


      1. u007
        13.08.2017 21:51

        Если бы не BlockCheck, так бы и не знал, сколько интересного в сети водится. Хорошую утилиту Valdik написал ;)

        Кстати, кто подскажет, отчего так: набираю rutracker.org./ а firefox лишнюю точку… убирает. С другими сайтами такого нет. Непонятно.


        1. ivan386
          13.08.2017 22:40
          +1

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


          1. u007
            13.08.2017 23:13

            А, вспомнил. Спасибо. 301 же. Когда-то давно сабж отдал 301-й редирект, а браузер его закешировал… Теперь все запросы с точкой исправляются сразу, даже до отправки в сеть.


    1. DarkByte
      14.08.2017 09:18
      +1

      А то! Низкие зарплаты тоже к лучшему, меньше будут ездить отдыхать — меньше возможностей покалечить себя. Кушать меньше тоже к лучшему, британские учёные из журнала woman ведь доказали, что голодание — это полезно для здоровья. Как же плохие дороги не забыть — ведь по ним не только враг не проедет, на своих иномарках, так ещё и гонять не будут — тоже к лучшему! Нужно во всём искать хорошее!


      1. u007
        14.08.2017 10:09
        +1

        Как же плохие дороги не забыть
        Дороги… Дороги вообще уберём. Меньше машин — больше велосипедистов. Город — людям!


  1. firk
    14.08.2017 13:43
    -2

    Больше пиара способам обхода блокировок — больше вероятность исправления этих способов. И я не понимаю, чего все так радуются этой статье.
    Технически да, интересно, хотя в целом это и так было известно. Программа вида "просто скачай, запусти и работает" — плохо. Хотите сами пользоваться и подольше — лучше пользоваться тихо и не шуметь, и надеяться что у остальных пользователей тоже хватит ума не пиарить данную технологию. Хотите чтобы для всех — тут путь только законодательный есть (да, сложно стать тем кто влияет на законодательство, но всё остальное — вообще бесполезные или даже вредные действия в этом плане).


  1. eov
    14.08.2017 14:11
    +3

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


    В данном конкретном случае, не думаю, что ПО "Ревизор" научат проверять возможно ли описанным способом обходить блокировки или нет. Соответственно, DPI-и скорее всего дорабатывать не будут (зачем тратить бабки...). Только в случае если будут сформулированы конкретные технические требования к DPI и ВСЕХ операторов заставят купить "решение", ну скажем у Ростеха, тогда — Да.