...

Обход блокировки что это за программа

Как открыть заблокированный сайт на телефоне?

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

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

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

Браузеры

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

  • Google Chrome для Android
  • Opera Mobile для Android
  • Яндекс.Браузер для Android
  • Яндекс.Браузер для iPhone, iPad

VPN-сервисы / Прокси

Многие частные виртуальные сети, которые позволяют получать доступ к заблокированному контенту на компьютере, также эффективно работают на мобильных устройствах. К некоторым сервисам можно получить доступ с помощью встроенной в Android и iOS функции настройки VPN, а некоторые VPN сервисы имеют свои собственные приложения.

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

Бесплатные VPN

  • Opera VPN для Android, iPhone
  • Hotspot Shield Free для Android, iPhone, Windows Phone
  • Hola VPN для Android, iPhone

Платные VPN

  • TunnelBear VPN для Android, iPhone
  • Avira Phantom VPN для Android, iPhone
  • F-Secure Freedome VPN для Android, iPhone
  • Norton WiFi Privacy VPN для Android, iPhone
  • CyberGhost VPN для Android, iPhone
  • Avast SecureLine VPN для Android, iPhone

DNS-сервисы

Существует несколько способов для включения DNS-туннелирования на смартфоне:

  • Изменение настроек на домашнем роутере. По умолчанию мобильное устройство iOS или Android получает информацию о DNS сервере с вашего роутера. Таким образом, если на маршрутизаторе настроены альтернативные DNS-серверы, то вы сможете получать доступ к заблокированному контенту со всех устройств в вашей домашней сети.
  • Изменение настроек на устройстве Android или iOS. В данном случае придется вручную изменять настройки для каждой беспроводной сети, к которой вы подключаетесь.

Использование сети Tor

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

  • Orbot для Android
  • Orfox: Tor Browser для Android

А как вы получаете доступ к заблокированным сайтам на смартфоне? Поделитесь в обсуждениях ниже.

Автоматический обход блокировок

Описание работы программы для автоматического обхода блокировок в интернете, код программы лежит на репозитории Antiblock.

Приблизительно в мае 2022 года был заблокирован один из доменов YouTube (yt3.ggpht.com), через который происходит выгрузка превью и логотипов каналов. Если до этого блокировки меня особо не утруждали, то YouTube без картинок, для активного пользователя, это тяжело. Далее были предприняты несколько разных подходов к оптимальному обходу блокировки этого домена.

 Пример отсутствия превью

Попытка номер один — Свой собственный VPN

Весной 2022 года стало актуально создавать собственные VPN на основе мощностей арендных VPS. Я тоже создал свой VPN WireGuard. Почитать как это сделать самому можно например в статье.

Пропускание всего трафика с телефона или планшета через VPN приводило к быстрой разрядке батареи. И на некоторые сайты не заходило через VPN, например Госуслуги или Avito. Поэтому было решено придумать более гибкий и адаптивный метод, а именно маршрутизацию сразу на роутере. Но для маршрутизации на роутере необходимо иметь роутер с поддержкой WireGuard, а значит необходим роутер, на который можно установить OpenWrt. Мой предыдущий роутер (RT-AC57U V3) не имел такой возможности, а так как я хотел достаточно мощнее устройство для экспериментов и настройке сетевого диска, то выбор пал на Beelink U59 Pro. К нему была куплена пара мощных антенн и другой Wi-Fi модуль (Mediatek MT7921K). Подробнее о сборке и настройке я расскажу в следующих статьях. Таким образом у меня появился x86 роутер с возможностью компилировать и запускать на нем код. И была предпринята следующая попытка.

Beelink U59 Pro с антеннами

Попытка номер два — Таблица маршрутизации

Второй попыткой настроить обход блокировок было внести в таблицу маршрутизации все заблокированные IP-адреса, выложенные на сайте antifilter.download. В списке allyouneed.lst находится около десяти тысяч IP-адресов и подсетей, что достаточно легко помещается в таблицу маршрутизации роутера. Для автоматического внесения адресов был написал Bash скрипт.

#!/bin/bash ip r | grep VPN | cut -d ' ' -f1 | xargs -I<> ip route del <> curl https://antifilter.download/list/allyouneed.lst > ip.txt cat ip.txt | xargs -I<> ip route add <> dev VPN

Если добавить этот скрипт в автозапуск Cron, то таблица маршрутизации будет иметь актуальный список IP-адресов и подсетей.

Скрипт работал, но быстро обнаружились его изъяны. IP-адреса доменов входящие в CDN очень часто меняются, поэтому их нет в списке allyouneed.lst. А домен, ради которого всё затевалось (yt3.ggpht.com), как раз тоже входит в CDN Google. Поэтому от этого подхода пришлось отказаться, но он может кому-то пригодится из-за простой настройки и отсутствию необходимости компилировать код под своё устройство.

Попытка номер три — BPF DPI

«Чтобы бороться с DPI надо думать, как DPI».

