Нужна консультация по инстурментам обхода блокировок

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

Use case

Сразу скажу, что мои знания на уровне эникейщика, а также с linux и сетями плотного знакомства не имел, только постигаю азы. Прошу указывать на ошибки в моем понимании, буду заполнять пробелы.

Изначальный план: трафик от домашних устройств идет на роутер, там выборочно перенаправляется на домашний «сервер» (2 x 2.1 GHz / 3GB RAM), на котором шифруется и отправляется на VPS, откуда идет в интернет.

Инструментарий – что выбрать?

1) VPN-only
Первое, что пришло в голову – просто поднять свой VPN на забугорном VPS. Однако, чем больше я читал разных материалов о работе VPN в этой замечательной стране, тем менее устойчивым мне этот способ казался. Как я понял, VPN-трафик легко определяется, а следовательно - замедляется или блокируется. Однако из плюсов, что в VPN-туннель можно завернуть вообще всё и провайдер не увидит ничего роме факта использования VPN.

Обратил внимание на несколько протоколов, а именно:

  • WireGuard – высокая скорость, относительно простая настройка, есть клиенты на нужные платформы. Однако, как я понял, использование WG видно провайдеру и замаскировать его можно только через танцы с бубном (об этом ниже).

  • SoftEther – быстрее и проще в настройке чем древний OpenVPN, есть свой протокол (SoftEther VPN), который маскируется под https трафик. Но – протокол SoftEther VPN не поддерживается на android, а также встречал инфу, что с сервера без спроса улетают пакеты в японию и/или китай.

  • Outline VPN – плюсы: настройка в несколько кликов, GUI, приложения на все платформы.

2) Wireguard VPN + obfuscation

Как я понял, чтобы избежать обнаружения использования WG, его можно пустить через прокси с обфускацией, будь то SS/v2ray (предварительно завернув в TCP с помощью udp2raw) или без TCP через xray. Но сомневаюсь, что такое можно реализовать для подключения клиента на android, плюс WG от этого должен значительно потерять в скорости. И даже если в теории получится все это настроить, то имеет ли смысл подобный конфиг?

3) Proxy
Следующей мыслью было развернуть прокси-сервер, но к этому подходу у меня осталось несколько вопросов:

  1. Что видит провайдер?
    Встречал противоречивую информацию про шифрование трафика внутри proxy.
  2. Как быть с DNS? Они ведь пойдут через провайдера?
    Меня беспокоит, что одна страна заговорила о борьбе с DoH и DoT. (Когда про это вышли новости, у меня отвалился рутрекер, который до этого спокойно открывался со включенным DoH в Firefox, сейчас не помогла даже установка Simple DNSCrypt)
  3. Если через VPN в туннель заворачивается весь трафик, то что может отвалиться при использовании прокси в system-wide режиме?

3.1) ShadowSocks (далее SS)
Просто настраивается и есть много гайдов, быстро работает. Однако во многих источниках читал, что SS морально устарел, обнаруживается и блокируется (в этой стране вроде бы нет, но готовлюсь к худшему).

3.2) xray / v2ray
Как я понял, xray это форк v2ray, который лучше в некоторых аспектах: а именно полная поддержка UDP, более быстрая работа и использование протокола XTLS. Однако документация вся на китайском, а в гайдах по настройке все просто отправляют на скрипты автоматизации с гитхаба (которые тоже на китайском).

3.3) Trojan GFW
Образец с самой внятной документацией на английском, с виду кажется простым в настройке, просто реализуется перенаправление на блог для неавторизованных подключений (защита от активного пробинга)

И немного оффтопный вопрос: лучше выбирать зарубежных (юридически) хостеров VPS или можно обойтись российскими с серверами в нидерландах/швейцарии?

Спасибо, что дочитали до конца! Буду признателен за конструктивные ответы и ссылки на материалы для ознакомления по теме (англ/рус).

