youtube
01.06.2024

VPN VLESS с XTLS-Reality

Статья описывает процесс установки и настройки VPN-сервера VLESS с использованием Xray и XTLS-Reality на Ubuntu, включая маскировку трафика и решение возможных проблем.

Для поднятия VLESS VPN сервера на вашем сервере с Ubuntu, используется Xray – это мощный инструмент для настройки VLESS, VMess, Trojan и других протоколов.

Я взял такой, на семью 2ух ютуберов хватает.

Шаг 1: Подготовка сервера

Обнови систему и установи необходимые зависимости

sudo apt update && sudo apt upgrade -y
sudo apt install curl wget unzip -y

Шаг 2: Установка Xray

  1. Скачай официальный скрипт установки Xray:
bash <(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)

2. Проверь установку

xray -version
Должно быть вот так

После выполнения скрипта Xray будет установлен в систему, а его конфигурационные файлы будут находиться в директории /usr/local/etc/xray/.

Шаг 3: Настройка Xray с XTLS-Reality

1. Установи генератор UUID

apt install uuid-runtime

2. Сгенерируйте и скопируй куда-то: YOUR_UUID:


uuidgen
Должно быть так

3. Сгенерируй приватный ключ с помощью команды (и скопируйте куда-то):YOUR_PRIVATE_KEY:

xray x25519

4. Создай конфигурационный файл:

sudo nano /usr/local/etc/xray/config.json

Пример конфигурации для XTLS-Reality:

{
    "log": {
        "loglevel": "warning",
        "access": "/var/log/xray/access.log",
        "error": "/var/log/xray/error.log"
    },
    "inbounds": [
        {
            "port": 443,
            "protocol": "vless",
            "settings": {
                "clients": [
                    {
                        "id": "YOUR_UUID",
                        "flow": "xtls-rprx-vision",
                        "level": 0
                    }
                ],
                "decryption": "none"
            },
            "streamSettings": {
                "network": "tcp",
                "security": "reality",
                "realitySettings": {
                    "show": true,
                    "dest": "www.nvidia.com:443",
                    "xver": 0,
                    "serverNames": [
                        "www.nvidia.com"
                    ],
                    "privateKey": "YOUR_PRIVATE_KEY",
                    "shortIds": ["abc123", "daf456"]
                }
            }
        }
    ],
    "outbounds": [
        {
            "protocol": "freedom",
            "settings": {}
        }
    ]
}

Внимание! Никаких комментариев в нем быть не может!

Иногда IPv6 может быть недоступен, тогда нужно будет добавить, чтоб прокси работал в ipv4

    "outbounds": [
        {
            "protocol": "freedom",
            "settings": {},
            "streamSettings": {
                "sockopt": {
                    "domain": "ipv4"
                }
            }
        }
    ]
Подробно, что и зачем в конфиге
{
    // Уровень логирования и пути к файлам логов
    "log": {
        "loglevel": "debug", // Уровень логирования (debug, info, warning, error)
        "access": "/var/log/xray/access.log", // Путь к файлу доступа
        "error": "/var/log/xray/error.log" // Путь к файлу ошибок
    },
    "inbounds": [
        {
            // Настройки входящего подключения
            "port": 443, // Порт, на котором будет слушать Xray
            "protocol": "vless", // Протокол, используемый для входящих соединений
            "settings": {
                "clients": [
                    {
                        // Настройки клиента
                        "id": "YOUR_UUID", // Уникальный идентификатор клиента
                        "flow": "xtls-rprx-vision", // Тип потока (xtls-rprx-vision)
                        "level": 0 // Уровень доступа (0 - базовый уровень)
                    }
                ],
                "decryption": "none" // Метод расшифровки (none - без расшифровки)
            },
            "streamSettings": {
                // Настройки потока
                "network": "tcp", // Тип сети (tcp или ws)
                "security": "reality", // Уровень безопасности (reality)
                "sockopt": {
                    // Настройки сокетов
                    "domain": "ipv4" // Использовать только IPv4 для соединений
                },
                "realitySettings": {
                    // Настройки для режима reality
                    "show": true, // Показать информацию о соединении
                    "dest": "www.nvidia.com:443", // Целевой хост и порт
                    "xver": 0, // Версия XTLS
                    "serverNames": [
                        "www.nvidia.com" // Имена серверов для SNI
                    ],
                    "privateKey": "YOUR_PRIVATE_KEY", // Закрытый ключ для XTLS
                    "shortIds": ["abc123", "daf456", "1f2e3d4c", "aa", "deadbeef"] // Короткие идентификаторы для клиентов
                }
            }
        }
    ],
    "outbounds": [
        {
            // Настройки исходящего подключения
            "protocol": "freedom", // Протокол для исходящих соединений
            "settings": {}, // Дополнительные настройки (пока не используются)
            "streamSettings": {
                "sockopt": {
                    // Настройки сокетов
                    "domain": "ipv4" // Использовать только IPv4 для исходящих соединений
                }
            }
        }
    ]
}