Почитав ранее статьи про BPF, я подумал реализовать простой DPI на основе BPF, которая будет маршрутизировать трафик в зависимости от SNI TLS Handshake. Это возможно было сделать как напрямую маршрутизируя пакеты через BPF, так и выставляя флаг nf_conntrack, а далее маршрутизировать через nftables. Но тут снова сыграл свою роль самый важный для меня домен (yt3.ggpht.com), общение с ним идет не через TLS 1.3, а через QUIC, а значит и nf_conntrack не будет толком работать, да и пакеты зашифрованные, хоть и известным ключом, и для анализа придется их детектировать и расшифровывать. Для обычно не продуктивных роутеров это будет очень тяжелая нагрузка. От этого подхода тоже было решено отказаться.

Попытка номер четыре — Автоматическая антиблокировка

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

Кратко опишу работу программы:

  • Для быстрой проверки входит ли домен в список заблокированных доменов, необходимо добавить заблокированные домены в хеш-таблицу. Перепробовав разные хеш-таблицы для Си, ни одна из них не имела нужные характеристики. Была написана библиотека для хеш-таблицы, подробнее о ней будет рассказано в следующей статье. Для экономии памяти заблокированные домены хранятся не как массив указателей на нуль-терминированные строки, а как длинный массив лежащих подряд нуль-терминированных строк. Экономия памяти, потому что malloc на каждую строку занимал бы служебную информацию. А в хеш-таблице можно хранить смещение начала строки от начала массива, тем самым хеш-таблица состоит из четырехбайтных int, а не восьмибайтных pointer. Список заблокированных доменов автоматически обновляется каждые 12 часов в отдельном потоке. Домены скачиваются с сайта. Код описан в файле urls_read.c.
  • При поступлении DNS запроса от клиента, id запроса заменяется на внутренний, чтобы не было совпадения id номеров с разных клиентов. Старый id, IP-адрес, порт, время прихода пакета и хэш домена запоминаются в массив в поле с номером нового id. При увеличении нагрузки до предельной, если ответы на запросы не успевают приходить, то мы сможем начать отбрасывать пакеты от клиента на этапе поиска нового внутреннего id.
  • При поступлении ответа от DNS сервера, по пришедшему id смотрим поле с этим номером в массиве из предыдущего абзаца. Проверяем не истекло ли время возврата пакета, проверяем совпадение хэш домена с сохранённым, если всё хорошо, то помещаем пришедший пакет в кольцевой буфер для обработки другим потоком. Кольцевой буфер необходим для постоянства в использовании памяти. Код обработки запросов описан в файле net_data.c.
  • Бывает много разных типов DNS ответов, но нас интересуют два варианта типа “A” и “CNAME”. Тип “A” делает прямое соответствие между доменом и IP-адресом. Тип “CNAME” делает соответствие между данным доменом и новым доменом. Если встречаем заблокированный домен с ответом типа “A”, то добавляем IP-адрес в таблицу маршрутизации, и добавляем IP-адрес в хэш таблицу с ключом IP-адрес, а значением временем истечения жизни IP-адреса. Если встречаем заблокированный домен с ответом типа “CNAME”, то добавляем домен в список временно заблокированных, а так же добавляем домен с хэш таблицу с ключом домен, а значением временем истечения жизни домена. Код описан в файле dns_ans.c.
  • Отдельный поток раз в минуту проверяет истекшие IP-адреса и домены и удаляет их. Код описан в файле ttl_check.c.

Тестирование

Тестирование проводилось на отдельно написанной программе, которая эмулирует большое количество DNS запросов. Тестировалось на миллионе самых популярных доменов по версии CloudFlare. Моя программа выдерживала 100 000 запросов в минуту. А так же тестирование проводилось с использованием AddressSanitizer и MemorySanitizer, никаких проблем выявлено не было. При работе программа потребляет очень мало оперативной памяти, примерно 12 MB, причем 8 MB это объем заблокированных доменов, тем самым подходит даже самым простым роутерам.

Разбор на конкретном примере

Например я хочу зайти на RuTracker.

Программа детектировала DNS запрос с заблокированным доменом «RuTracker» и добавила два IP адреса «172.67.187.38» и «104.21.72.173» в таблицу маршрутизации и запомнила что в 15:44:53 необходимо удалить их, так как их актуальность истечет.

Моя программа пишет лог действий в формате CSV:

15:40:30,add ip,rutracker.org,172.67.187.38,15:44:53 15:40:30,add ip,rutracker.org,104.21.72.173,15:44:53
root@OpenWrt:~# ip r | grep VPN 104.21.72.173 via 192.168.6.37 dev VPN 172.67.187.38 via 192.168.6.37 dev VPN

Мы видим внесенные IP адреса, но уже 15:45:19 IP адреса удаляются.

15:45:19,del ip,,172.67.187.38,15:44:53 15:45:19,del ip,,104.21.72.173,15:44:53

Новая таблица маршрутизации:

root@OpenWrt:~# ip r | grep VPN 

Таким образом мы динамически узнаем нынешний IP адрес домена и добавляем именно актуальный IP адрес, тем самым имеем возможность использовать домены лежащие на CDN.

  • Высокая производительность
  • *nix
  • Сетевые технологии
  • C
  • Разработка под Linux

При подготовке материала использовались источники:
https://www.comss.ru/page.php?id=4055
https://habr.com/ru/articles/744918/

Оцените статью