Есть еще openconnect. Использует TLS для TCP, DTLS для UDP. UDP отключается при желании
таким образом идет закос под https. уже все готовое из коробки без примочек для разных платформ
Можно использовать авторизацию по tls client certificate, чтобы защититься от актив пробинга
Недостаток - все тот же tun

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

На данный день нет ограничений по использованию VPN-протоколов, они не блокируются ни у одного провайдера РФ.

Все стандартные VPN-протоколы имеют чётко выраженные характерные признаки, по которым их можно классифицировать: как фиксированные порты, так и стандартизированные форматы пакетов передачи служебного трафика. Исключение составляет, пожалуй, OpenVPN, у которого есть шифрование канального трафика (опция tls-crypt-v2) и возможность смены порта на произвольный, но даже он делается без расчёта на блокировки. Также OpenVPN поддерживает подключение к VPN-серверу через прокси, что позволяет обфусцировать его трафик при необходимости.
Беспокоиться о шейпинге следует только в том случае, если он действительно имеется. Мобильный оператор Йота, например, даёт трафику OpenVPN на стандартном порту 1194 высокий приоритет, а не замедляет его.

Все технологии туннелирования так или иначе строятся на двух принципах:

  • VPN: пакетная передача данных, ПО создаёт отдельный сетевой интерфейс (L2/L3), возможность использования стандартных способов маршрутизации, передачи любых протоколов и приёма входящих соединений;
  • Прокси: потоковая передача данных, ПО создаёт отдельный TCP/UDP-порт, возможность передачи только TCP/UDP-трафика, невозможность (в общем случае) приёма входящих соединений.

Через прокси у вас не будет работать ping (протокол ICMP), а голосовая связь VoIP (и другие p2p-программы) может работать плохо или не работать вовсе, из-за невозможности входящих подключений. Тем не менее, для большинства обычных программ функциональности прокси вполне достаточно.

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

Также у SoftEther есть маскировка под DNS-запросы и туннелирование трафика через протокол ICMP. SoftEther – хороший кандидат на запасной вариант VPN в странах, где периодически бывают неполные отключения интернета, т.к. у него больше шансов установить соединение без дополнительной настройки.

Это не VPN, а прокси (shadowsocks), с мультиплатформенной эмуляцией VPN-интерфейса и удобной программой конфигурирования сервера.

Технически, любой VPN, прокси и другое сетевое ПО можно обфусцировать или инкапсулировать в дополнительный уровнень, но всё упирается в удобство настройки и кросс-платформенность обфусцирующего/инкапсулирующего ПО.
Shadowsocks, V2Ray/V2Fly, Trojan заточены под обход блокировок, и включают в единую программу все функции, которые могут потребоваться для туннелирования трафика через изощрённые конфигурации.
Стандартные VPN и прокси протоколы и программы – нет.

Стандартные протоколы прокси (HTTP/HTTP CONNECT/SOCKS4/SOCKS5) не поддерживают шифрование. После передачи служебных нешифрованных данных после установки соединения, данные через прокси передаются ровно в том виде, как это происходит без прокси.

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

Программы, поддерживающие работу через прокси, как правило не совершают DNS-запросов самостоятельно, а отправляют имя домена на прокси-сервер – это поддерживается и в HTTP-прокси, и в Socks5. В этом случае, сам удалённый сервер резолвит домен и устанавливает соединение к нужному IP-адресу.

Программы, не поддерживающие работу через прокси, будут резолвить домены через системный (провайдерский) DNS-сервер.
Прокси-программы с эмуляцией VPN-интерфейса часто поддерживают перехват DNS-запросов и перенаправление их внутрь прокси, на какой-либо публичный DNS-резолвер. Для прокси без эмуляции VPN необходимо использовать локальные резолверы-форвардеры с функцией перенаправления запроса через прокси или на сервер DNS over HTTPS/TLS, а DNS-настройки ОС необходимо сменить на порт локального резолвера.

