25 Commits

Author SHA1 Message Date
samosvalishe b0e3cfe20a fix(dns): проба udp/53 не теряет второй сервер, doh до смены сети 2026-09-22 20:04:05 +03:00
samosvalishe ece494aa1b fix(dns): не залипать на первом резолвере doh-форвардера 2026-09-21 13:39:46 +03:00
samosvalishe 56dfc9aedd refactor(logx): общий Holder вместо пакетных переменных Log 2026-09-21 13:39:06 +03:00
samosvalishe 4865a73b5f fix(dns): сбрасывать udp-резолверы, если сессия их не задала
Глобальный список переживал сессию, и следующая наследовала резолверы прошлой сессии или сети.
2026-09-19 23:54:42 +03:00
samosvalishe 648c55415b feat: comment cleanup 2026-08-16 23:13:01 +03:00
samosvalishe 681dde8a6d feat(mobile): переживание сна и рестарта на Android 2026-08-16 21:19:14 +03:00
smediainfo 3481de79a3 feat(mobile): add host socket protector (SetProtect) for tun/VPN hosts
Checked type assertions (errcheck) and Close() error returns to satisfy golangci-lint.
2026-06-28 15:31:04 +03:00
samosvalishe 7d1ae10a47 fix(dnsdial): вернуть простую UDP-пробу auto до auto-пробы реального хоста 2026-06-17 22:49:00 +03:00
samosvalishe 1ec4fd463d fix(dnsdial): не вешать старт auto на DoH-пробу 2026-06-17 22:03:03 +03:00
samosvalishe e503aaee33 style: ASCII-пунктуация 2026-06-17 10:03:41 +03:00
samosvalishe 1ec2b2610a feat(dnsdial): auto-проба реального хоста с DoH recovery
auto-режим пробил UDP/53 нейтральным dns.google и залипал на UDP
навсегда. При выборочной фильтрации (dns.google резолвится, целевой
хост - нет) это вело к таймаутам резолва. Проба теперь валидирует
резолв реального хоста; при провале UDP уходит на DoH. Добавлен
рантайм-recovery в обе стороны: серия неудач UDP -> DoH, периодическая
перепроба DoH -> UDP.
2026-06-17 10:03:40 +03:00
samosvalishe 40796b4844 fix(dnsdial): убрать динамический фоллбэк на DoH
Откат: динамическое переключение ломало one-shot автовыбор UDP/53. Возврат к sticky-пробе при старте.
2026-06-11 21:04:58 +03:00
samosvalishe f24c5416de fix(dnsdial): динамический фоллбэк на DoH при отказе UDP/53 после пробы 2026-06-11 19:27:30 +03:00
samosvalishe e061345089 feat: авторизация по client-id, freeturn:// URI и подписки
- internal/clientsdb: БД клиентов с hot-reload + length-prefixed ID wire
- internal/uri: parse/encode share-ссылок freeturn://
- internal/sub: загрузка и парсинг подписок (sub.md)
- client: флаги -auth, -client-id, -sub; позиционный URI; ID через crypto/rand
- server: подкоманда clients (add/remove/list), чтение ID под -clients-file
- запись/чтение ID учитывают DTLS record-orientation (буфер на запись целиком)
- docs: uri.md, sub.md; правки flags/deploy/quickstart
- снят UTF-8 BOM по всем исходникам
2026-05-24 01:14:38 +03:00
samosvalishe 41d877dc64 chore: free turn proxy 2026-05-24 00:01:57 +03:00
samosvalishe dd8233208c fix(lint): устранить замечания golangci-lint + переход на dockers_v2
Проход lint (52 → 0):
- vkauth/token: переименовать затенённый err (govet shadow x3)
- udprelay/loop: явный _ = conn.Close() (errcheck x2)
- captcha/manual: ReadHeaderTimeout + html.EscapeString (G112, G705)
- proxy/tcpfwd: хелпер nonNegUint64 для байтовых счётчиков io.Copy (G115)
- proxy/bondclient, wire/bondframe: bounds-проверки на len->uint16/uint32
- wire/srtpmimicry: задокументирована усечка RTP seq mod 2^16
- dnsdial/doh: bounds-проверка + binary.BigEndian.PutUint16
- captcha/slider: clamp luma до 255 перед конверсией uint8
- vkauth/types: обоснованный nolint для публичных учёток VK SDK

Новый пакет internal/randx — Intn/IntN/Float64 на crypto/rand, drop-in замена
math/rand. Мигрированы все места antifingerprint-jitter (~22) в captcha, slider,
namegen, vkauth, udprelay.

GoReleaser:
- bump GORELEASER_VERSION v2.5.0 → v2.15.4 в Taskfile и обоих CI-workflow;
  текущий синтаксис .goreleaser.yaml (archives.ids, format_overrides.formats)
  требует v2.8+
- миграция dockers + docker_manifests → dockers_v2 (единый блок, multi-platform
  buildx); Dockerfile.goreleaser использует конвенцию ARG TARGETPLATFORM
2026-05-23 01:37:42 +03:00
samosvalishe 971b1ac8fc chore: правка форматирования 2026-05-23 00:33:45 +03:00
samosvalishe 31e35efbf3 refactor: переименовать флаги и поля CLI/конфига
- wrap → obf: -wrap/-wrap-key/-gen-wrap-key → -obf/-obf-key/-gen-obf-key;
  ObfOpts.WrapMode/WrapKey/GenWrapKey → Mode/Key/GenKey
- vless → mode: -vless/-vless-bond → -mode tcp / -bond;
  clientProxyMode/serverProxyMode принимают string вместо bool
