Whitelist-bypass: VK Creator (headless на сервере) + Joiner (Android)

Материал из wolfram
Перейти к навигации Перейти к поиску

Whitelist-bypass: VK Creator (headless на сервере) + Joiner (Android)

Инструкция описывает развёртывание метода whitelist-bypass: на EU-VPS запускается headless Creator (создание звонка ВКонтакте без браузера на сервере), на смартфоне Android — приложение Joiner (туннель через реальный медиазвонок). Режим туннеля на обеих сторонах должен совпадать (обычно DC для VK).

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

Схема

  EU-VPS (Creator, headless)                    Android (Joiner)
  ┌─────────────────────┐                      ┌─────────────────┐
  │ headless-vk-creator │  WebRTC / SFU ВК    │ whitelist-bypass│
  │ + куки VK           │◄──────────────────►│ APK, режим DC   │
  │ ссылка → файл       │   звонок как носитель│ VPN + туннель   │
  └─────────────────────┘                      └─────────────────┘
         │                                              │
         └──────────── интернет «как с обычного VPS» ──┘
Компонент Где Роль
Creator (headless) Сервер в зоне с нормальным доступом к VK Создаёт звонок, держит релей туннеля
Joiner Android в зоне с белым списком Подключается к звонку, поднимает VPN/прокси
Файл ссылки На сервере, опционально --write-file Стабильное место, где лежит join_link, без поиска в логах

Часть 1. Подготовка

1.1 Что понадобится

  • Сервер x86_64 с Linux (ниже пример для Ubuntu 24.04 LTS), исходящий HTTPS к VK, достаточно RAM под выбранный --resources.
  • Один раз доступ к машине, где можно запустить десктопный Creator (Releases) — только чтобы экспортировать куки VK (кнопка VK Cookies в приложении).
  • Смартфон Android и APK Joiner из того же релиза на GitHub.
  • Ссылка на звонок в формате https://vk.com/call/join/... — её выдаст headless (и при желании запишет в файл).

1.2 Пути по умолчанию (можно заменить)

Путь Назначение
/opt/whitelist-bypass/ Каталог бинарника и файла со ссылками
/opt/whitelist-bypass/headless-vk-creator Бинарник Creator (после скачивания)
/root/vk-cookies.json Куки VK (массив JSON из десктопного Creator)
/opt/whitelist-bypass/vk-call-links.txt Файл: по одной строке join_link на каждый успешный старт с новым звонком

Часть 2. Сервер (EU-VPS, Ubuntu)

Все команды — под root или через sudo.

2.1 Установка зависимостей для проверки JSON

apt-get update
apt-get install -y curl jq

2.2 Каталог и бинарник headless VK

Замените URL релиза на актуальный с страницы релизов, если версия новее.

mkdir -p /opt/whitelist-bypass
curl -fsSL -o /opt/whitelist-bypass/headless-vk-creator \
  "https://github.com/kulikov0/whitelist-bypass/releases/download/v0.2.1/headless-vk-creator-linux-x64"
chmod +x /opt/whitelist-bypass/headless-vk-creator
/opt/whitelist-bypass/headless-vk-creator --help 2>&1 | head -n 25

Ожидаемо: в справке есть флаги --cookies, --write-file, --resources.

2.3 Файл кук VK

  1. На ПК с десктопным Creator: войти в VK, открыть вкладку VK, нажать VK Cookies, сохранить файл.
  2. Скопировать на сервер, например:
# с вашего ПК (пример):
# scp ./cookies.json root@ВАШ_IP_VPS:/root/vk-cookies.json

Проверка целостности JSON на сервере:

jq empty /root/vk-cookies.json && echo "JSON OK"
wc -c /root/vk-cookies.json

Формат — массив объектов с полями "name" и "value", как выдаёт Creator (см. docs/SETUP.md).

2.4 Файл для хранения ссылки

install -m 0644 /dev/null /opt/whitelist-bypass/vk-call-links.txt

При каждом новом успешном старте процесса Creator в конец файла дописывается одна строка с полным join_link. Актуальная ссылка последнего такого старта:

tail -n 1 /opt/whitelist-bypass/vk-call-links.txt