Если речь об эмуляции VPN-интерфейса, то не будут работать не-TCP/UDP-протоколы, входящие подключения.

Это явно не соответствует действительности – протокол активно поддерживается и на текущий день находится на шаг впереди способов его классификации передовыми системами DPI.

V2Ray/V2Fly – крутой и очень гибкий комплекс для создания прокси-конфигураций любой сложности, но его настройка очень нетривиальна из-за сложного конфигурационного файла и не всегда актуальной английской документации. Рекомендую начать с английской версии на сайте Project V · Project V Official, она более-менее полная, хоть и частично устаревшая. Актуальная версия для community-версии V2Ray под названием V2Fly находится на 配置文件格式 | V2Fly.org (только китайский).

Это классный протокол с технической точки зрения, но ПО реализует простой туннель на фиксированный IP-адрес и порт, а не работает как прокси-сервер.
Поддержка протокола Trojan реализована в V2Fly.

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

Огромное спасибо за столь обстоятельный ответ!

В РФ действительно пока нет перманентной блокировки какого-либо VPN или прокси-протокола, блокировки были (есть) лишь точечные, не по протоколам, а пока лишь по IP-адресам и IP-диапазонам отдельных, внесенных в государственный черный список, сервисов. Причем некоторые из этих блокировок де-факто не выполняются (даже провайдерами с государственным DPI aka ТСПУ). Например, прокси-серверы Opera (это проксирование трафика самой компанией Opera называется “VPN”) де-факто не блокируются - мои тесты показали доступность IP-диапазона 77.111.247.0/24 со всех российских мобильных операторов “большой четверки” и московских провайдеров Онлайм (Ростелеком), Ринет, МГТС, 2.ком, Билайн. Подозреваю, что подобная политика может прослеживаться и с другими “VPN-сервисами”, внесенными в государственный черный список в РФ.

Теперь по способам обхода блокировок.

В РФ по-прежнему без проблем работают самые простейшие способы (такие, как Антизапрет с использованием PAC или OVPN), не требующие от неискушенного и непритязательного пользователя особых технических познаний. Свою функцию Антизапрет спокойно выполняет, что самое главное.

Standalone-клиент прокси-серверов Opera тоже прекрасно работает и позволяет проксировать весь браузерный (и не только) трафик, причем эти сервера пропускают трафик на гораздо более высокой скорости, чем экономный Антизапрет - к примеру, без проблем проигрывается 1080p и даже 4k потоковое видео. Видимо, китайские владельцы Opera не скупятся на пропускную способность интернет-каналов своих прокси-серверов в Европе.

Это самые простые и дешевые (сиречь - бесплатные) решения, не требующие аренды и настройки своего личного сервера. Для простых задач (получение доступа к ресурсам из черного списка РФ) прекрасно подходят. Во всяком случае, пока до них не дотянулись руки “регулирующего” ведомства РКН.

А вот VPN-сервис от Cloudflare (WARP) с недавних пор (минувшие выборы в гос. думу РФ) как минимум на некоторых мобильных операторах РФ периодически работал с перебоями. Я не касался их официального приложения для Android\iOS, я имею в виду обычный клиент Wireguard с их конфигом, который я тестировал - проблемы были. Когда проблем с подключением не было, данный VPN-сервис впечатлял низким пингом и очень высокими скоростями (что неудивительно, все-таки это крупнейший CDN-провайдер в мире, физически присутствующий в нескольких городах России, включая, естественно, Москву). Опять-таки, свою задачу этот сервис вполне решал.

Только следует помнить, что такое использование сервисов Opera (неофициальный standalone-клиент) и Cloudflare Warp (конфиги для Wireguard-клиента) является нарушением лицензионного соглашения с этими компаниями, если кого-то это, конечно, волнует. И, поскольку все вышеперечисленные сервисы (включая, конечно, и Антизапрет) являются крупными и достаточно популярными в РФ, нельзя исключать, что рано или поздно руки российского регулятора могут до них добраться, а будут ли они эффективно бороться со своей блокировкой, вопрос.

