Перейти к содержанию
Asterios

Средство обхода блокировок в РФ


7rozen

Рекомендуемые сообщения

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

Сделал форк всем известной программы zapret для обхода DPI, за основу взял официальный репозиторий zapret-win-bundle от уважаемого автора этой програмы bol-van'а и настройл его под астериос (сайт, апдейтер и игру). Для удобства использования и чтобы вам легче было разобраться, удалил всё лишнее, изменил структуру, добавил списки ip и доменов, пейлоады для фейк пакетов и пресеты для обхода блокировок.
 

Прежде всего вам нужно знать, что zapret позволяет обходить только блокировку по протоколам прикладного уровня L7 (7-й уровень модели OSI), блокировку по IP-адресу он не обходит. На данный момент случаев блокировки астериоса по IP-адресу замечено не было.
В случае с игрой блокировка выглядит так:

Скрытый текст

1.thumb.jpg.b80f57fd99a824b9d905d110bc8343db.jpg


В случае с апдейтером блокировка может выглядеть так:

Скрытый текст

2.thumb.jpg.d3b41bb7a4a30fa1c3a13d3debf51cbb.jpg

3.thumb.jpg.c6f46e4f79562a2f9f2a9aefe601712c.jpg

 

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

Пока что этот форк не является универсальным средством обхода блокировок и может не работать на некоторых провайдерах. Чтобы он стал более универсальным и работал на всех провайдерах потребуется время. 
В приоритете всегда будет работоспособность астериоса, работу остальных сервисов не гарантирую. 
Позже добавлю возможность обходить блокировки telegram, instagram, whatsapp, discord, различных ИИ и других популярных сервисов.
Правила обхода тестировались на провайдерах: Ростелеком, Билайн, Дом.ру (ЭР-Телеком), Зелёная Точка (МТС), Нетбайнет (МегаФон), Мегатон, Нео-телеком, Сампо.ру, ТелеНэт, Интеркомтел, Интерсвязь, Смолтелеком, Рэдком. Провайдер Транстелеком (ttk.ru) пока что ничего не блокирует, это вам на заметку.
 

Обязательно перед использованием zapret настройте DoH, это займет всего несколько минут. Это необходимо, потому что некоторые провайдеры используют DNS блокировки.
Гайд по настройке DoH: https://forum.asterios.in/topic/607015-nastrojka-dns-over-https-v-windows/
На примере Дом.ру (ЭР-Телеком) DNS блокировка выглядит так:

Скрытый текст

По скринам видно, что в DNS-ответе для доменов приходит IP-адрес, который принадлежит самому провайдеру Дом.ру (ЭР-Телеком) и естественно мы не сможем попасть по нему на нужные нам сервисы.

4.thumb.jpg.77f8e39c1d86d5ab3ee491a9b8d62f95.jpg

5.thumb.jpg.87fcccab50078809b11e854168c5d0dd.jpg

 

Список отличий от оригинального репозитория:

Скрытый текст
  • Удалены папки arm64, blockcheck, cygwin, tools, windivert-hide.
  • Драйвер и библиотека WinDivert из папки win7 перемещены в папку zapret-winws для совместимости с Windows 7. Папка win7 удалена.
  • Из папки zapret-winws удалены все *.cmd файлы и первая версия zapret - winws.exe, так как она больше не поддерживается разработчиком. Папки files, lua, windivert.filter перемещены в корневую папку.
  • Папка files разбита на 2 папки fakes и lists.
  • Папка zapret-winws переименована в bin.
  • В корневую папку добавлены 2 пресета для обхода блокировок.
  • В папку fakes добавлены пейлоады для фейковых пакетов.
  • В папку lists добавлены списки ip и доменов для фильтрации трафика.

 

 

Описание структуры:

Скрытый текст

bin\ - папка с основными файлами программы.

    winws2.exe - наша основная программа, zapret2 под Windows.

    WinDivert64.sys - драйвер для захвата и фильтрации сетевых пакетов.
    WinDivert.dll - библиотека, которую использует winws2 для управления драйвером WinDivert.
    cygwin1.dll - библиотека-прослойка (POSIX-эмуляция), позволяющая коду, использующему системные вызовы Linux/Unix, работать в среде Windows, необходима, так как zapret изначально писался под Linux.
    killall.exe -  программа из cygwin для посылки Unix сигналов winws.
    elevator.exe - программа, которая запускает другие программы от имени администратора.
fakes\ - папка с пейлоадами для формирования фейковых пакетов.
lists\ - папка со списками ip и доменов для фильтрации трафика.
    ipset-*.txt - списки ip и подсетей.
    list-*.txt - списки доменов.
lua\ - папка с библиотеками lua, которые использует winws2.
windivert.filter\ - папка с дополнительными фильтрами трафика, пока что мы их не используем.
preset-all.cmd - пресет, который использует правила обхода почти для всего трафика.
preset-asterios.cmd - пресет, который использует правила обхода только для астериоса (сайт, апдейтер, игра).


Как работает DPI в РФ и основной принцип его обхода:

Скрытый текст

Прежде всего вы должны знать, что DPI у провайдеров в РФ работает по принципу "запрещено всё, кроме того, что разрешено". То есть он работает по белым спискам и разрешены протоколы L7 только из этого списка, а всё остально по умолчанию запрещено. Пока что в РФ нет единых белых списков, у разных провайдеров они свои. Также эти белые списки разные для отдельных ASN,CIDR,IP и даже для отдельных портов. Блокировки применяются не ко всему трафику, в основном это трафик, который идёт на зарубежные IP-адреса, но есть исключения и для IP-адресов в РФ. Для того чтобы можно было проанализировать трафик на наличие разрешенных и запрещенных протоколов, DPI пропускает часть трафика, обычно это 16-20kb, но я на примере апдейтера видел, что он пропускал и 30kb. Это, к слову, объясняет, почему на астериосе и в некоторых других играх, когда вы выбираете персонажа и начинает грузиться мир, происходит дисконнект.

 

