Skip to content

Обход белого списка с помощью ВК.

Notifications You must be signed in to change notification settings

srgykuz/vk-proxy

Repository files navigation

vk-proxy

Проксирование трафика через ВКонтакте используя VK API. Цель этого проекта - обход белого списка и получение минимального доступа к глобальному интернету.

vk-proxy не может быть использован для полноценной замены VPN и прокси. API ВКонтакте имеет ограничения, поэтому передать много данных не получится. Telegram работать будет.

Требования

Потребуется аккаунт ВКонтакте с подтвержденным номером телефона и двухфакторной аутентификацией. Нужно будет создать сообщество и выдать ключ доступа к нему. Опционально нужно будет выдать ключ доступа к аккаунту.

Рекомендуется использовать отдельный, а не основной аккаунт. Пусть ваша активность и будет выглядеть как администрирование сообщества, по факту она будет считаться нецелевой и нарушать пользовательское соглашение. Хотя на данный момент неизвестно ни одного случая блокировки за такое использование API.

Программа должна быть установлена в двух местах: на устройстве в условиях белого списка и на устройстве за пределами белого списка. Второе устройство не обязательно должно быть арендованным сервером. Например, можно запустить программу на телефоне с мобильным интернетом, где белые списки действуют, и на домашнем компьютере с проводным интернетом, где белые списки не действуют.

Установка

Выполните установку в следующем порядке:

  1. сообщество
  2. аккаунт
  3. устройство за пределами белого списка
  4. устройство в условиях белого списка

Сообщество

1. Создайте

Откройте ВКонтакте, нажмите Сообщества, нажмите Создать сообщество, введите любое название и тематику, нажмите Создать сообщество, нажмите Перейти в сообщество.

Адресная строка будет иметь вид https://vk.com/club12345, где 12345 - ID сообщества. Запишите этот ID и название сообщества.

2. Настройте

Нажмите Сообщение, напишите что-нибудь, нажмите Отправить, отключите уведомления. Вернитесь обратно на страницу сообщества.

Нажмите Управление, измените Тип сообщества на Частное, нажмите Сохранить.

Нажмите Разделы, включите разделы Файлы и Товары, нажмите Сохранить.

Нажмите Дополнительно, нажмите Работа с API, нажмите Создать ключ, включите все доступы, нажмите Создать, подтвердите действие. Ключ доступа имеет вид vk1.a.abCdE.... Скопируйте его полностью и запишите. Никому не давайте этот ключ.

Нажмите Long Poll API, измените Отключено на Включено, нажмите Типы событий, включите всё. Вернитесь обратно на страницу сообщества.

Скачайте 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. Нажмите Далее, нажмите Далее, нажмите Опубликовать. Закройте открывшуюся страницу ВК Видео. Вернитесь обратно на страницу сообщества.

Где вы нажимали Фото и Видео, прокрутите вправо. Нажмите Товары, нажмите Добавить товары, введите любые: категория, название, описание. Нажмите Выберите изображение, выберите ранее загруженное фото, нажмите Выбрать фото, нажмите Сохранить изменения, нажмите Создать товар. Нажмите Товары, нажмите на созданный товар. Адресная строка будет иметь вид https://vk.com/market/product/12345-8901, где 8901 - ID товара. Запишите этот ID.

3. Повторите

Для тестирования программы достаточно одного сообщества. Но при реальном использовании вы быстро столкнетесь с лимитами VK API. Рекомендуется создать и настроить 5 сообществ.

Аккаунт

1. ID

Откройте ВКонтакте, нажмите на свою аватарку в правом верхнем углу, нажмите Управление аккаунтом VK ID, нажмите Мои данные. Под вашим именем будут цифры - это ID. Запишите его.

2. Ключ доступа

Дайте доступ любому из этих сервисов:

Сам сервис не будет иметь доступа к аккаунту. Доступ будет иметь только тот, у кого будет ключ, а будет он только у вас. Если вы все равно не хотите давать доступ, то смотрите Без доступа к аккаунту.

Нажмите Продолжить как.

Адресная строка будет иметь вид https://oauth.vk.com/blank.html#access_token=vk1.a.abCdE.... Ключ доступа имеет вид vk1.a.abCdE.... Скопируйте весь ключ до знака &, не копируйте сам знак. Запишите его. Никому не давайте этот ключ доступа.

После удаления vk-proxy вы можете отозвать выданный ключ доступа. Откройте ВКонтакте, нажмите на свою аватарку в правом верхнем углу, нажмите Управление аккаунтом VK ID, нажмите Сервисы и сайты, нажмите на сервис которому вы дали доступ, нажмите Отозвать доступ.

3. Имя