Поэтому, конечно, предпочтительнее собственные решения. И если говорить о самом простом и эффективном, то это VPN на протоколе Wireguard - он быстр и прост в установке и настройке. Для личного использования он очень хорош, для корпоративного, конечно, не подходит по ряду причин. На сегодняшний день есть клиенты под все популярные платформы, кроме того, энергопотребление (на мобильных устройствах это важно), по моим тестам, ниже, чем у самого популярного протокола - OVPN. Зато OVPN может работать по TCP-протоколу и его можно без заморочек проксировать.

Прокси-сервер Shadowsocks тоже выглядит хорошим вариантом для личного пользования. Клиенты есть под практически любые платформы. Протокол активно развивается.

И, если говорить о наиболее универсальном решении, то это обфусцированный shadowsocks. Это хорошее решение, позволяющее маскировать трафик под https (а при использовании порт-шаринга с веб-сервером или проксировании в Cloudflare есть и защита от активных проб). Если нужен именно “швейцарский нож” - и проксирование всего трафика, и личный сервер, и обход блокировок, и противодействие мобильным операторам, в большей степени склонным нарушать сетевую нейтральность и бороться с тем, что они любят называть “воровством трафика” (использование недорогого тарифного плана для смартфонов в модемах и роутерах) - то это решение идеально. И при желании внутрь такого прокси можно пропустить трафик VPN, в случае, если его надо “скрыть” от провайдера. Выглядит параноидально, но - главное - это работает (и будет работать не только в РФ, для которой это все избыточные решения, но и, по всей видимости, в более ограниченных по интернету странах, таких как, например, государства Средней Азии.

SoftEther VPN тоже хорошее решение, все никак не дойдут руки попробовать его.

Интересный нюанс, который сложно понять сразу. Я правильно понимаю, что именно поэтому при использовании чистой SOCKS-прокси, которую поднимает Trojan, половина ресурсов не работает? Завёлся телеграм и открываются некоторые сайты, но на половине ловлю ошибки и не полную прогрузку страниц. Технически действительно выглядит красивым решением, хотелось обойтись исключительно Trojan и не тащить комбайн в лице V2Ray. Есть какие-то варианты “дешево” вылечить этот недостаток, превратив его в полноценный прокси?

Поясните, что это значит?

В итоге поднял на том же сервере WireGuard и запустил Trojan в режиме forward. Из нюансов у WireGuard отсутствует флаг DisallowedIPs, поэтому пришлось использовать нечто подобное для исключения IP адреса непосредственно сервера Trojan.

В итоге получился просто WireGuard over Trojan. Нравится, что оба протокола простые и лаконичные, поддержка и пакеты есть во всех популярных дистрибутивах.

Я перепутал Trojan с Cloak.

Звучит довольно мудрёно: тунеллировать ядерный UDP-протокол через userspace-программу, которая инкапсулирует его в TCP. Не проще ли использовать OpenVPN с tls-crypt или сторонним обфускатором в виде прокси (у OpenVPN есть поддержка HTTP и Socks-прокси)?

Возможно проще, надо попробовать.

Если вы перепутали с Cloak, то я не понимаю, почему обычный SOCKS5-прокси Trojan не работает для половины ресурсов.

К слову в итоге завёл Trojan как плагин для Shadowsocks и всё заработало.

В целом претензию понимаю, но сейчас опять глянул на OpenVPN и вспомнил какой это жирный комбайн с долгими хендшейками, кучей настроек, CA и другими нюансами, расхотелось…

Не знаю почему не работало. После того как зовёл IPv6 на сервере, всё наладилось. С чем связано не знаю, кроме поддержки IPv6 ничего не добавлял.