- -udp → -transport tcp|udp; TURNOpts.UDP → TransportUDP (везде)
- -vk-link → -link; -dns → -dns-mode; DNSModeUDP → DNSModePlain ("plain")
- KCP: убрать LoadProfileFromEnv/LoadFECFromEnv — хардкодить DefaultProfile/FEC{}
- Добавить валидацию -transport/-mode/-bond/-dns-mode в ParseClient/ParseServer
2026-05-21 19:19:40 +03:00
samosvalishe 6c3d3d341c chore(lint): расширить golangci-конфиг и устранить замечания
- Добавить nilerr, contextcheck, noctx, unconvert, unparam, gocritic, prealloc;
  убрать пресет std-error-handling и check-blank
- Заменить net.Dial/Listen/ListenPacket на context-aware варианты в tcpfwd,
  bondserver, tcpfwdserver, udprelay, udpserver
- Убрать параметр typ из writeToNextLane (всегда FrameData)
- Убрать лишний DohEndpoint из возвращаемых значений forwardRaw
- Анонимные receivers для методов без доступа к self (logx, vkauth, doh)
- Переименовать неиспользуемые параметры в _ (bondclient, bondserver, netconn,
  dtlsdial тесты)
- cmd/client: unlambda fix StreamsAlive → connectedStreams.Load
2026-05-21 16:49:59 +03:00
samosvalishe e417dac087 style: перевести комментарии на русский, убрать очевидные 2026-05-21 12:31:50 +03:00
samosvalishe 6b8b82f530 refactor(client): убрать deprecated-теги с package-level логгеров
cmd/client — однопроцессный CLI; package-level Log+SetLogger остаётся
каноническим API. captcha.Solve по-прежнему принимает явный логгер для DI.
Также осовременен backoffSteps через min().
2026-05-21 01:20:54 +03:00
samosvalishe 5735b4a297 fix(captcha/dnsdial): начать DI-миграцию package-level логгеров
captcha.Solve теперь принимает явный параметр logx.Logger, и captchaSession
использует его внутри; package-level переменная Log и SetLogger сохранены, но
помечены deprecated.

auto_solver.go обновлён, чтобы передавать captcha.Log в Solve, сохраняя текущую
обвязку до полного DI-прохода.

manual и dnsdial: SetLogger и Log помечены deprecated с пояснением для будущей
struct-based DI; поведение не изменено.
2026-05-21 01:14:43 +03:00
samosvalishe 242862397a chore: переименовать модуль в github.com/samosvalishe/btp; обновить зависимости
- путь модуля: github.com/cacggghp/vk-turn-proxy → github.com/samosvalishe/btp
- директории cmd: cmd/vk-turn-{client,server} → cmd/{client,server}
- зависимости: pion/turn v5.0.4, kcp-go v5.6.72, smux v1.5.57, x/crypto v0.51,
  klauspost/{compress,cpuid,reedsolomon}, x/{net,sys,text,tools,mod,time}
- README, workflows, GLOSSARY обновлены под новые пути
2026-05-20 12:39:26 +03:00
samosvalishe 9d7d754740 refactor(logging): унифицировать stdlib log.* в logx по client/cmd
internal/client/captcha, captcha/manual, dnsdial: добавить package-level Log +
SetLogger; убрать прямой обход -debug через stdlib log.Printf. cmd/{client,
server}/main.go: сначала строить logger, весь вывод через logger.{Info,Warn,
Error}f; оставлен один log.Fatalf только для сбоя разбора конфига до логгера.
dnsdial: log.Panicf → panic(fmt.Sprintf).

Исправлены уровни:
- vkauth/token.go: пути [FATAL] теперь Errorf; Auto/Manual captcha failed →
  Warnf; ignored-cleanup-error → Debugf.
- vkauth/client.go: HandleAuthError/cache invalidated → Warnf; throttle wait →
  Debugf; Failed-with-client_id → Warnf.
- udprelay: "Backing off 60s" + SetDeadline failed → Warnf.
- captcha: PoW/show_type/check status/debug_info → Debugf; endSession/close-body/
  script-drift → Warnf.

Префиксы нормализованы к [STREAM %d] [Pkg] msg / [Pkg] msg.
2026-05-20 11:26:21 +03:00
samosvalishe 2167ba990b refactor(layout): переезд в cmd/, свернуть client/internal в internal/client
- server/main.go → cmd/vk-turn-server/main.go. Несёт остаточные правки сервера
  (drop параметра useBond, убрано поле startup-лога).
- client/internal/{browserprofile,captcha,dnsdial,namegen,vkauth} →
  internal/client/* (единая иерархия internal/; параллельное дерево
  client/internal/ убрано). Все Go import-пути обновлены.
- .github/workflows/{ci,release}.yml, Dockerfile, README.md — пути сборки
  переключены на ./cmd/vk-turn-client и ./cmd/vk-turn-server.
- README: убран устаревший пример "server -vless-bond" (флаг удалён ранее);
  добавлены рецепты сборки .so для Android arm64 + Linux arm64/amd64 под
  ручную упаковку для мобилок.
- internal/proxy/udp/udp.go, internal/config/config.go: обновлены устаревшие
  ссылки client/internal/* в doc-комментариях.
- notes/GLOSSARY.md (новый, ~20 терминов): фиксирует DTLS-как-обфускацию,
  wrap=AEAD-не-XOR, четыре значения "client", три значения "stream", пять
  ортогональных переключателей "mode", заметки по сборке libvkturn.so, iSH,
  хрупкость init globalBondRegistry и удаления флагов.

cmd/vk-turn-client/ намеренно оставлен вне этого коммита; сворачивается вместе
с извлечением ручной captcha в следующем коммите, т.к. переименование и правки
импортов manualcaptcha.* попадают в один файл.

Wire-форматы не тронуты. Поведение не изменено кроме уже закоммиченных
удалений CLI.
2026-05-19 17:20:26 +03:00