ХАКАТОН БЕЗ ГРАНИЦ : ВЕСТИ С ЭКВАТОРА

Давайте коротко подведём промежуточный итог : что было сделано на первых трёх хакатонах и что ещё предстоит ? Надеемся, этот материал поможет командам Берлина и Варшавы найти для себя задачу по душе, а участники и участницы из Тбилиси, Еревана и Вильнюса узнают в тексте себя и свои успехи !

Задача 1: Модуль маршрутизации по доменам для DNS-резолвера, для использования на VPN-сервере

ПРОБЛЕМА

Все существующие средства VPN оперируют исключительно IP-адресами и диапазонами, а администраторам и пользователям чаще всего нужно оперировать доменами. Если пользователь хочет маршрутизировать через VPN только условный netflix.com, то простого штатного способа сделать этого не существует — приходится настраивать маршрутизацию по IP, а не по «сайтам», а это ненадёжно, так как адреса могут меняться или быть динамическими (зависеть от геолокации).

РЕШЕНИЕ

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

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

Также такой подход можно использовать для маршрутизации доменов в другой VPN и на серверной стороне. Например, если сервис japanmusic.jp открывается только через Японию, а spotify.com через США, подобную маршрутизацию можно применить на VPN-сервере в России, не заставляя пользователей самостоятельно переподключаться к VPN-серверам в разных странах при использовании того или иного сервиса.

ТЕХНИЧЕСКАЯ РЕАЛИЗАЦИЯ

Сделать дополнительный модуль к какому-то из популярных DNS-резолверов (например, knot resolver), который бы устанавливал маппинг описанным образом, с помощью nftables или iptables.

Задача 2. DNS-резолвер, получающий все возможные геораспределённые IP-адреса из других регионов

ПРОБЛЕМА

В России блокируются многие IP-адреса различных CDN-сервисов, что часто приводит к недоступности тех или иных сайтов, их использующих. Однако CDN-сервисы используют геобалансировку и выдают разные наборы IP-адресов для разных регионов. Частично проблему можно решить сменой DNS-резолвера из другого региона, но это помогает не всегда — напрямую влиять на выдаваемые адреса не представляется возможным.

РЕШЕНИЕ

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

Также попутно резолвер может исключать заведомо неисправные (заблокированные) IP-адреса и не отдавать их клиенту.

ТЕХНИЧЕСКАЯ РЕАЛИЗАЦИЯ

Специальный модуль для DNS-резолвера, который резолвит домен сразу через несколько публичных резолверов в разных регионах, а также с разными EDNS Client Subnet.

Задача 3. DNS-резолвер, переписывающий IP-адреса облачных сервисов, позволяющих обращаться по разным адресам

ПРОБЛЕМА

В России блокируются многие IP-адреса различных CDN-сервисов, что часто приводит к недоступности тех или иных сайтов, их использующих. Однако некоторые CDN-сервисы (Cloudflare, Amazon Cloudfront) позволяют обращаться к сайтам через практически любые IP-адреса, а не только те, которые «привязаны» к запрашиваемому домену.

РЕШЕНИЕ

В ответ на DNS-запрос сайта за CDN, отдавать клиенту заведомо незаблокированный адрес вместо настоящего адреса сайта, каким бы он ни был. Это позволит улучшить доступность сайтов без применения туннелирования.

ТЕХНИЧЕСКАЯ РЕАЛИЗАЦИЯ

Специальный модуль для DNS-резолвера, который подменяет ответ на заведомо доступный адрес, если в DNS-ответе обнаружены адреса из заданных диапазонов CDN-провайдера. 

Полезные ссылки

Git репозиторий GOODBYE DPI