2.5 Первый ручной запуск (проверка)

cd /opt/whitelist-bypass
./headless-vk-creator \
  --cookies /root/vk-cookies.json \
  --resources moderate \
  --write-file /opt/whitelist-bypass/vk-call-links.txt
--resources Когда выбирать
moderate Мало RAM на VPS (рекомендуется для слабых машин)
default Обычный случай
unlimited Больше нагрузка на память; читайте README проекта

Ожидаемо: в логе блок CALL CREATED и строка [config] Wrote call link to ...; в файле появилась строка с https://vk.com/call/join/....

Остановка ручного процесса: Ctrl+C в этой SSH-сессии.

2.6 Автозапуск (systemd)

Создать unit:

cat >/etc/systemd/system/whitelist-bypass-vk-creator.service <<'EOF'
[Unit]
Description=whitelist-bypass headless VK creator
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
WorkingDirectory=/opt/whitelist-bypass
ExecStart=/opt/whitelist-bypass/headless-vk-creator \
  --cookies /root/vk-cookies.json \
  --resources moderate \
  --write-file /opt/whitelist-bypass/vk-call-links.txt
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable whitelist-bypass-vk-creator.service
systemctl start whitelist-bypass-vk-creator.service
systemctl status whitelist-bypass-vk-creator.service --no-pager

Логи сервиса:

journalctl -u whitelist-bypass-vk-creator.service -f

Ссылку после старта удобнее брать из файла, а не из потока логов:

sleep 5
tail -n 1 /opt/whitelist-bypass/vk-call-links.txt

Остановка и отключение автозапуска:

systemctl stop whitelist-bypass-vk-creator.service
systemctl disable whitelist-bypass-vk-creator.service

2.7 Примечание про порты на VPS

Headless Creator использует исходящие соединения к инфраструктуре VK/WebRTC. Отдельно открывать входящий порт на файрволе под Creator обычно не нужно. Не путайте с другими проектами (TURN-proxy и т.д.), которые слушают UDP на публичном IP — это другая схема.

2.8 Опция --peer-id (VK)

Если нужно создавать звонок в конкретный диалог (peer), укажите числовой peer_id ВКонтакте:

./headless-vk-creator \
  --cookies /root/vk-cookies.json \
  --peer-id 123456789 \
  --resources moderate \
  --write-file /opt/whitelist-bypass/vk-call-links.txt

Не забыть то же значение в ExecStart unit-файла, если используете systemd.

2.9 Защита файла кук на сервере

Файл кук — полноценная сессия VK. Ограничьте доступ:

chmod 600 /root/vk-cookies.json
chown root:root /root/vk-cookies.json

2.10 Обновление бинарника до нового релиза

systemctl stop whitelist-bypass-vk-creator.service

curl -fsSL -o /opt/whitelist-bypass/headless-vk-creator.NEW \
  "https://github.com/kulikov0/whitelist-bypass/releases/download/ВЕРСИЯ/headless-vk-creator-linux-x64"
chmod +x /opt/whitelist-bypass/headless-vk-creator.NEW
mv /opt/whitelist-bypass/headless-vk-creator.NEW /opt/whitelist-bypass/headless-vk-creator

systemctl start whitelist-bypass-vk-creator.service
systemctl status whitelist-bypass-vk-creator.service --no-pager

Замените ВЕРСИЯ на тег с страницы релизов. После обновления APK на телефоне желательно взять из того же релиза, чтобы совпадали протокол и поведение.

2.11 Передача ссылки с сервера на ПК (пример)

# на вашем ПК:
scp root@ВАШ_IP_VPS:/opt/whitelist-bypass/vk-call-links.txt .
# открыть локально и скопировать последнюю строку, либо одной командой с ПК:
ssh root@ВАШ_IP_VPS 'tail -n 1 /opt/whitelist-bypass/vk-call-links.txt'

Часть 3. Смартфон (Android)

3.1 Установка APK

  1. Скачайте whitelist-bypass.apk с релиза, совместимого с версией Creator на сервере.
  2. Разрешите установку из неизвестного источника (по запросу системы).
  3. Установите APK.

