Иллюзия приватности

VPN сегодня воспринимается как божественный щит, который в один клик защищает вас -- трафик зашифрован, IP другой, ваша анонимность под контролем, классно же? А что если инструменту которому вы так доверяете на самом деле собирает и продает ваши данные?

Я давно нахожусь в индустрии VPN и на самом деле не все так классно как выглядит на первый взгляд. В статье разберем как работает на самом деле VPN, что многие сервисы обещают, но на деле этого нет и как все же в таких условиях себя обезопасить p.s самый лучший вариант это создание своего личного VPN-сервера контролировать который будешь именно ты.

Иллюзия приватности и кейс Onavo

Пример Onavo Protect — в 2013 году Facebook выкупила это приложение. Рекламировалось оно как «экономитель мобильного трафика»

По факту это приложение собирало все данные пользователей — какие приложения открыты, сколько времени проводите в них, даже каждое касание экрана.

Они даже придумали мотивацию для подростков от 13-17 лет, которые получали подарочные карты за ПОЛНЫЙ доступ к их устройствам

Apple если что даже заблокировало это приложение в 2018 году, но Facebook просто переименовал его и продолжил его работу

Если даже такая всемирно известная компания как Facebook использовала их приложение с не чистыми мыслями, то что уж говорить про другие сервисы.

Вывод один — VPN может стать не вашим инструментом защиты, а неким Троянским конем

Как работает VPN на низком уровне

Когда вы подключаетесь к впн, создается виртуальный сетевой интерфейс (к примеру, tun0).

Все что идет через этот интерфейс шифруется и упаковывается в обычные IP-пакеты.

На примере WireGuard, данные из приложения в начале уходят в tun0, там они оборачиваются в UDP-пакет и затем шифруются с помощью ChaCha20 и только потом отправляются на сервер

На самом сервер пакет расшифровывается и передаётся в интернет как обычный запрос.

$ ip link show tun0
5: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1420 ...

Исходя из сказанного выше видно, что VPN по сути это просто шифрованный канал между двумя IP. А функции анонимности или обхода DPI зависят от конкретной реализации и настроек протокола

Типичные уязвимости «коммерческих» VPN

  1. Логи и утечки
    Утечки показывают, что IP, email и метаданные могут сохраняться и утекать.

  2. Одинаковая инфраструктура
    Разные бренды могут работать на одном движке, просто с разными логотипами и разной направленностью на определенную аудиторию

  3. Отслеживание через TLS fingerprinting
    DPI-системы анализируют TLS-расширения, SNI итд. Публичные VPN часто используют нетипичные TLS-fingerprint или предсказуемый SNI, таким образом такие потоки легко помечаются и могут быть заблокированы.

Self-hosted VPN: контроль над сервером

Чтобы полстью контролировать трафик и быть уверенным в анонимности, нужно поднять свой личный сервер.

Например, через WireGuard или OpenVPN.

Почему WireGuard

  • Есть вариант быстро генерировать ключи и конфиги.

  • Рандомизация: порт, адрес, persistent keepalive, MTU, DNS.

Скрипт (bash)

Сохраняем как wg_generate.sh, выполняем на сервере. Скрипт подразумевает, что у вас уже установлен wg/wg-quick и qrencode

#!/usr/bin/env bash
set -euo pipefail

# Параметры (можно менять)
SERVER_PUBLIC_IP="203.0.113.1"    # заменить на внешний IP / домен
BASE_WG_IF="wg0"
OUTDIR="./wg-confs"
mkdir -p "$OUTDIR"

# Функции
rand_port() {
  shuf -i 20000-61000 -n 1
}

rand_subnet() {
  # Возвращает подсеть 10.X.0.0/24 где X случайное от 2 до 254
  echo "10.$((RANDOM % 253 + 2)).0.0/24"
}

rand_ip_in_subnet() {
  subnet_base=$1  # например 10.11.0.0/24
  octet=$(echo "$subnet_base" | awk -F. '{print $2}')
  echo "10.${octet}.$((RANDOM%253+1)).$((RANDOM%253+1))"
}

# Генерация ключей
server_priv=$(wg genkey)
server_pub=$(echo "$server_priv" | wg pubkey)

client_priv=$(wg genkey)
client_pub=$(echo "$client_priv" | wg pubkey)

WG_PORT=$(rand_port)
CLIENT_ADDR=$(rand_ip_in_subnet "10.$((RANDOM % 253 + 2)).0.0/24")
SERVER_WG_ADDR="10.0.0.1/24"  # для сервера можно фиксировать

# Конфигурации
SERVER_CONF="$OUTDIR/${BASE_WG_IF}_server.conf"
CLIENT_CONF="$OUTDIR/${BASE_WG_IF}_client.conf"

cat > "$SERVER_CONF" <<EOF
[Interface]
Address = $SERVER_WG_ADDR
ListenPort = $WG_PORT
PrivateKey = $server_priv
SaveConfig = true
PostUp = iptables -A FORWARD -i ${BASE_WG_IF} -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i ${BASE_WG_IF} -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
MTU = $((1200 + RANDOM % 320))  # небольшая рандомизация MTU
EOF

