Whitelist-bypass: VK Creator (headless на сервере) + Joiner (Android)
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
- На ПК с десктопным Creator: войти в VK, открыть вкладку VK, нажать VK Cookies, сохранить файл.
- Скопировать на сервер, например:
# с вашего ПК (пример):
# 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
- Скачайте whitelist-bypass.apk с релиза, совместимого с версией Creator на сервере.
- Разрешите установку из неизвестного источника (по запросу системы).
- Установите APK.
3.2 Первый запуск и VPN
- Запустите приложение.
- При запросе системы разрешите создание VPN-профиля (без этого туннель не поднимется).
3.3 Настройки приложения (обязательно под headless Creator)
- Откройте настройки (иконка справа от кнопки GO на главном экране).
- Tunnel — выберите DC (если на сервере используете VK в режиме DataChannel; для Video — тот же режим на обеих сторонах).
- Headless — рекомендуется включён (по документации проекта — подключение без WebView там, где это поддерживается).
3.4 Вставка ссылки и запуск
- Скопируйте с сервера строку из
vk-call-links.txt(полныйhttps://vk.com/call/join/...) или из лога при ручном запуске. - Вставьте в поле ввода на главном экране Joiner.
- Нажмите GO.
- Дождитесь статуса вроде Tunnel active (формулировка может слегка отличаться в версии APK).
3.5 DNS на Android (если сайты не открываются)
По SETUP.md:
- В настройках приложения откройте DNS settings.
- Режим Custom (не только «системный» DNS).
- Укажите резолверы, например 8.8.8.8 и 1.1.1.1 (или оставьте значения по умолчанию из приложения).
- Вернитесь на главный экран, остановите туннель при необходимости и снова нажмите 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, туннель активен
|
☐ |