Commit Graph

173 Commits

Author SHA1 Message Date
samosvalishe 4084cce091 fix: миграция на ru домен 2026-06-17 10:03:40 +03:00
Anton a82c472e67 Merge pull request #17 from samosvalishe/release-please--branches--master
chore(master): release 1.2.0
2026-06-15 11:09:26 +03:00
Anton 02cb2488b4 chore(master): release 1.2.0 2026-06-11 23:49:58 +03:00
samosvalishe 402606e4f7 feat(uri): переход на base64url(json), расширенные параметры
freeturn:// теперь несёт base64url(json) вместо query-string. Поля:
v, provider, peer, transport, mode, bond, obf, key, n, spc, cid,
listen, dns, dnss, mcap, name. Версионирован полем v=1.

config.PeekSubURL: pre-parse -sub до ParseClient, URI первой ноды
подсовывается позиционным аргументом - применение общим путём.
ParseClient применяет все новые поля URI (N, StreamsPerCred,
ClientID, Listen, DNSMode, DNSServers, ManualCaptcha, transport).
2026-06-11 23:49:31 +03:00
Anton d032eb4c7a Merge pull request #16 from samosvalishe/release-please--branches--master
chore(master): release 1.1.1
2026-06-11 21:09:27 +03:00
Anton d806917a99 chore(master): release 1.1.1 2026-06-11 21:06:46 +03:00
samosvalishe 40796b4844 fix(dnsdial): убрать динамический фоллбэк на DoH
Откат: динамическое переключение ломало one-shot автовыбор UDP/53. Возврат к sticky-пробе при старте.
2026-06-11 21:04:58 +03:00
Anton 418bb93db2 Merge pull request #14 from samosvalishe/release-please--branches--master
chore(master): release 1.1.0
2026-06-11 19:33:59 +03:00
Anton d642ac2a6f chore(master): release 1.1.0 2026-06-11 19:30:01 +03:00
samosvalishe b518dc40b2 fix(install): неинтерактивный apt, чтобы needrestart/debconf не вешали установку 2026-06-11 19:27:37 +03:00
samosvalishe 2efe415344 chore: captcha version bump 2026-06-11 19:27:36 +03:00
samosvalishe f24c5416de fix(dnsdial): динамический фоллбэк на DoH при отказе UDP/53 после пробы 2026-06-11 19:27:30 +03:00
samosvalishe 2534bbe96a fix(turndial): детект блэкхола по ChannelBind, не CreatePermission refresh
VK реджектит standalone CreatePermission refresh с 400 независимо от здоровья стрима, поэтому permWatch ложно рециклил здоровые аллокации каждые ~60s. Permission держится живым через ChannelBind refresh (RFC 8656 §11), стандартный для VK путь, потому отдельный CreatePermission refresh глушим (PermissionRefreshInterval 24h). Реальный блэкхол ловим по провалу ChannelBind refresh (data-path), сброс на успешном байнде.
2026-06-08 08:34:56 +03:00
samosvalishe 2845874f86 chore: captcha version bump 2026-06-08 00:09:17 +03:00
samosvalishe 40000fde5d feat(turn): фоллбэк по нескольким relay-адресам при allocate
VK отдаёт несколько relay-адресов, но стрим использовал ровно один
(streamID%n). Если этот IP душит DPI/RST — allocate падает без альтернативы.

Credentials несёт список адресов (primary-first по streamID), DialTURN
пробует кандидатов по очереди и берёт первый успешный allocate. Балансировка
relay-IP по стримам сохранена, остальные адреса — фоллбэк. HostOverride (-turn)
схлопывает список до одного адреса.
2026-06-08 00:09:17 +03:00
samosvalishe 106a48533c fix(udprelay): детект блэкхола permission по логу pion вместо трафик-эвристики
Трафик-watchdog (tx растёт, rx заморожен) ложно рециклил здоровые
sender-only стримы: обратный путь WireGuard привязан к endpoint, а не к
стриму, поэтому rx==0 на отправляющем стриме — норма, не блэкхол.