cat > "$CLIENT_CONF" <<EOF
[Interface]
PrivateKey = $client_priv
Address = $CLIENT_ADDR/32
DNS = 1.1.1.1
MTU = $((1200 + RANDOM % 320))

[Peer]
PublicKey = $server_pub
Endpoint = ${SERVER_PUBLIC_IP}:${WG_PORT}
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = $((20 + RANDOM % 21))
EOF

chmod 600 "$SERVER_CONF" "$CLIENT_CONF"

echo "Сгенерировано:"
echo "  Серверный конфиг: $SERVER_CONF"
echo "  Клиентский конфиг: $CLIENT_CONF"

WireGuard, конечно, крутая вещь, но если у твоего провайдера очень мощный DPI, то лучше использовать VLESS/V2Ray с WebSocket и TLS.

VLESS (V2Ray) plus WebSocket plus TLS нужен, когда DPI слишком легко определяет обычные протоколы.

Он нужен, чтобы трафик выглядел как обычный HTTPS.

А если добавить WebSocket с TLS, то вообще не поймешь, что это не обычный веб-серфинг.

TLS шифрует трафик, поэтому DPI не видит, что там передается.

WebSocket передает данные через HTTP/HTTPS.

Если еще и UUID с WebSocket path менять случайным образом, то шансы, что твой трафик распознают как ВПН, сильно падают.

{
  "inbounds": [{
    "port": 443,
    "protocol": "vless",
    "settings": {
      "clients": [{"id": "UUID-CLIENT", "level":0}],
      "decryption": "none"
    },
    "streamSettings": {
      "network": "ws",
      "security": "tls",
      "wsSettings": {
        "path": "/api/v1/abcdef1234",
        "headers": {"Host":"example.com"}
      },
      "tlsSettings": {
        "serverName": "example.com",
        "alpn": ["h2","http/1.1"],
        "minVersion": "1.3"
      }
    }
  }],
  "outbounds": [{"protocol": "freedom", "settings": {}}]
}

Рандомизация для обхода DPI

Чтобы снизить вероятность распознавания трафика можно попробовать:

  • UUID клиента для каждого подключения.

  • TLS-ALPN и минимальную версию TLS (1.2–1.3).

  • Случайный порт на сервере (443, 8443, 10443).

Пример генерации UUID и случайного WebSocket path на bash:

#!/bin/bash
UUID=$(uuidgen)
WS_PATH="/api/v1/$(head /dev/urandom | tr -dc a-f0-9 | head -c 8)"
echo "UUID=$UUID"
echo "WS_PATH=$WS_PATH"

Y2Y-модель или почему это самый оптимальный вариант

Важно не забыть упомянуть про модель Y2Y (You-to-You) — По факту это модель предполагает что все настройки и управлением сервером берез на себя платформа. Это тоже самое, что самостоятельно создать вручную сервер и настроить его, но просто всю сложную техническую часть на себя берет сервис. Платформы вроде hynet.space как раз и реализуют такую модель: пользователь получает готовые ключи, вся настройка производиться сервисом, сервер управляется автоматически, поэтому нет необходимости в SSH-доступе или ручной настройки

Контроль над данными — больше, чем просто VPN

Как мы уже выяснили VPN не делает вас полностью анонимным — он создаёт шифрованный туннель, скрывает IP, но не защищает от браузерного фингерпринтинга, DNS-запросов или потенциально небезопасного провайдера.

Если вы хотите максимальную защиту, публичный VPN вам не поможе, только ручное создание своего сервера или модель Y2Y

Комментарии (3)


  1. Zibx
    16.11.2025 10:34

    Один свой сервер не даст «максимальную защиту» — ip сервера пришедший на honeypot с, какое они там название теперь придумали, «заведомо экстремистским контентом» свяжут с вами если на то будет особое желание, даже в другой стране (прикинутся правообладателем на что-то и обратятся в хостинг за личными данными для составления судебного иска на том основании что с IP сервера раздавали торрент с музыкой, хостинг таких логово обычно не ведёт и поверит).

    Для получения «приемлемой защиты» подойдёт цепочка из нескольких серверов, желательно включить в одно из звеньев хитрую маршрутизацию типа тора, а другое купить за крипту), после чего неукоснительно соблюдать этикет анонимности: никаких личных данных, локаций, фотографий, емэйлов, мобильных номеров которые используются вне «анонимного контекста».

    И даже набор этих мер не даёт «максимальную», для неё надо прям заморачиваться, те кому она нужна будут сидеть с виртуалки на которой будет поднята ось типа Qubes с рэндомизатором всех id железа, версий браузера, разрешений экрана, шрифтов, дополнения (fingerprinting нынче очень хорошо работает), анонимные сим-карты, рэндомизация мак адресов, это же прям необъятная тема.


    1. gmtd
      16.11.2025 10:34

      Вы всю эту сложную систему делаете, чтобы читать Эхо Москвы? или для чего?


  1. korn3r
    16.11.2025 10:34

    Лучше уж xHTTP, чем WebSocket. Или сэлфстил Reality

    И нестандартный порт у протокола, суть которого маскироваться под HTTPS, это тоже несколько странно...