Обход цензуры с помощью использования DNS
После недавнего запрета властей Турции на пользование Twitter в стране все больше пользователей стали прибегать к Google DNS, что в очередной раз напомнило об этом бесплатном и сравнительно простом инструменте для доступа к заблокированным сайтам. Вот как это работает
Когда пользователь вводит URL сайта, которой хочет открыть…

DNS ( Domain Name System) направляет этот запрос на соответствующий IP-адрес

А сервер показывает искомую страницу

Из-за децентрализованной структуры Интернета…

Власти или интернет-провайдер могут внести изменения в ваш запрос и не допустить переход к странице или показать окно «ошибка 404»


Однако изменив настройку браузера для использования «чистого» DNS


Пользователь может получить доступ к тем сайтам, которые его интересуют…
А сервер – отображать затребованные страницы.

Что такое DNS?
DNS (англ. аббревиатура Domain Name System, или «Система доменных имен») – протокол, который «переводит» язык слов в названии сайта на язык чисел, используемый при создании адреса этого сайта в Интернете – интернет-протокола (IP).
Например, адрес «Голоса Америки» – voanews.com, а его IP-версия – 152.75.191.91.
Как это работает
В Интернете все, включая вашего интернет-провайдера, имеет отдельный DNS-адрес. Чтобы узнать собственный DNS, зайдите в START/Пуск, далее RUN/Выполнить, впечатайте в открывшейся строке аббревиатуру команды – cmd, (нажмите ENTER) и в новом отрывшемся окне – ipconfig/all (нажмите ENTER), и в появившейся серии чисел будет строка IP Address и DNS Server.
Стоит отметить, что записей о DNS – несколько, и эти многочисленные копии распространяются по всей сети. Именно этот фактор и децентрализованная структура Интернета позволяют правительствам и хакерам использовать всемирную паутину для своих нужд.
Не вдаваясь в технические подробности, хочу перейти к вопросу о том, как интернет-провайдер или власти могут изменять записи DNS и таким образом перенаправлять трафик с затребованного сайта туда, куда считает нужным. Например, пользователь в стране X может попытаться зайти на сайт voanews.com, однако измененный DNS может привести его на поддельную страницу или на экран с сообщением «ошибка 404», тем самым блокируя доступ.
Учитывая вышесказанное, хочу отметить, что некоторые лица также используют лазейки в базе DNS для обхода решений властей по изменению этих адресов. Это можно осуществлять, используя несколько разных вариантов протоколов, однако я хочу поговорить об одном из самых популярных – Google DNS.
Интернет-гигант Google поддерживает собственную базу DNS, которая находится в свободном доступе для всех пользователей. По словам Google, она максимально приближена к реальной базе вебсайтов и их подлинных IP-адресов.
Этот список Google доступен по двум IP-адресам: 8.8.8.8 и 8.8.4.4
Изменив настройки компьютера или смартфона, вы можете получить доступ к подлинному списку DNS, однако та самая страна X, о которой я говорил выше, может быть недовольна подобными действиями.
Работа с Google DNS может показаться довольно непростой, поэтому компания разместила подробные инструкции здесь. Тем не менее, однажды выполнив пошаговую инструкцию, можно получить доступ ко многим заблокированным властями сайтам.
Изменение DNS, ведущее к блокировке страницы сайта, – инструмент довольно примитивный. Довольно часто это первая реакция запаниковавших властей или правительств, не обладающих достаточными техническими навыками. Такой подход можно сравнить с установкой неправильных указателей на дороге – часть водителей съедет с правильного пути, однако другая часть продолжит двигаться по нужному маршруту. Поэтому власти стремятся полностью заблокировать трафик, и не только установив ошибочные знаки, но и применив ряд других мер.
Возможные минусы работы с DNS
Несмотря на удобство работы с DNS в случае необходимости получения доступа к заблокированному контенту, на практике этот инструмент недолговечен. Жители тех стран, где правительство агрессивно проводит политику цензуры в Интернете, нуждаются в нескольких инструментах борьбы с ней.
Также не стоит забывать, что сохранять анонимность, пользуясь DNS, невозможно. DNS можно использовать для быстрого обхода блокировки, однако этот инструмент не защитит ваши личные данные. Это скорее уловка, чем серьезный инструмент, поэтому польза от его применения – ограничена.
Автоматический обход блокировок
Описание работы программы для автоматического обхода блокировок в интернете, код программы лежит на репозитории 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 роутер с возможностью компилировать и запускать на нем код. И была предпринята следующая попытка.