Зачем нужен параметр dest?

Параметр dest помогает маскировать трафик, создавая видимость, что соединение направлено к указанному хосту.

Как работает маскировка трафика с dest

  1. Маскировка соединения:
    • Когда указываешь dest, например, www.nvidia.com:443, трафик будет выглядеть так, будто он направляется именно к этому хосту.
  2. Технология XTLS:
    • Использование XTLS (или других технологий шифрования) добавляет уровень защиты, делая анализ трафика сложнее для третьих лиц. Это означает, что даже если кто-то перехватит трафик, он не сможет легко определить его истинный источник и содержание.
  3. Политики доступа:
    • Некоторые сети могут блокировать определенные адреса, но если ты используешь dest, который разрешен (например, популярные сайты), это может помочь обойти такие ограничения.

Как выбрать dest?

  1. Безопасность:
    • Убедись, что выбранный адрес поддерживает HTTPS, если хочешь использовать защищенные соединения. Это важно для конфиденциальности и безопасности данных.
  2. Тестирование:
    • Попробуй разные адреса, чтобы определить, какой из них работает лучше для твоих нужд. Протестируй скорость и доступность различных сайтов.
  3. Сайты с высокой доступностью:
    • Выбирай популярные и надежные сайты, такие как www.google.com или www.cloudflare.com, чтобы минимизировать вероятность недоступности.

Шаг 3: Запуск Xray

  1. Запусти Xray: sudo systemctl start xray
  2. Включи автозапуск: sudo systemctl enable xray
  3. Проверь статус: sudo systemctl status xray
Должно быть так

Шаг 4: Настройка клиента

  1. Установи клиент, поддерживающий VLESS и XTLS (например, XrayN, V2RayN, или Qv2ray). У меня мак и я использую Streisand
  2. Добавь сервер с такими параметрами:
    • Server Address (Адрес сервера): Введи адрес вашего Xray-сервера (например, ваш_домен.com или IP-адрес сервера).
    • Port (Порт): Укажи порт 443, это порт, на котором слушает сервер.
    • ID (UUID): Введи UUID клиента: YOUR_UUID.
    • Flow (Поток): Установи поток на xtls-rprx-vision.
    • Security (Безопасность): Установи уровень безопасности на reality.
    • TLS Settings (Настройки TLS): Включи TLS и настройте SNI (Server Name Indication):
    • SNI: Введи www.nvidia.com или тот, что выбрал ты.
    • Network (Сеть): Убедись, что тип сети установлен на TCP.
    • Private Key (Закрытый ключ): В некоторых клиентах может быть поле для ввода закрытого ключа. Используй тот, что мы сгенерировали.
  3. Сохранение и подключение
Как вариант, скормить JSON конфиг клиенту, они почит все это поддерживают
{
    "log": {
        "loglevel": "warning" // Уровень логирования
    },
    "outbounds": [
        {
            "protocol": "vless", // Протокол для исходящих соединений
            "settings": {
                "vnext": [
                    {
                        "address": "YOUR_IP", // Адрес вашего сервера
                        "port": 443, // Порт сервера
                        "users": [
                            {
                                "id": "YOUR_UUID", // UUID клиента
                                "encryption": "none", // Метод шифрования
                                "flow": "xtls-rprx-vision" // Тип потока
                            }
                        ]
                    }
                ]
            },
            "streamSettings": {
                "network": "tcp", // Тип сети
                "security": "reality", // Уровень безопасности
                "realitySettings": {
                    "fingerprint": "chrome", // Подделка отпечатка браузера
                    "publicKey": "YOUR_PRIVATE_KEY", // Публичный ключ
                    "serverName": "www.nvidia.com", // Имя сервера для SNI
                    "shortId": "abc123", // Короткий идентификатор
                    "show": false // Показать информацию о соединении
                }
            },
            "tag": "proxy" // Тег для маршрутизации
        },
        {
            "protocol": "freedom", // Протокол для свободного доступа
            "tag": "direct" // Тег для маршрутизации
        },
        {
            "protocol": "blackhole", // Протокол для блокировки
            "tag": "block" // Тег для маршрутизации
        }
    ],
    "inbounds": [
        {
            "port": 1080, // Порт для локального подключения
            "protocol": "socks", // Протокол для локального подключения
            "settings": {
                "auth": "noauth", // Без аутентификации
                "udp": true // Поддержка UDP
            },
            "tag": "socks" // Тег для маршрутизации
        }
    ],
    "dns": {
        "servers": [
            "8.8.8.8", // DNS сервер 1
            "8.8.4.4"  // DNS сервер 2
        ]
    }
}

Удалите все комментарии, иначе не взлетит!

Шаг 4: Решение проблем

Если не подключается, то смотрим логи, какую именно ошибку он выдает

tail -f /var/log/xray/error.log

Посмотри, есть ли вообще соединение, идет ли трафик:

  tail -f /var/log/xray/access.log