Безусловно, тема обхода ограничений изнутри страны сейчас актуальна. Но что делать, если нужно открыть сайты, которые со своей стороны заблокировали пул IP-адресов из РФ, не используя доп ПО в виде VPN/прокси клиентов? Например, было интересно создать аналог DNS-сервера вроде comss, который открывает доступ к AI, игровым серверам и тому подобному, которые сами заблокировали пользователей из РФ, с чем не смогут помочь обходы DPI (возможно, эксперты напишут замечания в комментариях).

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

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

Для примера можно вспомнить Twitch, который заблокировал доступ к просмотру стримов в качестве 1080p для пользователей из РФ. Так же разблокируем просмотр в 1440p, что тоже доступно в ограниченном числе регионов (при условии, что стример участник бета программы и стримит в 2к).

Идём на страницу справки по бета-тестированию качества 2k на Twitch и смотрим регионы, в которых оно доступно.

Выбираем ближайшую локацию для уменьшения задержек
Выбираем ближайшую локацию для уменьшения задержек

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

Итак, регион выбран, сервер с белым IPv4 в данной локации арендован — переходим к настройке (на примере Ubuntu):

1. Настраиваем подобие SNI-прокси через nginx

Устанавливаем nginx и модуль ngx_stream_core_module, который поможет нам проксировать трафик на основе SNI.

apt install nginx libnginx-mod-stream

Редактируем конфигурационный файл nginx:

nano /etc/nginx/nginx.conf

Вставляем следующий блок (вне блока http):

stream { 
    log_format proxy '$remote_addr [$time_local] ' 
                     '$protocol $status $bytes_sent $bytes_received ' 
                     '$session_time "$ssl_preread_server_name"'; 
 
    access_log /var/log/nginx/stream-access.log proxy; 
    error_log /var/log/nginx/stream-error.log; 
 
    server { 
        resolver 1.1.1.1 ipv6=off; 
        listen 443; 
        ssl_preread on; 
        proxy_pass $ssl_preread_server_name:443; 
        proxy_connect_timeout 10s; 
        proxy_timeout 30s; 
    } 
}

Сохраняем конфиг и проверяем, что с ним нет проблем:

nginx -t
nginx -s reload

Если всё в порядке (можно на всякий случай проверить через systemctl status nginx), то это уже можно использовать на клиентах на уровне файла hosts:
Просто прописать IP VPS и домен, который мы хотим пускать через него.

В случае с Twitch(сами потоки будут идти напрямую к серверам твича, мы проксируем только запросы, которые используются твичом для получения m3u плейлиста) для разблокировки качества достаточно прописать следующее (где 1.2.3.4 — IP вашего VPS):

1.2.3.4 usher.ttvnw.net 
1.2.3.4 gql.twitch.tv

После перезапуска браузера (если в его настройках указан системный DNS провайдер, а не сторонний) качество выше 720p станет доступным. (Скорей всего понадобится так же очистить кэш DNS, как это сделать зависит от вашей ОС)

2. Настройка dnsmasq

Однако hosts настроить можно не везде. Что если нам нужно качество на телевизоре или телефоне? Удобнее использовать VPN/proxy либо поднять свой DNS-сервер, который будет перенаправлять нужные запросы на наш сервер без установки доп ПО на клиенты.

Устанавливаем dnsmasq:

apt install -y dnsmasq 
systemctl stop dnsmasq  
cp /etc/dnsmasq.conf /etc/dnsmasq.conf.backup 
nano /etc/dnsmasq.conf

Добавляем в конфиг следующие настройки(где 1.2.3.4 — IP вашего VPS):

(прописываем какие адреса должны идти на наш сервер, остальные будут резолвится через DNS от Cloudflare)

listen-address=0.0.0.0 
port=53 
no-resolv 
no-hosts 
server=1.1.1.1 
server=1.0.0.1 
cache-size=10000 
log-queries 
log-facility=/var/log/dnsmasq.log
address=/usher.ttvnw.net/1.2.3.4
address=/gql.twitch.tv/1.2.3.4
bogus-priv
bind-interfaces

Сохраняем конфиг, создаём файл для логов и тестируем корректность конфигурации:

touch /var/log/dnsmasq.log 
chmod 644 /var/log/dnsmasq.log 
dnsmasq --test 

Если всё успешно, отключаем встроенный DNS-резолвер системы и включаем вместо него dnsmasq:

systemctl stop systemd-resolved 
systemctl disable systemd-resolved 
systemctl enable dnsmasq 
systemctl start dnsmasq 
systemctl status dnsmasq 

Проверяем, что прописанный нами домен через localhost указывает на наш сервер:

dig @localhost usher.ttvnw.net +short

Если резолвит в IP нашего сервера — значит, работает.

Также проверим, работает ли наш DNS-сервер извне (где 1.2.3.4 — IP сервера):

dig @1.2.3.4 usher.ttvnw.net +short

Если всё успешно — можно прописать его в качестве первичного DNS на роутере или в системе/TV/телефоне.

Таким же образом можно прописать доменные адреса Gemini и других сервисов, которые блокируют доступ по локации IP пользователя. В связке с обходом DPI это может помочь без надобности использовать VPN/proxy (хотя у нас буквально прокси на уровни SNI адресов через nginx) для таких случаев.

P.S. Если кто-то сюда забрёл для разблокировки качества на твиче, то могу посоветовать эти расширения под chromium/firefox, которые работают после последних обновлений со стороны твича (на 11.10.25): https://github.com/reyohoho/twitch_quality_proxy