Попытка номер два — Таблица маршрутизации
Второй попыткой настроить обход блокировок было внести в таблицу маршрутизации все заблокированные 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
DNSTT. DNS туннель для обхода блокировок
dnstt — это DNS-туннель (VPN over DNS), который может использовать резолверы DNS через HTTPS (DoH) и DNS через TLS (DoT). Проект написан на языке Go.
Руководство будет включать:
- Как работает DNSTT
- Настройку DNS для домена
- Настройку туннеля dnstt на сервере
- Настройку клиента dnstt на OpenWRT
- Настройку автозапуска сервера, клиента и tun2socks
1. Как работает DNSTT
DNS-туннель – это один из способов обойти сетевую цензуру. Цель рекурсивного DNS-резолвера — получать пакеты и пересылать их куда-то еще — по сути, работая как своего рода сетевой прокси. DNS-туннели через UDP с открытым текстом обычно считаются легко обнаруживаемыми из-за необычных DNS-сообщений, которые они используют. Однако DoH и DoT зашифрованы — внешний наблюдатель может видеть, что вы общаетесь с общедоступным резолвером, но не может расшифровать сообщения DNS и убедиться, что они являются частью туннельного протокола. (Сам резолвер все равно может легко определить, что вы используете туннель.)

dnstt по умолчанию использует сквозное шифрование и аутентификацию между клиентом туннеля и сервером туннеля. По словам создателей структура протокола обеспечивает более высокую производительность, чем другие туннели DNS. (на практике удалось добиться скорости около 1.5 Мбит/с на DOWN/UP при использовании резолвера DoH Google)
dnstt не предлагает сетевой интерфейс TUN/TAP или даже интерфейс прокси-сервера SOCKS или HTTP, а только соединение типа netcat между локальным сокетом TCP и удаленным сокетом TCP. Однако довольно легко заставить туннель действовать как стандартный прокси-сервер, запустив прокси на туннельном сервере.
DNS-туннель работает за счет того, что туннельный сервер выступает в качестве авторитетного резолвера для определенного доменного имени. Рекурсивный DNS преобразователь посередине действует как прокси, перенаправляя запросы для этого домена на туннельный сервер. Чтобы настроить DNS-туннель, вам понадобится доменное имя и хост, который может принимать UDP-пакеты, на котором вы запускаете туннельный сервер. Рассмотрим следующий пример настройки:
- Ваше доменное имя example.com(вам понадобится уже зарегистрированный домен)
- IPv4-адрес вашего сервера 203.0.113.2.
- IPv6-адрес вашего сервера 2001:db8::2 (опционально)
2. Настройка DNS
Зайдите в панель конфигурации вашего регистратора имен и добавьте три записи:
Что делать, когда в стране блокируют Интернет и соцсети?
![]()
Сейчас все больше сервисов и компаний в России блокируется: кто-то «отлетает» из-за санкций, кто-то из-за требований власти. Что делать, если ваш любимый сервис на грани блокировки, но мириться вы с этим не готовы? На помощь придут различные VPN-сервисы, прокси-серверы и специализированные браузеры. Для новичка найти что-то стоящее не так просто. Сегодня разберемся во всем поподробнее.
VPN
Возможно, сейчас большинство удивится, но VPN для обхода блокировок не предназначен. Само название VPN, Virtual Private Network, говорит о том, что это технология для защиты соединения.
![]()
Принцип работы VPN
Для обхода блокировок лучше обзавестись VPS-сервером в Европе и на его основе поднимать свой VPN. Конкретные примеры — ниже.
VPS-сервер — это виртуальный частный сервер. Как устроена технология? Есть один физический сервер, на котором работает несколько независимых виртуальных серверов (VPS). Каждый из них имеет свою конфигурацию.
VPN как отдельный сервис — не лучший способ обхода блокировок. Компанию могут просто-напросто заблокировать в вашей стране, создатели сервиса могут отрезать к нему доступ. Да и сама по себе технология создана именно для защиты соединения. VPN подходит тем, кто не хочет все усложнять. Это, пожалуй, самый простой способ быстро запустить любимое приложение.
Стоит упомянуть, что бесплатными VPN-сервисами стоит пользоваться на свой страх и риск. Их создатели могут сливать ваши данные.
Для того, чтобы вам было легче выбрать, мы составили подборку. Все VPN-сервисы из списка платные, но у каждого есть пробный период.
![]()
Windscribe позиционирует себя как компания, которая стремится развивать мощные и простые в использовании инструменты для безопасной работы в Сети. Подписка на год стоит 49$ — это нормальная рыночная цена. Оплатить можно любым удобным способом. При регистрации аккаунта и подтверждении почты сервис дает 10 Гб трафика с ограниченным выбором стран.
Помимо десктопной утилиты (Windows, Linux, macOS) у Windscribe есть расширение для браузера и мобильное приложение (Android, iOS).
hidemy.name — сервис для нетребовательных пользователей. Всего 45 доступных стран, до пяти одновременно подключенных устройств, не самая высокая скорость. Год пользования сервисом обойдется в 3240 рублей.
hidemy.name поддерживает все самые популярные операционные системы ПК и телефонов. Расширения для браузера, к сожалению, нет.
ExpressVPN — самый дорогой и функциональный VPN из подборки. Сервис можно использовать на любом устройстве (до шести штук одновременно). Серверы расположены в 94 странах, подключение осуществляется с неограниченной пропускной способностью.
Отдать за такое удовольствие придется немало: 100$ в год. ExpressVPN можно установить, как браузерное расширение. Это, несомненно, плюс.
Surfshark — мой самый любимый VPN-сервис из списка: он сочетает в себе демократичную цену, скорость и удобство. На момент написания статьи стоимость двух лет использования — 6000 рублей.
Surfshark поддерживает неограниченное количество одновременно подключенных устройств, а его серверы находятся в 65 странах мира.
VPN поддерживает macOS, Windows, Linux, Android, iOS, Android. Кроме того, его можно установить в качестве расширения для браузера.
Все вышеупомянутые VPN можно установить на роутер. Подробная инструкция присутствует на сайтах сервисов.
Прокси-серверы
Прокси-сервер — грубо говоря, компьютер, являющийся дополнительным звеном между пользователем и приложением. Он находится за пределами страны, где происходит блокировка. Сервер, как и ваше устройство, имеет свой IP-адрес. Этот адрес используется, если пользователь подключается к сервису через прокси. В итоге сервис думает, что прокси-сервер и есть пользователь. Благодаря этому можно обходить блокировки.
Преимущество технологии перед VPN очевидно: прокси-сервер никто не заблокирует, так как распоряжаетесь им только вы.
Существует три основных вида прокси-серверов:
Это стандартный прокси, обычный сервер. Такие прокси отличаются высокой скоростью и стабильностью подключения.
Эти прокси состоят из реальных пользовательских IP-адресов, которые покупаются у интернет-провайдеров или пользователей устройств. За счет этого они отличаются большей анонимностью.
Также существуют резидентские прокси обратного подключения. Они могут менять IP-адрес несколько раз в день, что еще больше усложняет отслеживание.
В таком прокси все запросы пользователя проходят через мобильного оператора с использованием мобильного IP-адреса. Мобильные прокси идеально для обхода жестких блокировок. Целевой сервер может блокировать серверные прокси, когда получает с одного IP неестественное количество запросов. Мобильным прокси это не грозит: от их блокировки пострадает множество пользователей, соблюдающих правила площадки. Также с мобильным прокси вы получаете пул IP-адресов, которые меняются автоматически.
![]()
Еще прокси-серверы делятся на:
Такой сервер не скрывает информацию от ресурса. Во-первых, прокси-сервер сообщает, что он таковым является, во-вторых, передает настоящий IP-адрес пользователя.
Такие прокси-серверы тоже честно идентифицируют себя, но вместо реальных данных передают ложные.
Как и два предыдущих, такой сервер сообщает о себе, но, в отличие от вышеупомянутых, не передает абсолютно никаких данных. В таком случае сайт может вести себя не так, как с обычным пользователем.
Такие прокси регулярно меняют IP-адреса и выдают фальшивые данные. Это сильно сокращает шансы отследить трафик и связать его с клиентом.
Одним из лучших сервисов по аренде прокси-серверов является RSocks. Он предлагает резидентские, серверные и мобильные IP-адреса. У сервиса есть бесплатный пробный период. А заодно собственный прокси-чекер (утилита для проверки валидности IP-адресов и наличия их в спам-базах). Локацию сервера можно выбрать вплоть до города. Главным минусом является отсутствие IPv6 прокси.
![]()
Главным преимуществом AstroProxy является то, что здесь вы платите за израсходованный трафик, а не за количество IP-адресов. Впрочем, есть пара огромных минусов. Это малое количество ГЕО-прокси и высокая стоимость серверных прокси.
ГЕО-прокси — это набор IP-адресов, привязанных к определенной территории. Если ip-адрес соединения меняется, происходит это строго в пределах одной страны.
Также здесь есть тарифы «college» и «business». В первом случае вас подключают к сети университета или колледжа. Во втором — к сети какого-либо предприятия. Выбрать университет или предприятие, к сожалению, нельзя.
![]()
Proxy6 предлагает нам серверные прокси. Цены здесь одни из самых низких на рынке. Также Proxy6 имеет свой прокси-чекер. Очень крутым преимуществом является то, что сервис выплачивает до 30% за покупки приведенных пользователей. Ключевой минус — слабая служба поддержки: ответ от нее можно ждать целый день.
![]()
Браузеры
Tor, OrWeb — браузеры-анонимайзеры, работающие по принципу луковой маршрутизации. Браузеры представляют собой огромную систему прокси-серверов, позволяющих устанавливать анонимное сетевое соединение.
Tor является самым популярным и крупным проектом из себе подобных. Установить его можно на любое устройство с ОС Windows, macOS, Linux, Android и iOS. Для загрузки придется воспользоваться VPN-сервисом: сайт заблокирован на территории РФ.
![]()
OrWeb — браузер для Android-смартфонов. Перед установкой требуется загружать дополнительное приложение от этого же разработчика. Интерфейс и функционал скуднее, чем в Tor. Браузер не сохраняет даже историю посещений, а прогрузка страниц осуществляется намного медленнее.
Brave представляет собой упрощенную версию Tor-браузера. Проект появился совсем недавно, но уже успел приобрести популярность на западном рынке. Здесь тоже присутствует анонимность, через Brave можно сидеть на заблокированных сайтах. Но вот в темную часть интернета уже попасть не получится, так как это не onion-сеть.
В Brave удобный и интуитивно понятный интерфейс, который будет приятен глазу. Браузер блокирует любую рекламу, отслеживание и куки-файлы.
![]()
Все вышеупомянутые браузеры являются open-source проектами. Это означает, что они имеют открытый исходный код. Поэтому, если вы не доверяете браузеру или захотели помочь его развитию, можно без каких-либо препятствий прочитать и доработать код.
Итог
Правда в том, что сегодня обойти интернет-блокировки не составляет никаких проблем. Для этого не нужно быть специалистом в компьютерной сфере. Существует множество сервисов, готовых предоставить вам свои услуги — каждый сможет найти себе что-то по душе и в рамках бюджета. Даже пресловутый китайский фаервол легко проламывается с помощью нужных инструментов.