permWatchFactory считает проваленные циклы refresh permission в логе pion
(scope turnc) и закрывает Stream.PermDead после порога. RefreshInterval
урезан 120s→30s. oneTURN рециклит allocation по PermDead.
2026-06-08 00:09:17 +03:00
Anton 410abb73e9 Merge pull request #13 from samosvalishe/release-please--branches--master
chore(master): release 1.0.3
2026-06-04 13:20:41 +03:00
Anton 8978c53289 chore(master): release 1.0.3 2026-06-04 13:06:59 +03:00
samosvalishe 3cb39d40f6 fix: bump go toolchain 2026-06-04 13:05:08 +03:00
samosvalishe 1ff8dd9cba fix(captcha): обновить captchaScriptVersion до 1.1.1348 2026-06-04 12:33:31 +03:00
samosvalishe 3bdc8e815a fix(client): сохранять client_id в доступный для записи каталог
На Android каталог рядом с бинарём read-only, ID не сохранялся и
ротировался на каждый запуск, ломая allowlist. Пробуем каталог бинаря,
UserConfigDir и TempDir по порядку.
2026-06-04 12:31:48 +03:00
samosvalishe a337bb0a63 fix(udprelay): рециклить стрим при блэкхоле TURN permission
При провале CreatePermission refresh pion роняет permission без ошибки,
relay молча дропает пакеты, стрим висит и ест свою долю WG-трафика.
Watchdog: tx растёт, rx заморожен 20с, отменяем turnctx и делаем свежий
allocate через TURNLoop.
2026-06-04 12:31:43 +03:00
samosvalishe 56da9fecdc fix(vkauth): фрагментировать ClientHello на control plane
ТСПУ читает SNI из ClientHello и инжектит delayed RST в TLS до VK
(login.vk.ru и др.). Дробим первый Write через SplitFirstWriteConn,
SNI уезжает во второй сегмент. Вписано в tls-client через
WithProxyDialerFactory без proxyUrl: прямой транспорт, резолвер сохранён.
2026-06-04 12:31:38 +03:00
Anton 6e0df905a7 Merge pull request #11 from samosvalishe/release-please--branches--master
chore(master): release 1.0.2
2026-06-01 18:24:34 +03:00
Anton 19022438d0 chore(master): release 1.0.2 2026-06-01 18:18:27 +03:00
samosvalishe 5fc2a09fbb fix(captcha): обновить captchaScriptVersion до 1.1.1346 2026-06-01 18:14:54 +03:00
samosvalishe a0ea846f25 fix(turndial): не переопределять PermissionRefreshInterval (дефолт pion) 2026-06-01 18:14:54 +03:00
samosvalishe 43180f0362 fix(dtlsdial): уникальный self-signed cert на каждый handshake
Cert генерируется заново на каждый Dial вместо переиспользования через
sync.Once: каждая TURN-сессия и реконнект получают свой fingerprint,
чтобы N параллельных стримов с одного IP не коррелировались как ботный
трафик.
2026-06-01 18:14:41 +03:00
samosvalishe a97ad6ca33 fix(udprelay): барьер старта стримов для прогрева кэша creds
Стрим 1 поднимается первым и сигналит okchan; стримы 2..N ждут сигнал
(или ctx/safety-timeout 20s) и переиспользуют тёплый кэш credentials
вместо N одновременных запросов к VK — снимает thundering herd на
старте (частая причина rate-limit/captcha).
2026-06-01 18:14:00 +03:00
samosvalishe 89c390cef5 perf(udprelay): in-place wrap/unwrap obf без копий payload
WrapInPlace/UnwrapInPlace работают прямо в wire-буфере: ingress читает
payload сразу за RTP-заголовком, egress отдаёт subslice расшифровки.
Убирает 2 memcpy (~1400B) и 2 буфера на пакет в obf-режиме, плюс
atomic-запись адреса пайпа теперь один раз. WrapInto/Unwrap делегируют,
wire-формат не изменён.
2026-06-01 18:13:50 +03:00
samosvalishe 4b26d6361d fix: install.sh 2026-05-26 16:13:42 +03:00
samosvalishe 854cab95c0 fix: install.sh 2026-05-26 15:28:40 +03:00
samosvalishe 375cf55182 fix: install.sh 2026-05-26 15:24:19 +03:00
Anton 7a45153859 Merge pull request #10 from samosvalishe/release-please--branches--master
chore(master): release 1.0.1
2026-05-26 13:03:44 +03:00
Anton 3d9144e044 chore(master): release 1.0.1 2026-05-26 13:02:37 +03:00
samosvalishe 0f74c238c5 refactor: install.sh 2026-05-26 13:02:13 +03:00
samosvalishe 281dd3e87a fix(release): drop package-name so root component is empty (issue 2214) 2026-05-26 02:32:41 +03:00
samosvalishe e976f7d8ef fix(release): set empty component for release-please tagging (issue 2214) 2026-05-26 02:28:49 +03:00
Anton 202bd86eb5 Merge pull request #9 from samosvalishe/release-please--branches--master
chore(master): release 1.0.0
2026-05-26 02:13:51 +03:00
Anton 8c0f8e4d79 chore(master): release 1.0.0 2026-05-26 02:13:13 +03:00
samosvalishe 68804665a4 chore: title-pattern с компонентом и версией для tagging release-please
Tagging-фаза матчит title PR против паттерна и требует И компонент
(= package-name free-turn-proxy), И версию. Прошлый паттерн нёс только
версию -> 'PR component undefined does not match free-turn-proxy' -> релиз
не строился, тег не создавался. Полный формат chore: release COMPONENT VERSION
закрывает оба условия. Тег остаётся v1.0.0 (include-component-in-tag false).

