Т.к. конфа основного впс работает дай бог стабильно уже пару месяцев, задумался над обходом белых списков. Из актуальных способов нашел 2 основных.
1 Serverless (Yandex Cloud Functions / Cloud Run-подобное).
Сам не раскапывал, только принцип понял, но основное ограничение в том что такие функции ограничены по времени жизни на сервере и не подходят ни для чего кроме обычных http запросов. Условный контэйнер поднялся, передал запрос, вернул ответ и умер.
2 CDN (Content Delivery Network).
Это как я понял довольно популярный способ обхода БС даже для больших VPNсервисов.
Друг тестировал у автора это статьи ( Обход белых списков с помощью CDN и XHTTP · frank-underwood64/whitelists_bypass · Discussion #1 · GitHub ) пару серверов с такой настройкой и они довольно успешно обходили БС.
Среди успешных сервисов был Beget.
Сейчас уже 2 сутки бьюсь с тем чтобы через него пустить трафик.
Когда создавал cdn ресурс источник указал правильно, сильно больше этого по мимо кэширования и прочей лабуды там настроек нет.
На vps стоит caddy которая проксирует весь трафик на локальный xray.
Создал отдельный инбаунд под cdn с ws транспортом, т.к. была инфа что beget режет xhttp трафик (до этого пробовал и с xhttp), но картина не меняется. Пинг в приложении на клиенте есть, 6-9 мс а интернета нет вообще.
Небольшое уточнение сразу, я не сетевик и не дэвопс, я просто ищу решение проблемы и адаптирую под себя всеми возможными способами. В том числе значительную часть ресерча и правок делает ии т.к. я не спец. У меня что-то не работает Фикшу сам, если не фиксится и в интернете ничего не могу найти понятного иду за разъяснениями к нейронке. В большинстве случаев прокатывало, но сейчас видимо нет. Я стараюсь понять всё что делаю, но опять таки это очень локальные знания по тому вопросу и проблеме которуюя сам решаю, масштабно с другой стороны я посмотреть на вопрос не могу.
Поэтому обращаюсь сюда за помощю.
Ниже будут тесты которые я делал по совету нейронки. И ее выводы.
Мое мнение что я просто не достаточно понимаю что происходит в этой цепочке соединений и поэтому не могу отловить простейшую ошибку, а нейронка уже просто галюцинирует или тупит.
Тесты
Условие: проверка бэкенда напрямую, минуя CDN (XHTTP-инбаунд).
Тест: curl -v https://***.***.ru/***/
Результат:
HTTP 400 + via: 1.1 Caddy + x-padding — нормальный ответ XHTTP. Бэкенд жив.
Условие: проверка WS-инбаунда напрямую, минуя CDN.
Тест: curl -v https://***.***.ru/***/ (в т.ч. с заголовками WebSocket-апгрейда).
Результат:
HTTP 400 + via: 1.1 Caddy. Caddy проксирует в Xray:30001, WS-инбаунд отвечает. Бэкенд жив.
Условие: запрос через CDN на секретный путь XHTTP.
Тест: curl -k https://***.begetcdn.cloud/***/ -H "Host: ***.***.ru"
Результат:
HTTP 403, server: nginx, x-cdn-edge-cache: HIT. Нет via: Caddy, нет x-padding — ответ отдал сам CDN-эдж, до origin не дошло.
Условие: запрос через CDN на WS-путь, с уникальным query для обхода кэша.
Тест: curl -k "https://***.begetcdn.cloud/***/?x=$(date +%s)" -H "Host: ***.***.ru"
Результат:
HTTP 403, server: nginx, x-cdn-edge-cache: HIT — на уникальном URL, где кэша быть не может. Т.е. HIT = отдаёт замороженную заглушку 403, origin не опрашивает.
Условие: запрос через CDN на корень / (там у Caddy file_server, простейший кейс).
Тест: curl -k "https://***.begetcdn.cloud/?x=$(date +%s)" -H "Host: ***.***.ru"
Результат:
HTTP 403 nginx, HIT. Даже корень не проксируется.
Условие: контрольный — несуществующий путь, без заголовка Host.
Тест: curl -k "https://***.begetcdn.cloud/anything123/?z=$(date +%s)"
Результат:
HTTP 403 nginx, HIT. CDN отдаёт 403 вообще на всё, независимо от пути и Host.
Условие: очистка кэша CDN в панели Beget.
Тест: кнопка Purge/Очистить кэш.
Результат: первый раз
«ошибка операции», далее операция удачна, но не влияет ни на что.
Условие: WS-апгрейд напрямую на origin как эталон (правильные заголовки Upgrade/Sec-WebSocket-*). Тест: curl -k https://***.***.ru/***/ -H "Connection: Upgrade" -H "Upgrade: websocket" -H "Sec-WebSocket-Key: ***==" -H "Sec-WebSocket-Version: 13"
Результат:
HTTP 400 + via: 1.1 Caddy. Origin принимает WS-апгрейд корректно.
Очень примерно понимаю что это значит, но как я понял через cdn вообще не получается достучаться до источника. Не понимаю почему, несколько раз пересоздавал cdn ресурс. Пролистал всю доку на сайте beget. Очевидных причин почему не работает эта цепочка не вижу. При этом у друга на тесте от автора той статьи полноценно работало всё с этим cdn.
Помогите разобраться где и что я не так сделал. Я сам пока в тупике…