Придумайте и запишите любое имя для идентификации выданного ключа доступа. Например, если вы выдали доступ сервису aliexpress, то можете использовать имя aliexpress.

4. Повторите

Для тестирования программы достаточно одного аккаунта. Но при реальном использовании вы быстро столкнетесь с лимитами VK API. Рекомендуется создать и настроить 2 аккаунта. Аккаунт может быть один и тот же, но ключи доступа должны быть разные.

Linux

Рекомендуется использовать Debian или Ubuntu. Также можно использовать Docker.

Узнайте имя пользователя:

whoami

Если пользователь не root, то запускайте все следующие команды с помощью sudo, например sudo apt update.

1. Установите зависимости

apt update
apt install -y wget nano zbar-tools

2. Скачайте архив

Откройте Releases, раскройте Assets последней версии, скопируйте ссылку на Linux-версию. Выполните:

wget -O vk-proxy.tar.gz <ССЫЛКА>
mkdir vk-proxy
tar -xzf vk-proxy.tar.gz -C vk-proxy
cd vk-proxy

3. Установите программу

mkdir /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

4. Сгенерируйте секрет

Если секрет не сгенерирован ранее, то выполните:

vk-proxy -secret

Запишите его. Используйте этот секрет на втором устройстве, не генерируйте новый.

5. Заполните конфиг

Откройте конфиг:

nano /usr/local/etc/vk-proxy/config.json

Заполните конфиг значениями которые вы записывали ранее. Пример.

  • в log.output укажите "/var/log/vk-proxy/output.log"

Сохраните конфиг: Ctrl+O + Enter. Закройте конфиг: Ctrl+X.

6. Запустите программу

systemctl start vk-proxy

Это запустит программу в фоновом режиме. После перезагрузки компьютера она будет запущена автоматически.

Для перезапуска программы выполните:

systemctl stop vk-proxy
systemctl start vk-proxy

7. Проверьте программу

Выполните следующие команды и убедитесь в отсутствии ошибок. После проверки закройте команды с помощью Ctrl+C.

Эта команда должна отобразить active (running):

systemctl status vk-proxy

Эти команды не должны содержать ошибок:

journalctl -u vk-proxy
tail -n 100 /var/log/vk-proxy/output.log

Если где-то есть ошибка, то устраните ее, перезапустите программу и снова убедитесь в отсутствии ошибок.

Вы можете смотреть логи программы используя последнюю tail команду. Смотрите логи, когда что-то идет не так.

Windows

1. Скачайте архив

Откройте Releases, раскройте Assets последней версии, скачайте Windows-версию.

2. Установите программу

Распакуйте архив, перейдите в созданную папку.

3. Сгенерируйте секрет

Если секрет не сгенерирован ранее, то запустите программу secret.bat в текущей папке.

Запишите его. Используйте этот секрет на втором устройстве, не генерируйте новый.

4. Заполните конфиг

Откройте конфиг config.json в текущей папке и заполните его значениями которые вы записывали ранее. Пример.

  • в qr.zbarPath укажите "". На втором устройстве тоже укажите ""

5. Запустите программу

Запустите программу vk-proxy.exe в текущей папке. После закрытия терминала программа будет остановлена.

Для перезапуска программы закройте терминал и запустите её снова.

macOS

Адаптируйте инструкцию для Linux или Windows самостоятельно. Также можно использовать Docker.

Docker

1. Скачайте архив

Откройте Releases, раскройте Assets последней версии, скачайте Source code. zip для Windows, tar.gz для Linux и macOS.

2. Установите программу

Распакуйте архив, перейдите в созданную папку, откройте её в терминале.

Клонируйте файл config.template.json, назовите новый файл config.json.

Выполните:

docker compose build

3. Сгенерируйте секрет

Если секрет не сгенерирован ранее, то выполните:

docker compose run --rm vk-proxy -secret

Запишите его. Используйте этот секрет на втором устройстве, не генерируйте новый.

4. Заполните конфиг

Откройте конфиг config.json в текущей папке и заполните его значениями которые вы записывали ранее. Пример.

  • в socks.host укажите "0.0.0.0"

5. Запустите программу

docker compose up -d

Это запустит программу в фоновом режиме. После перезагрузки компьютера она будет запущена автоматически.

Для перезапуска программы выполните:

docker compose restart

Для просмотра логов выполните:

docker compose logs -n 100

Android

Предварительно установите и запустите Termux. Рекомендуется устанавливать версию из F-Droid.

Некоторые шаги требуют ввода текста. Удобнее будет это сделать на компьютере и отправить готовый текст на телефон.

1. Скачайте архив

Откройте Releases, раскройте Assets последней версии, скопируйте ссылку на Android-версию. Выполните:

