Проксирование трафика через ВКонтакте используя VK API. Цель этого проекта - обход белого списка и получение минимального доступа к глобальному интернету.
vk-proxy не может быть использован для полноценной замены VPN и прокси. VK API имеет жесткие ограничения, поэтому с помощью этой программы вы едва сможете использовать, например, Google или Wikipedia, не говоря уже о более ресурсоемких сайтах и приложениях. Telegram будет работать только в текстовом режиме.
Передаваемый трафик зашифрован только если вы используете защищенное соединение (например, HTTPS): ВКонтакте не сможет прочитать то, что вы передаете. Не рекомендуется использовать незащищенное соединение (например, HTTP): ваш трафик может быть легко прочитан.
Для установки потребуется аккаунт ВКонтакте с подтвержденным номером телефона и двухфакторной аутентификацией. Нужно будет создать сообщество и выдать ключ доступа к нему. Опционально нужно будет выдать ключ доступа к аккаунту. Все ключи доступны только вам и не передаются куда-либо.
Программа должна быть запущена в двух местах: на устройстве в условиях белого списка и на устройстве за пределами белого списка. Второе устройство не обязательно должно быть сервером с публичным статическим айпи. Например, можно запустить программу на телефоне с мобильным интернетом, где белые списки действуют, и на компьютере с проводным интернетом, где белые списки не действуют.
Выполните установку в следующем порядке:
- сообщество
- аккаунт
- устройство за пределами белого списка
- устройство в условиях белого списка
Конфиг на устройствах должен быть одинаковыми, за исключением нескольких настроек не влияющих на передачу данных, иначе программа будет работать некорректно.
Программа может быть запущена как постоянно, так и по необходимости.
Откройте ВКонтакте, нажмите Сообщества, нажмите Создать сообщество, введите любое название и тематику, нажмите Создать сообщество, нажмите Перейти в сообщество.
Адресная строка будет иметь вид https://vk.com/club12345, где 12345 - ID сообщества. Сохраните этот ID и название сообщества.
Нажмите Сообщение, напишите что-нибудь, нажмите Отправить, отключите уведомления. Вернитесь обратно на страницу сообщества, нажав два раза на название сообщества.
Предварительно скачайте stub.jpg. Нажмите Фото, нажмите Добавить фото, выберите stub.jpg. Нажмите на загруженное фото. Адресная строка будет иметь вид https://vk.com/album-12345_6789?z=photo-12345_9876, где 6789 - это ID альбома, а 9876 - это ID фото. Сохраните оба ID. Вернитесь обратно, нажав на название сообщества.
Предварительно скачайте stub.mp4. Нажмите Видео, наведите на Добавить, нажмите Добавить видео, нажмите Выбрать файл, выберите stub.mp4. Ссылка на видео, справа, будет иметь вид https://vk.com/video-12345_7890, где 7890 - ID видео. Сохраните этот ID. Нажмите Далее, нажмите Далее, нажмите Опубликовать. Закройте открывшуюся страницу ВК Видео и вернитесь обратно на страницу сообщества.
Нажмите Управление, измените Тип сообщества на Частное, нажмите Сохранить.
Нажмите Разделы, включите раздел Файлы, нажмите Сохранить.
Нажмите Дополнительно, нажмите Работа с API, нажмите Создать ключ, включите все доступы, нажмите Создать, подтвердите действие. Ключ доступа имеет вид vk1.a.abCdE.... Скопируйте его полностью и сохраните. Никому не давайте этот ключ доступа.
Нажмите Long Poll API, измените Отключено на Включено, нажмите Типы событий, включите: Исходящее сообщение, Фотографии Добавление, Фотографии Новый комментарий, Видеозаписи Новый комментарий, Записи на стене Добавление, Комментарии на стене Добавление, Прочее Изменение настроек.
Для тестирования программы достаточно одного сообщества. Но при реальном использовании вы быстро столкнетесь с лимитами VK API. Рекомендуется создать и настроить 5 сообществ. При необходимости можно и больше.
Откройте ВКонтакте, нажмите на свою аватарку в правом верхнем углу, нажмите Управление аккаунтом VK ID, нажмите Мои данные. Под вашим именем будут цифры - это ID. Сохраните его.
Дайте доступ любому из этих сервисов:
Сам сервис не будет иметь доступа к аккаунту. Доступ будет иметь только тот, у кого будет ключ, а будет он только у вас. Если вы все равно не хотите давать доступ, то смотрите Без доступа к аккаунту.
Нажмите Продолжить как.
Адресная строка будет иметь вид https://oauth.vk.com/blank.html#access_token=vk1.a.abCdE.... Ключ доступа имеет вид vk1.a.abCdE.... Скопируйте весь ключ доступа до знака &, не копируйте сам знак. Сохраните его. Никому не давайте этот ключ доступа.
Вы можете отозвать выданный ключ доступа. Откройте ВКонтакте, нажмите на свою аватарку в правом верхнем углу, нажмите Управление аккаунтом VK ID, нажмите Сервисы и сайты, нажмите на сервис которому вы дали доступ, нажмите Отозвать доступ.
Придумайте и сохраните любое имя для идентификации выданного ключа доступа. Например, если вы выдали доступ сервису aliexpress, то можете использовать имя aliexpress.
Для тестирования программы достаточно одного аккаунта. Но при реальном использовании вы быстро столкнетесь с лимитами VK API. Рекомендуется создать и настроить 2 аккаунта. При необходимости можно и больше. При этом ID может быть одинаковым, но ключи доступа должны быть разные.
Рекомендуется использовать Debian или Ubuntu. Также можно использовать Docker.
В терминале выполните:
whoamiЕсли пользователь не root, то запускайте следующие команды с помощью sudo, например sudo apt update.
apt update
apt install -y wget nano zbar-toolsОткройте Releases, раскройте Assets последней версии, скопируйте ссылку на Linux-версию. Выполните:
wget -O vk-proxy.tar.gz <ССЫЛКА>
mkdir vk-proxy
tar -xzf vk-proxy.tar.gz -C vk-proxy
cd vk-proxymkdir /var/log/vk-proxy
touch /var/log/vk-proxy/output.log
chown nobody:nogroup /var/log/vk-proxy/output.log
mv logrotate.txt /etc/logrotate.d/vk-proxy
mkdir /usr/local/etc/vk-proxy
mv vk-proxy /usr/local/bin/
mv config.json /usr/local/etc/vk-proxy/
mv systemd.txt /etc/systemd/system/vk-proxy.service
systemctl daemon-reload
systemctl enable vk-proxyЕсли секрет не сгенерирован ранее, то выполните:
vk-proxy -secretСохраните его.
Откройте конфиг:
nano /usr/local/etc/vk-proxy/config.jsonЗаполните конфиг значениями которые вы сохраняли ранее.
Пример конфига
{
"log": {
"output": "/var/log/vk-proxy/output.log"
},
"session": {
"secret": "abc123"
},
"socks": {
"listenHost": "127.0.0.1",
"listenPort": 1080
},
"api": {
"unathorized": false
},
"qr": {
"zbarPath": "zbarimg"
},
"clubs": [
{
"name": "test",
"id": "12345",
"accessToken": "vk1.a.abCdE",
"albumID": "6789",
"photoID": "9876",
"videoID": "7890"
}
],
"users": [
{
"name": "aliexpress",
"id": "123",
"accessToken": "vk1.a.eDcBA"
}
]
}Сохраните конфиг: Ctrl+O + Enter. Закройте конфиг: Ctrl+X.
systemctl start vk-proxyЭто запустит программу в фоновом режиме. После перезагрузки компьютера она будет запущена автоматически.
Для перезапуска программы выполните:
systemctl stop vk-proxy
systemctl start vk-proxyВыполните следующие команды и убедитесь в отсутствии ошибок. После проверки закройте команды с помощью Ctrl+C.
Эта команда должна отобразить active (running):
systemctl status vk-proxyЭти команды не должны содержать ошибок:
journalctl -u vk-proxytail -n 100 /var/log/vk-proxy/output.logЕсли где-то есть ошибка, то устраните ее, перезапустите программу и снова убедитесь в отсутствии ошибок.
Вы можете смотреть логи программы используя последнюю tail команду. Смотрите логи, когда что-то идет не так.
На Windows установка ZBar затруднительна. Рекомендуется использовать WSL и запускать Linux-версию. Также можно использовать Docker.
Для Windows-версии необходимо выключить использование QR-кодов.
Откройте Releases, раскройте Assets последней версии, скачайте Windows-версию.
Распакуйте архив, перейдите в созданную папку, нажмите правую кнопку мыши, нажмите "Открыть в терминале".
Выполните это. Замените vk-proxy на ./vk-proxy.exe.
Выполните это. Заполните конфиг в текущей папке.
- в
log.outputукажите"" - в
qr.zbarPathукажите"". На втором устройстве тоже укажите""
./vk-proxy.exeПосле закрытия терминала программа будет остановлена. Чтобы запустить ее снова, откройте папку в терминале и запустите программу.
Адаптируйте инструкцию для Linux или Windows самостоятельно. Также можно использовать Docker.
Откройте Releases, раскройте Assets последней версии, скачайте Source code. zip для Windows, tar.gz для Linux и Mac.
Распакуйте архив, перейдите в созданную папку, откройте её в терминале.
Клонируйте файл config.template.json, назовите новый файл config.json.
Выполните:
docker compose buildВыполните это. Используйте команду:
docker compose run --rm vk-proxy -secretВыполните это. Заполните конфиг в текущей папке.
- в
log.outputукажите"" - в
socks.listenHostукажите"0.0.0.0"
docker compose up -dЭто запустит программу в фоновом режиме. После перезагрузки компьютера она будет запущена автоматически.
Для перезапуска программы выполните:
docker compose restartДля просмотра логов выполните:
docker compose logs -n 100Предварительно установите и запустите Termux. Рекомендуется устанавливать версию из F-Droid.
Для Android-версии необходимо выключить использование QR-кодов.
pkg update
pkg install -y wget nano zbar prootВыполните это. Используйте Android-версию.
Выполните это. Замените vk-proxy на ./vk-proxy.
Откройте конфиг:
nano config.jsonИ выполните это.
- в
log.outputукажите"" - в
qr.zbarPathукажите"". На втором устройстве тоже укажите""
Если печатать на телефоне утомительно, то заполните конфиг на компьютере, отправьте текст на телефон, скопируйте этот текст и вставьте в конфиг с нуля:
rm config.json
nano config.jsontermux-chroot ./vk-proxyПосле закрытия терминала программа будет остановлена. Чтобы запустить ее снова, откройте папку в терминале и запустите программу.
Для перезапуска программы остановите ее с помощью Ctrl+C и запустите снова.
После установки и запуска будет доступен SOCKS-прокси по адресу 127.0.0.1:1080. На устройстве в условиях белого списка установите его там, где нужно проксировать трафик через ВК.
Обратите внимание на Flood control. Не ожидайте быстрой загрузки страниц, делайте паузы между запросами, передавайте как можно меньше трафика. Ещё раз: vk-proxy расчитан лишь на минимальный доступ к глобальному интернету.
Рекомендуется использовать vk-proxy в связке с любым V2Ray-клиентом для настройки точечного роутинга. Например, отправляйте весь трафик Google через vk-proxy, а остальной трафик пускайте напрямую.
В Linux и macOS используйте curl, в Windows - curl.exe. В терминале выполните:
curl --verbose --socks5 127.0.0.1:1080 https://www.google.com/Вы должны увидеть код страницы и его окончание </html>.
curl --verbose --socks4 127.0.0.1:1080 https://api.ipapi.is/Вы должны увидеть информацию об айпи устройства за пределами белого списка.
Возможные настройки и их значения по умолчанию.
Описание
Указать путь к конфигу:
vk-proxy -config /path/to/config.jsonПо умолчанию используется config.json в директории программы.
Если вы не хотите давать доступ к аккаунту, то в конфиге на всех устройствах укажите:
{
"api": {
"unathorized": true
}
}В этом случае user.accessToken использоваться не будет. Использование QR-кодов будет выключено.
При этом вероятность Flood control значительно увеличивается.
vk-proxy может начать работать нестабильно или вовсе перестать работать. В логах программы вы увидите ошибку Flood control. Это значит, что вы передаете слишком много трафика или слишком быстро. vk-proxy не рассчитан на такую работу. VK API имеет ограничения, поэтому передать много трафика не получится. Используйте vk-proxy только для минимального доступа к важным сервисам.
Подождите некоторое время для обнуления достигнутых лимитов и повторите запрос. Во время использования vk-proxy сократите количество передаваемого трафика и делайте паузы между запросами.
Для минимизации этой ошибки:
- создайте больше сообществ и аккаунтов
- проксируйте только определенные сервисы, а не весь трафик целиком
- устанавливайте прокси на уровне браузера или даже сайта, а не на уровне всей системы
- отключите ненужный контент (картинки, видео, стили и т.п)
- используйте блокировщик рекламы
- используйте минималистичные версии сайтов
- используйте режим экономии трафика
- если безопасность и приватность неважны, то используйте HTTP-версию сайта вместо HTTPS
Рекомендуется использовать vk-proxy в связке с любым V2Ray-клиентом. В этом случае вы сможете настроить точечный роутинг и обеспечить более широкую поддержку входящих интерфейсов.
Примеры V2Ray-клиентов:
Пример конфига V2Ray
{
"log": {
"loglevel": "info"
},
"inbounds": [
{
"protocol": "socks",
"listen": "127.0.0.1",
"port": 2000,
"settings": {
"udp": false
},
"sniffing": {
"enabled": true,
"destOverride": [
"http",
"tls"
]
}
}
],
"outbounds": [
{
"tag": "direct",
"protocol": "freedom"
},
{
"tag": "vk-proxy",
"protocol": "socks",
"settings": {
"servers": [
{
"address": "127.0.0.1",
"port": 1080
}
]
}
}
],
"routing": {
"domainStrategy": "IPOnDemand",
"rules": [
{
"type": "field",
"domains": [
"google.com",
"gstatic.com",
"googleusercontent.com",
"wikipedia.org",
"wikimedia.org",
"telegram.org"
],
"network": "tcp",
"outboundTag": "vk-proxy"
}
]
}
}Пример конфига v2rayN и v2rayNG
Интерфейс:
socks://Og%3D%3D@127.0.0.1:1080#vk-proxy
Роутинг:
[
{
"domain": [
"google.com",
"gstatic.com",
"googleusercontent.com",
"wikipedia.org",
"wikimedia.org",
"telegram.org"
],
"enabled": true,
"locked": true,
"network": "tcp",
"outboundTag": "proxy",
"remarks": "vk-proxy: proxy"
},
{
"enabled": true,
"locked": true,
"outboundTag": "direct",
"port": "0-65535",
"remarks": "vk-proxy: direct"
}
]Рекомендуется использовать веб-версию - https://web.telegram.org. Обязательно отключите медиаконтент: нажмите Настройки, нажмите Данные и память, выключите Загружать автоматически или выключите всю автозагрузку. Не скачивайте фото и видео, используйте только текст.
{ "log": { "level": 0, // Уровень логов. -4 - debug, 0 - info, 4 - warn, 8 - error "output": "", // Путь к файлу куда сохранять логи. Если пусто, то выводить логи в терминал "payload": false // Логировать тела запросов и ответов }, "session": { "timeout": 30000, // Если соединение бездействует в течение этого времени, то оно будет закрыто. В миллисекундах. 0 выключает проверку "secret": "" // Ключ шифрования }, "socks": { "listenHost": "127.0.0.1", // Запустить SOCKS-прокси на этом адресе "listenPort": 1080, // Запустить SOCKS-прокси на этом порту "forwardSize": 1048576, // Максимальный размер пересылаемого датаграмма. В байтах "forwardInterval": 500 // Буферизировать проксируемые данные в течение этого времени перед упаковкой их в датаграммы. В миллисекундах }, "api": { "unathorized": false // Не использовать user.accessToken }, "qr": { "zbarPath": "zbarimg", // Путь к программе ZBar. Если пусто, то выключает использование QR-кодов "saveDir": "" // Куда сохранять временные QR-коды. Если пусто, то используется временная директория системы }, "clubs": [ // Описания сообществ { "name": "", // Имя для идентификации в логах "id": "", // ID сообщества "accessToken": "", // Ключ доступа к API "albumID": "", // ID альбома куда загружать QR-коды "photoID": "", // ID загруженного фото "videoID": "" // ID загруженного видео } ], "users": [ // Описания пользователей { "name": "", // Имя для идентификации в логах "id": "", // ID пользователя "accessToken": "" // Ключ доступа к API } ] }