VK Turn Proxy + FreeTurn + VLESS
VK Turn Proxy + FreeTurn + VLESS: полная инструкция
Инструкция описывает схему обхода белого списка через TURN-серверы ВКонтакте: на EU-VPS (с установленным 3x-ui) запускается vk-turn-proxy server, на Android — приложение FreeTurn (turn-proxy-android) в связке с прокси-клиентом NekoBox.
- Важно
- Все команды на сервере — под root или через
sudo. - Изменяйте IP/порты/UUID на собственные значения там, где указано.
Схема
Android (FreeTurn + NekoBox)
┌──────────────────────────────────────────────────────────────────┐
│ │
│ Приложения │
│ │ │
│ NekoBox VpnService (захват трафика) │
│ │ VLESS/TCP │
│ NekoBox → 127.0.0.1:9000 │
│ │ │
│ FreeTurn (vk-turn-proxy клиент) │
│ │ DTLS 1.2 поверх STUN ChannelData │
└──────┼───────────────────────────────────────────────────────────┘
│
│ через TURN-серверы ВКонтакте
│ (трафик выглядит как медиа-звонок)
▼
EU-VPS (vk-turn-proxy server :56000)
│ TCP VLESS → 127.0.0.1:12766
▼
Xray (3x-ui) инбаунд VLESS :12766
│
▼
Интернет
| Компонент | Расположение | Роль |
|---|---|---|
| vk-turn-proxy server | EU-VPS | Принимает DTLS-туннель с телефона, форвардит TCP в Xray |
| Xray (3x-ui) | EU-VPS | Терминирует VLESS, выпускает трафик в интернет |
| FreeTurn (APK) | Android | Устанавливает DTLS-сессию через TURN ВК на VPS |
| NekoBox | Android | VPN-клиент, пускает трафик через VLESS → FreeTurn |
Часть 1. Сервер (EU-VPS)
1.1 Параметры (заменить на свои)
| Параметр | Пример | Описание |
|---|---|---|
| Публичный IP | xxx.xxx.xxx.xxx
|
IP вашего VPS |
| Порт vk-turn-proxy | 56000
|
Входящий UDP от FreeTurn |
| Порт VLESS-инбаунда | 12766
|
Локальный TCP-порт инбаунда в Xray (3x-ui) |
| UUID VLESS | 1f27eaa5-3668-4c79-...
|
Из 3x-ui, используется в NekoBox на телефоне |
1.2 Проверка инбаунда VLESS в 3x-ui
Убедитесь что инбаунд уже создан и активен. Параметры, которые нужно сверить:
| Поле | Значение |
|---|---|
| Протокол | VLESS
|
| Адрес прослушивания | 127.0.0.1
|
| Порт | 12766 (или другой — ваш)
|
| Транспорт | TCP
|
| Безопасность | none
|
| UUID клиента | любой, запомните — понадобится на телефоне |
Проверка что Xray слушает этот порт:
ss -tlnp | grep 12766
Ожидаемо:
LISTEN 0 4096 127.0.0.1:12766 0.0.0.0:* users:(("xray-linux-amd6",...))
Если порта нет — откройте панель 3x-ui, проверьте что инбаунд включён (Статус = Включено).
1.3 Создание инбаунда VLESS в 3x-ui (если ещё не создан)
- Откройте панель:
http://ВАШ_IP:2096(порт панели по умолчанию). - Inbounds → Add Inbound.
- Заполните поля:
- Protocol: VLESS
- Listen IP:
127.0.0.1 - Port:
12766 - Transmission: TCP
- Security: none
- В блоке Client: нажмите Add Client, скопируйте/запомните сгенерированный UUID.
- Нажмите Create (или Save).
- Проверка как в шаге 1.2.
1.4 Каталог и бинарник vk-turn-proxy
mkdir -p /opt/vk-turn-proxy
cd /opt/vk-turn-proxy
curl -fsSL -o server \
"https://github.com/cacggghp/vk-turn-proxy/releases/latest/download/server-linux-amd64"
chmod +x server
./server -h
Ожидаемо — в справке есть флаги -listen, -connect, -vless.
1.5 Systemd-сервис
cat >/etc/systemd/system/vk-turn-proxy.service <<'EOF'
[Unit]
Description=VK Turn Proxy server -> Xray VLESS 127.0.0.1:12766
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
WorkingDirectory=/opt/vk-turn-proxy
ExecStart=/opt/vk-turn-proxy/server \
-listen 0.0.0.0:56000 \
-connect 127.0.0.1:12766 \
-vless
Restart=always
RestartSec=5
NoNewPrivileges=true
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable vk-turn-proxy.service
systemctl start vk-turn-proxy.service
systemctl status vk-turn-proxy.service --no-pager -l
Ожидаемо: Active: active (running), в логе строка Listening.
- Важно про флаг
-vless - Без него сервер пересылает сырой UDP (для WireGuard/Hysteria). С
-vless— каждый поток smux оборачивается как TCP-соединение и уходит в Xray как обычный клиент VLESS.
1.6 Проверка после запуска
# UDP 56000 принимает входящие от FreeTurn
ss -ulnp | grep 56000
# TCP 12766 — Xray слушает
ss -tlnp | grep 12766
# Текущий ExecStart (убедиться что там -vless)
systemctl cat vk-turn-proxy.service | grep ExecStart
Оба порта должны быть заняты. Логи в режиме слежения:
journalctl -u vk-turn-proxy.service -f
При реальном подключении с телефона в логах появятся строки: KCP session established (server), smux session established (server).
Строки вида pipeConn: c1<-c2 copy error: EOF при рабочем туннеле — нормально: это штатное закрытие кратких TCP-сессий; не признак поломки.
1.7 Открытость порта у хостера
UFW у вас выключен, политика INPUT = ACCEPT — локально порт открыт. Если у хостера есть внешний файрвол (Cloud Firewall / Security Group) — убедитесь что входящий UDP 56000 разрешён.
1.8 Обновление бинарника
systemctl stop vk-turn-proxy.service
curl -fsSL -o /opt/vk-turn-proxy/server.new \
"https://github.com/cacggghp/vk-turn-proxy/releases/latest/download/server-linux-amd64"
chmod +x /opt/vk-turn-proxy/server.new
mv /opt/vk-turn-proxy/server.new /opt/vk-turn-proxy/server
systemctl start vk-turn-proxy.service
systemctl status vk-turn-proxy.service --no-pager -l
Часть 2. Клиент (Android)
2.1 Что нужно установить
| Приложение | Откуда | Роль |
|---|---|---|
| FreeTurn (turn-proxy-android) | Releases | Транспортный туннель через TURN ВК |
| NekoBox (NekoBoxForAndroid) | Releases | VPN-клиент VLESS, захват трафика приложений |
Обоим приложениям при первом запуске разрешите создание VPN-профиля в системном диалоге Android.
2.2 Ссылка на звонок ВК
Ссылка на звонок — это «ключ» для получения учётных данных TURN.
Получить ссылку можно несколькими способами:
| Способ | Описание |
|---|---|
| Вручную в ВК | Создать звонок в ВКонтакте, скопировать ссылку приглашения вида https://vk.com/call/join/...
|
| Headless Creator на VPS | Если настроен whitelist-bypass headless: tail -n 1 /opt/whitelist-bypass/vk-call-links.txt
|
Ссылка активна, пока звонок не закрыт. При каждом новом сеансе получайте свежую.
2.3 Настройка FreeTurn
Откройте вкладку Клиент в приложении.
| Поле | Что указать | Пример |
|---|---|---|
| IP и порт vk-turn-proxy | Публичный IP VPS и UDP-порт сервера | xxx.xxx.xxx.xxx:56000
|
| Ссылка на звонок | Полная ссылка вида https://vk.com/call/join/...
|
из предыдущего шага |
| Локальный адрес прослушивания | Порт на самом телефоне, куда FreeTurn принимает VLESS‑TCP от NekoBox | 127.0.0.1:9000
|
- Важно
- Локальный адрес 9000 — это не порт VLESS на VPS (12766). Это просто точка входа на телефоне между NekoBox и FreeTurn.
Нажмите кнопку запуска. Дождитесь в логах строки: Established DTLS connection!
Если вместо этого видите капчу — решите её в приложении (FreeTurn умеет автоматическую и ручную капчу).
2.4 Настройка NekoBox
Создание профиля VLESS
- Откройте NekoBox → вкладка Профили → + (добавить).
- Тип: VLESS.
- Заполните поля:
| Поле | Значение |
|---|---|
| Адрес (Server) | 127.0.0.1
|
| Порт (Port) | 9000 (тот же, что в FreeTurn «Локальный адрес»)
|
| UUID | Из 3x-ui (шаг 1.2 / 1.3), скопируйте точно |
| Шифрование (Encryption) | none
|
| Транспорт (Transport) | TCP
|
| TLS | Выкл / none
|
Сохраните профиль.
Подключение
- Выберите созданный профиль → нажмите Подключить.
- NekoBox поднимет VPN (Android-диалог — разрешить).
- Весь трафик или трафик выбранных приложений пойдёт через:
- NekoBox → VLESS → FreeTurn → TURN ВК → VPS → Xray → интернет.
Отбор приложений (Split tunneling)
В NekoBox: Настройки → Split tunneling — укажите, только каким приложениям нужен туннель. Либо оставьте полный VPN (все приложения).
2.5 Порядок запуска
Важен именно такой порядок:
- Запустить FreeTurn (клиент) → дождаться
Established DTLS connection! - Не останавливая FreeTurn, открыть NekoBox → подключить профиль VLESS.
Если запустить NekoBox первым — он попытается подключиться к 127.0.0.1:9000, куда FreeTurn ещё не слушает, и получит ошибку.
2.6 Если интернет не работает при активном туннеле
| Симптом | Что проверить |
|---|---|
| NekoBox не подключается | FreeTurn работает? Порты совпадают? (FreeTurn local = NekoBox server port) |
| Сайты не открываются | Правильный UUID в NekoBox? Тот же, что в 3x-ui? |
| Подключение есть, но медленно | Качество TURN ВК; попробуйте другую ссылку на звонок |
Логи FreeTurn: timeout или нет DTLS
|
grep 56000 на VPS; открыт ли UDP 56000 у хостера |
Логи VPS: только Listening, нет KCP/smux
|
FreeTurn не достучался — сеть или порт |
Логи VPS: backend dial error
|
Xray на 12766 не слушает; проверить 3x-ui |
Логи VPS: много copy error: EOF при рабочем интернете
|
Норма — штатное закрытие TCP-сессий, игнорировать |
2.7 Режим «только прокси» (без VPN на всё устройство)
Если не нужен системный VPN — в NekoBox включите Proxy only / режим SOCKS5. Тогда в нужном приложении (например, браузере или Telegram) вручную укажите прокси socks5://127.0.0.1:2080 (порт NekoBox по умолчанию, уточните в настройках).
Часть 3. Контрольный чеклист
| № | Действие | Готово |
|---|---|---|
| 1 | На VPS: бинарник /opt/vk-turn-proxy/server скачан, chmod +x
|
☐ |
| 2 | В 3x-ui: инбаунд VLESS на 127.0.0.1:12766 активен, UUID скопирован
|
☐ |
| 3 | Systemd-сервис запущен: systemctl is-active vk-turn-proxy = active
|
☐ |
| 4 | В ExecStart есть -vless и -connect 127.0.0.1:12766
|
☐ |
| 5 | grep 56000 — порт занят процессом server
|
☐ |
| 6 | На Android установлены FreeTurn и NekoBox | ☐ |
| 7 | Есть рабочая ссылка на звонок ВК https://vk.com/call/join/...
|
☐ |
| 8 | FreeTurn: IP:порт VPS верный, ссылка вставлена, локальный адрес 127.0.0.1:9000
|
☐ |
| 9 | FreeTurn запущен первым, в логах Established DTLS connection!
|
☐ |
| 10 | NekoBox: профиль VLESS на 127.0.0.1:9000, UUID совпадает с 3x-ui, TLS выкл
|
☐ |
| 11 | NekoBox подключён, VPN активен, интернет работает | ☐ |
Часть 4. Устранение неполадок
4.1 Диагностика с сервера
Проверить всё одной группой команд:
# Сервис запущен?
systemctl is-active vk-turn-proxy.service
# Какие аргументы?
systemctl cat vk-turn-proxy.service | grep ExecStart
# Порты
ss -ulnp | grep 56000
ss -tlnp | grep 12766
# Последние 50 строк лога
journalctl -u vk-turn-proxy.service -n 50 --no-pager
# Лог в реальном времени (при тесте с телефона)
journalctl -u vk-turn-proxy.service -f
4.2 Замена схемы на Hysteria2 (без VLESS)
Если хотите маршрутизировать трафик через Hysteria2 вместо VLESS:
- На VPS убрать
-vless, указать-connect 127.0.0.1:40001(порт Hy2). - В NekoBox создать профиль Hysteria2 на
127.0.0.1:9000с паролем иinsecure: true. - Подробнее — в отдельном руководстве.
4.3 Смена UUID в 3x-ui
Если компрометировали UUID — поменяйте в панели (Edit → Client → Generate new UUID) и обновите в NekoBox на всех устройствах. Перезапуск Xray произойдёт автоматически из панели.