curl -L -o vk-proxy.tar.gz <ССЫЛКА>
tar -xzf vk-proxy.tar.gz

2. Сгенерируйте секрет

Если секрет не сгенерирован ранее, то выполните:

./vk-proxy -secret

Запишите его. Используйте этот секрет на втором устройстве, не генерируйте новый.

3. Заполните конфиг

Если вставляете уже заполненный конфиг, то удалите старый:

rm config.json

Откройте конфиг:

nano config.json

Заполните конфиг значениями которые вы записывали ранее. Пример.

  • в qr.zbarPath укажите "". На втором устройстве тоже укажите ""
  • в dns.provider укажите "yandex" или "msk-ix"

Сохраните конфиг: Ctrl+O + Enter. Закройте конфиг: Ctrl+X.

4. Запустите программу

./vk-proxy

После закрытия терминала программа будет остановлена.

Для перезапуска программы остановите ее с помощью Ctrl+C и запустите снова.

Использование

После запуска будет доступен SOCKS-прокси по адресу 127.0.0.1:1080. На устройстве в условиях белого списка установите его как прокси чтобы обойти ограничения. Проксируйте минимальное количество данных.

Рекомендуется использовать vk-proxy в связке с любым V2Ray-клиентом для настройки точечного роутинга. Например, отправляйте весь трафик Google через vk-proxy, а остальной трафик пускайте напрямую.

Обратите внимание на Flood control. Не ожидайте быстрой загрузки и стабильного соединения, делайте паузы между запросами, передавайте как можно меньше трафика. Ещё раз: vk-proxy расчитан лишь на минимальный доступ к глобальному интернету.

Безопасность

Передаваемый трафик зашифрован только если вы используете защищенное соединение (например, HTTPS): ВКонтакте не сможет прочитать то, что вы передаете. Не рекомендуется использовать незащищенное соединение (например, HTTP): ваш трафик может быть легко прочитан.

В любом случае, не нарушайте законодательство РФ и не передавайте чувствительные данные.

Конфиг

Указать путь к конфигу:

vk-proxy -config /path/to/config.json

По умолчанию используется config.json в директории программы.

Возможные настройки и их значения по умолчанию:

Описание
{
    "log": {
        // Уровень логов.
        // Возможные значения: -4 - debug, 0 - info, 4 - warn, 8 - error
        "level": 0,

        // Путь к файлу куда сохранять логи.
        // Если пусто, то выводить логи в терминал
        "output": "",

        // Логировать тела запросов и ответов
        "payload": false
    },

    "dns": {
        // Использовать этот DNS-сервер вместо системного.
        // Поддерживается только plaintext DNS over UDP
        "host": "",

        // Если указан host, то указывает порт сервера
        "port": 53,

        // Установить host и port автоматически.
        // Возможные значения: yandex, msk-ix, google, cloudflare
        "provider": ""
    },

    "session": {
        // Если соединение бездействует в течение этого времени, то оно будет закрыто.
        // В миллисекундах. 0 выключает проверку
        "timeout": 30000,

        // Ключ шифрования. 64 символа, a-z, 0-9.
        // Используется только для данных программы. Не шифрует передаваемый трафик.
        // Значение должно быть одинаковым на обоих устройствах
        "secret": ""
    },

    "socks": {
        // Запустить SOCKS-прокси на этом адресе
        "host": "127.0.0.1",

        // Запустить SOCKS-прокси на этом порту
        "port": 1080
    },

    "api": {
        // Не использовать user.accessToken.
        // Значение должно быть одинаковым на обоих устройствах
        "unathorized": false
    },

    "qr": {
        // Путь к программе ZBar.
        // Если пусто, то выключает использование ZBar.
        // Если пусто, то на втором устройстве тоже должно быть пусто
        "zbarPath": "zbarimg",

        // Куда сохранять временные QR-коды.
        // Если пусто, то используется временная директория системы
        "saveDir": ""
    },

    // Значение должно быть одинаковым на обоих устройствах
    "clubs": [
        {
            // Имя сообщества для идентификации в логах
            "name": "",

            // ID сообщества
            "id": "",

            // Ключ доступа к API
            "accessToken": "",

            // ID созданного альбома
            "albumID": "",

            // ID загруженного фото
            "photoID": "",

            // ID загруженного видео
            "videoID": "",

            // ID созданного товара
            "marketID": ""
        }
    ],

    // Значение должно быть одинаковым на обоих устройствах
    "users": [
        {
            // Имя пользователя для идентификации в логах
            "name": "",

            // ID пользователя
            "id": "",

            // Ключ доступа к API
            "accessToken": ""
        }
    ]
}

Пример

Заполненный конфиг:

Пример
{
    "log": {
        "output": "/var/log/vk-proxy/output.log"
    },
    "dns": {
        "provider": ""
    },
    "session": {
        "secret": "abc123"
    },
    "socks": {
        "host": "127.0.0.1",
        "port": 1080
    },
    "api": {
        "unathorized": false
    },
    "qr": {
        "zbarPath": "zbarimg"
    },
    "clubs": [
        {
            "name": "test",
            "id": "12345",
            "accessToken": "vk1.a.abCdE",
            "albumID": "6789",
            "photoID": "9876",
            "videoID": "7890",
            "marketID": "8901"
        }
    ],
    "users": [
        {
            "name": "aliexpress",
            "id": "123",
            "accessToken": "vk1.a.eDcBA"
        }
    ]
}

Несколько сообществ или пользователей указывайте через запятую:

Пример
{
    "clubs": [
        {
            "name": "club1"
        },
        {
            "name": "club2"
        },
        {
            "name": "club3"
        }
    ],
    "users": [
        {
            "name": "user1"
        },
        {
            "name": "user2"
        }
    ]
}

Без доступа к аккаунту

Если вы не хотите давать доступ к аккаунту, то в конфиге на всех устройствах укажите:

{
    "api": {
        "unathorized": true
    }
}

В этом случае user.accessToken использоваться не будет. При этом вероятность Flood control значительно увеличивается.

Flood control

vk-proxy может начать работать нестабильно или вовсе перестать работать. В логах программы вы увидите ошибку Flood control. Это значит, что вы передаете слишком много трафика или слишком быстро. VK API имеет ограничения, поэтому передать много данных не получится. Используйте прокси только для минимального доступа к важным сервисам.

Подождите некоторое время для обнуления достигнутых лимитов и повторите запрос. Во время использования vk-proxy сократите количество передаваемого трафика и делайте паузы между запросами.

Для минимизации этой ошибки:

  • создайте больше сообществ и аккаунтов
  • проксируйте только определенные сервисы, а не весь трафик целиком
  • устанавливайте прокси на уровне браузера или даже сайта, а не на уровне всей системы
  • отключите ненужный контент (фото, видео, стили и т.п)
  • используйте блокировщик рекламы
  • используйте минималистичные версии сайтов
  • используйте режим экономии трафика или роуминга
  • если безопасность и приватность неважны, то используйте HTTP-версию сайта вместо HTTPS

V2Ray

Рекомендуется использовать vk-proxy в связке с любым V2Ray-клиентом. В этом случае вы сможете настроить точечный роутинг и обеспечить более широкую поддержку входящих интерфейсов.

Примеры клиентов:

Примеры конфигов:

v2rayN

Профиль:

socks://Og%3D%3D@127.0.0.1:1080#vk-proxy

Скопируйте, откройте клиент, нажмите Серверы, нажмите Импорт массива URL из буфера обмена.

Роутинг:

[
    {
        "domain": [
            "google.com",
            "gstatic.com",
            "googleusercontent.com",
            "wikipedia.org",
            "wikimedia.org",
            "telegram.org"
        ],
        "network": "tcp",
        "outboundTag": "proxy",
        "remarks": "proxy"
    },
    {
        "outboundTag": "direct",
        "port": "0-65535",
        "remarks": "direct"
    }
]

Скопируйте, откройте клиент, нажмите Настройки, нажмите Настройки маршрутизации, нажмите Добавить, в Примечания напишите vk-proxy, нажмите Импорт правил из буфера обмена, нажмите Да, нажмите Подтвердить, нажмите Подтвердить. Внизу, около Маршрутизация, выберите vk-proxy.

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": false,
        "network": "tcp",
        "outboundTag": "proxy",
        "remarks": "vk-proxy: proxy"
    },
    {
        "enabled": true,
        "locked": false,
        "outboundTag": "direct",
        "port": "0-65535",
        "remarks": "vk-proxy: direct"
    }
]

Скопируйте, откройте клиент, нажмите настройки, нажмите Маршрутизация, нажмите три точки, нажмите Импорт правил из буфера обмена, подтвердите удаление существующих правил.

v2ray/xray/sing-box
{
    "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"
            }
        ]
    }
}

Telegram

Если используете приложение, то установите SOCKS-прокси: нажмите Настройки, нажмите Данные и память, нажмите Настройки прокси, включите Использовать прокси, в Сервер укажите 127.0.0.1 и в Порт укажите 1080, нажмите галочку, после успешной проверки включите Использовать прокси.

Если используете веб-версию, то используйте V2Ray и проксируйте домен telegram.org.

Рекомендуется отключить автозагрузку медиа: нажмите Настройки, нажмите Данные и память, выключите всю автозагрузку. Загружайте вручную и выборочно, не пытайтесь загрузить большие файлы.