Итак, исходя из всего этого, чтобы обойти DPI нам нужно сделать всего 2 вещи:

  1. Отправить фейковый пакет с протоколом, который разрешен DPI и сделать так, чтобы он прошел через сервер с DPI, но не дошел до конечного сервера или конечный сервер отбросил его до того, как он попал в приложение. Для этого в zapret есть функции фулинга (fooling). В случае с HTTP и TLS протоколами, на наличие разрешенных доменов проверяются поля Host и SNI соответственно.
  2. Замаскировать настоящие пакеты с протоколами, которые DPI способен распознать. Для этого применяются различные техники: фрагментация, фрагментация с изменением очередности отправки пакетов, замешивание с фейковыми пакетами и другие. Но иногда вместо маскировки реальных пакетов, можно попробовать забить кэш DPI фейковыми пакетами с разрешенным протоколом или вообще мусором, то есть отправить те самые 30kb, которые DPI анализирует, чтобы вынести свой вердикт.

 

Мануал по zapret2: https://github.com/bol-van/zapret2/blob/master/docs/manual.md

 

Быстрый старт:

Скрытый текст

Для начала отключаем VPN или прокси, если они включены.
Чтобы отключить прокси для апдейтера и/или игры, достаточно в папке с игрой в файлах Asterios.ini и/или asterios\AsteriosGame.ini в секции proxy изменить значение в параметре Protocol на NONE или оставить его пустым.
К примеру Protocol=NONE или Protocol= 
Не забываем, что после изменения и сохранения файлов Asterios.ini и/или AsteriosGame.ini нужно будет перезапустить или пока что закрыть апдейтер и/или клиент, если они были запущены.

 

А также не забываем настроить DoH: https://forum.asterios.in/topic/607015-nastrojka-dns-over-https-v-windows/

 

Ссылка на репозиторий: https://github.com/7rozen/zapret-asterios
Прямая ссылка для скачивания:  https://github.com/7rozen/zapret-asterios/archive/refs/heads/main.zip

Скачиваем программу и разархивируем в любое удобное для вас место.
Запускаем нужный вам пресет:
    preset-asterios.cmd - использует правила обхода блокировок только для астериоса. 
    preset-all.cmd - использует правила обхода блокировок для всего трафика, заработает астериос, ютуб и прочие сервисы, но пока что не все.
Не закрываем появившееся окно zapret2, пока оно запущено, работает обход DPI.
Пробуем войти в игру.
Отписываемся о результатах, указав своего провайдера.

 

Изменено пользователем 7rozen
Ссылка на комментарий
Поделиться на другие сайты

Добавлю еще, что в случае с апдейтером, нет смысла использовать --hostlist в правилах для HTTP-трафика, так как апдейтер фрагментирует HTTP-запросы, запрет не видит поле Host в запросе и, соответственно, не применяет к нему правила обхода. Вместо --hostlist используйте --ipset.

Лог winws2:

Скрытый текст

packet: id=68 len=91 outbound IPv6=0 IPChecksum=1 TCPChecksum=1 UDPChecksum=1 IfIdx=7.0
IP4: 10.211.1.5 => 172.67.150.188 proto=tcp ttl=128 sport=62965 dport=80 flags=AP seq=125674640 ack_seq=538516469
TCP: len=39 : 47 45 54 20 2F 66 75 6C 6C 2E 6C 69 73 74 2E 70 6E 67 3F 32 32 33 36 38 33 30 30 37 20 48 54 54 ... : GET /full.list.png?223683007 HTT ...
client mode desync profile/ipcache search target ip=172.67.150.188 port=80
using cached desync profile 5 (noname)
packet contains http_req payload
discovered l7 protocol
desync profile search for tcp ip=172.67.150.188 port=80 icmp=255:255 l7proto=http ssid='' hostname=''
desync profile 5 (noname) matches
dpi desync src=10.211.1.5:62965 dst=172.67.150.188:80 track_direction=out fixed_direction=out connection_proto=http payload_type=http_req
no lua functions in this profile
fixing tcp checksum
packet: id=68 reinject unmodified

 

packet: id=69 len=154 outbound IPv6=0 IPChecksum=1 TCPChecksum=1 UDPChecksum=1 IfIdx=7.0
IP4: 10.211.1.5 => 172.67.150.188 proto=tcp ttl=128 sport=62965 dport=80 flags=AP seq=125674679 ack_seq=538516469
TCP: len=102 : 48 6F 73 74 3A 20 63 64 6E 2E 61 73 74 65 72 69 6F 73 2E 74 6D 0D 0A 55 73 65 72 2D 41 67 65 6E ... : Host: cdn.asterios.tm..User-Agen ...
client mode desync profile/ipcache search target ip=172.67.150.188 port=80
using cached desync profile 5 (noname)
dpi desync src=10.211.1.5:62965 dst=172.67.150.188:80 track_direction=out fixed_direction=out connection_proto=http payload_type=unknown
no lua functions in this profile
fixing tcp checksum
packet: id=69 reinject unmodified

По логу видно, что в первом пакете HTTP-запроса zapret его распознал (payload_type=http_req), но поле hostname пусто и правила обхода он не применил к этому запросу, потому что он был фрагментирован и поле Host было отправлено во втором пакете, который запрет уже не распознает как HTTP-запрос (payload_type=unknown).

Судя по всему @Drin все же пытался обойти провайдерскую блокировку с помощью фрагментации.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...