Повторный сброс: manifest 0.0.0, CHANGELOG очищен.
2026-05-26 02:12:33 +03:00
Anton 03d0750dc4 Merge pull request #8 from samosvalishe/release-please--branches--master
chore: release 1.0.0
2026-05-26 02:06:16 +03:00
Anton 45fd89af52 chore: release 1.0.0 2026-05-26 02:05:48 +03:00
samosvalishe b5922724ca chore: задать group-pull-request-title-pattern с версией
Заголовок group/manifest release-PR брался из group-pull-request-title-pattern
(default по имени ветки -> 'chore: release master'), без версии. Tagging-фаза
матчит title против паттерна и извлекает версию из него, поэтому тег не
создавался. Теперь обе паттерн-опции кладут версию в заголовок.

Плюс повторный сброс: manifest 0.0.0, CHANGELOG очищен.
2026-05-26 02:05:08 +03:00
Anton cc33ad140c Merge pull request #7 from samosvalishe/release-please--branches--master
chore: release master
2026-05-26 01:57:13 +03:00
Anton d9613f9f40 chore: release master 2026-05-26 01:54:45 +03:00
samosvalishe 3d4580f01d chore: повторный сброс релизов + фикс tagging release-please
- manifest 0.0.0, CHANGELOG очищен (старт с нуля)
- убран skip-github-release (отменял создание тега, не только релиза)
- задан pull-request-title-pattern с версией: версия попадает в title PR,
  иначе для manifest-root title генерился по имени ветки и tagging-фаза
  не могла извлечь версию из заголовка
2026-05-26 01:53:55 +03:00
Anton f806d64369 Merge pull request #6 from samosvalishe/release-please--branches--master
chore: release master
2026-05-26 01:44:15 +03:00
Anton f5d447a0d1 chore: release master 2026-05-26 01:42:52 +03:00
samosvalishe 268ea25303 chore: сброс состояния релизов для чистого старта
- manifest 0.0.0 (release-please пересчитает версию с нуля)
- CHANGELOG очищен под регенерацию
- skip-github-release: true — GitHub-релиз создаёт только GoReleaser
  (убирает двойное создание релиза release-please + goreleaser,
  из-за которого плодились черновики и падал Release-workflow)
2026-05-26 01:41:59 +03:00