3.2 Первый запуск и VPN

  1. Запустите приложение.
  2. При запросе системы разрешите создание VPN-профиля (без этого туннель не поднимется).

3.3 Настройки приложения (обязательно под headless Creator)

  1. Откройте настройки (иконка справа от кнопки GO на главном экране).
  2. Tunnel — выберите DC (если на сервере используете VK в режиме DataChannel; для Video — тот же режим на обеих сторонах).
  3. Headless — рекомендуется включён (по документации проекта — подключение без WebView там, где это поддерживается).

3.4 Вставка ссылки и запуск

  1. Скопируйте с сервера строку из vk-call-links.txt (полный https://vk.com/call/join/...) или из лога при ручном запуске.
  2. Вставьте в поле ввода на главном экране Joiner.
  3. Нажмите GO.
  4. Дождитесь статуса вроде Tunnel active (формулировка может слегка отличаться в версии APK).

3.5 DNS на Android (если сайты не открываются)

По SETUP.md:

  1. В настройках приложения откройте DNS settings.
  2. Режим Custom (не только «системный» DNS).
  3. Укажите резолверы, например 8.8.8.8 и 1.1.1.1 (или оставьте значения по умолчанию из приложения).
  4. Вернитесь на главный экран, остановите туннель при необходимости и снова нажмите GO.

В системных настройках Android:

  • Отключите или поставьте в автоматический режим Private DNS / «Частный DNS», если он принудительно задаёт хост, который блокирует или ломает резолвинг.

Точные названия меню зависят от производителя (Samsung, Xiaomi и т.д.).

3.6 Автоподключение (опционально)

В настройках приложения есть опция Reconnect on app start — автоподключение к последней использованной ссылке при следующем запуске приложения. Имеет смысл, если ссылка на звонок не менялась; после нового звонка на сервере нужно снова вставить новую ссылку.

3.7 Split tunneling и режим «только прокси»

В настройках Joiner (см. SETUP.md):

  • Split tunneling — если не нужен полный VPN на всё устройство, можно указать только приложения, чей трафик пойдёт через туннель.
  • Proxy settings — порт SOCKS5 и авторизация; режим Proxy only — без системного VPN, только локальный SOCKS (удобно для отдельных приложений, если они умеют прокси).

3.8 Логи на смартфоне

При сбоях включите в настройках Show logs, воспроизведите проблему и при необходимости сохраните/скопируйте фрагмент лога для разбора.

3.9 Autoclick (имя в звонке)

В настройках Autoclick settings можно задать отображаемое имя при автоматическом входе в звонок — полезно, если интерфейс VK на Joiner требует подтверждения имени.


Часть 4. Согласование версий и устранение неполадок

Симптом Что проверить
Cannot parse cookies на сервере Файл кук не пустой, валидный JSON, не обрезан при копировании (jq empty файл).
Joiner не коннектится Режим Tunnel совпадает с тем, что фактически на Creator; ссылка именно join, не устарела; VK доступен с телефона в принципе.
Сайты не грузятся при активном туннеле DNS settings → Custom; системный Private DNS отключён или автомат.
Потеряна ссылка среди логов Использовать --write-file и tail -n 1 .../vk-call-links.txt.
Нужна новая ссылка Перезапуск headless-vk-creator создаёт новый звонок и дописывает строку в конец файла.
Разные версии APK и headless Ставить с одного тега релиза на GitHub; при несовпадении — странные обрывы или несовместимость протокола.
Сервис падает в цикле journalctl -u whitelist-bypass-vk-creator.service -b --no-pager; проверить куки и сеть; при частых рестартах файл vk-call-links.txt будет расти — это нормально, смотрите tail -n 1.

Часть 5. Контрольный чеклист

Действие Готово
1 На сервере установлен headless-vk-creator, --help открывается
2 /root/vk-cookies.json валиден (jq empty)
3 Ручной запуск дал CALL CREATED и строку в vk-call-links.txt
4 Unit systemd включён, systemctl is-active = active
5 На Android установлен APK той же ветки релиза
6 Режим Tunnel на телефоне = DC (или оба в Video — согласовано)
7 Вставлена последняя строка из vk-call-links.txt, GO, туннель активен

Ссылки