Как стать автором
Обновить

Упрощённая инструкция по развёртыванию VLESS и Shadowsocks-2022 проксей на основе сервера XRay на линуксовом сервере

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров9.4K

Что мы тут делаем?

1. Разворачиваем прокси на основе протоколов VLESS и Shadowsocks-22 при помощи сервера XRay

Зачем это нужно?

Роскомнадзор научился достаточно качественно блокировать популярные VPN-протоколы: OpenVPN, Wireguard и некоторые другие. VLESS позволяет маскировать трафик под обычное TLS-подключение к сайту, что на данном этапе развития возможностей Роскомнадзора обходит все существующие способы блокировки трафика и позволяет иметь нефильтрованный доступ в интернет.

Зачем тогда нужен Shadowsocks-22?

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

Прокси на Shadowsocks-22 разворачивается за компанию как запасной вариант доступа в сеть, на случай если VLESS-конфигурация вдруг перестанет работать.

Ограничения:

И VLESS, и Shadowsocks-22 — это именно ПРОКСИ, это не VPN. Со всеми вытекающими из этого нюансами.

Shadowsocks-22 более подвержен блокировке, поскольку с точки зрения фильтров цензора трафик выглядит как случайная каша. Это позволяет блокировать подобные прокси посредством введения «белых списков» — т. е. будет разрешён только тот трафик, который цензор явно узнает. Таким образом неоднократно блокировался доступ к Shadowsocks‑прокси в Дагестане и Сибири. VLESS менее подвержен подобным блокировкам — на данный момент попытка его блокировки цензором приведёт к неработоспособности большинства сайтов.

Что потребуется?

  1. Debian 11\12 или Ubuntu 22.04\24.04 + базовые навыки чтения и владения консолью

  2. Сервер должен быть нев РФ — а например в Нидерландах. Такие можно купить за рубли и на российскую карту через множество хостеров (например IHOR или VDSina). Должно хватить любого сервера с 1–2 потоками и 512 мегабайт памяти.

Устанавливаем XRay на сервере:

  1. apt install curl mc htop nano

  2. bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install

  3. systemctl stop xray.service

  4. ./usr/local/bin/xray uuid

  5. ./usr/local/bin/xray x25519 (ключи стоит записать, они нигде не сохранятся в виде файла)

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

Пример конфига:

{
  "log": {
    "loglevel": "info"
  },
  "routing": {
    "rules": [],
    "domainStrategy": "AsIs"
  },
  "inbounds": [
    {
      "port": 42639,
      "tag": "ss",
      "protocol": "shadowsocks",
      "settings": {
        "method": "2022-blake3-aes-128-gcm",
        "password": "сюда вставить выхлоп команды openssl rand -base64 16",
        "network": "tcp,udp"
      }
    },
    {
      "port": 443,
      "protocol": "vless",
      "tag": "vless_tls",
      "settings": {
        "clients": [
          {
            "id": "сюда вставить ID из выхлопа ./usr/local/bin/xray uuid",
            "email": "user@server",
            "flow": "xtls-rprx-vision"
          }
        ],
        "decryption": "none"
      },
      "streamSettings": {
        "network": "tcp",
        "security": "reality",
    "realitySettings": {
      "show": false,
      "dest": "www.microsoft.com:443",
      "xver": 0,
      "serverNames": [
        "www.microsoft.com"
      ],
      "privateKey": "сюда вставить приватный ключ из выхлопа ./usr/local/bin/xray x25519",
      "minClientVer": "",
      "maxClientVer": "",
      "maxTimeDiff": 0,
      "shortIds": [
        "сюда вставить выхлоп команды openssl rand -hex 8"
      ]
    }
      },
      "sniffing": {
        "enabled": true,
        "destOverride": [
          "http",
          "tls"
        ]
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "freedom",
      "tag": "direct"
    },
    {
      "protocol": "blackhole",
      "tag": "block"
    }
  ]
}

Домен microsoft.com указан для примера, можно и нужно заменить на что‑то своё. Крайне рекомендуется воспользоваться этим для нахождения подходящего домена для маскировки. Основное требование — поддержка TLSv1.3. Лучше всего выбирать сайт физически хостящийся в стране вашего сервера.

Подготавливаем строки конфигурации, которую можно вставить в клиента; выглядят примерно так:

VLESS:

vless://<ID из конфига>@<IP адрес машины>:443?security=reality&encryption=none&pbk=<публичный ключ из конфига>&headerType=none&fp=chrome&type=tcp&flow=xtls-rprx-vision&sni=<значение домена в serverNames из конфига>&sid=<значение shortIds из конфига>#<название под которым профиль будет сохранён в приложении>

Shadowsocks-22:

ss://<пароль из конфига shadowsocks>@<IP адрес машины>:<порт shadowsocks из конфига>#<название под которым профиль будет сохранён в приложении>

Любую из них можно запихнуть в QR в виде plain текста, большинство клиентов умеют их импортировать. Сгенерировать QR-код можно например здесь, нужно будет выбрать в поле «Contents» вариант «Text» и нажать кнопку «Generate».

Устанавливаем клиент и запихиваем в него конфиг.

Android: Hiddify, v2rayNG, Nekobox for Android GitHub - MatsuriDayo/NekoBoxForAndroid: NekoBox for Android / sing-box / universal proxy toolchain for Android

iOS: Foxray, Streisand (доступны в AppStore)

Десктопы: Nekoray и Hiddify

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

Обязательно перевесьте ssh с порта 22 на любой другой порт, куда‑нибудь на 10–40 тысячные порты. Это нужно для того, чтобы сервер к которому мы отправляем наши соединения, прикидываясь законопослушным сайтом, не отвечал на ssh. Иначе для потенциального сканера Роскомнадзора это будет практически железобетонным аргументом для того чтоб решить что на этом сервере работает прокси и забанить его на ТСПУ.

Отрезолвьте домен который используется для фронтинга (домен из serverNames в конфиге) в IP при помощи nslookup и создайте следующие правила для файрволла:

iptables -t nat -A PREROUTING -i eth0 -p udp --dport 443 -j DNAT --to-destination <IP>:443
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination <IP>:80

Что делают эти правила: форвардят трафик от потенциального сканера цензоров в сторону настоящего сайта, которым мы прикидываемся — т. е. UDP по порту 443 и TCP на порту 80. Это помогает с маскировкой.

Рекомендуется сделать эти правила persistent, т. е. запихнуть в rc.local, сервис systemd или куда‑нибудь ещё.

Крайне рекомендуется изучить что такое routing. Это нужно в том числе для того чтобы пускать сайты находящиеся в РФ, а остальное через прокси. Если этого не делать — цензор может сопоставить ресурсы к которым вы обращаетесь, и предпололожить что вы пользуетесь прокси, после чего заблокировать его. Уже были случае таких блокировок в Китае, и было бы наивно предполагать что Роскомнадзор когда‑нибудь этому не научится.

Ниже пример того как это настраивается в Nekoray на десктопе. Клиенты типа Hiddify при первом запуске предлагают выбрать регион работы, с автоприменением нужных правил маршрутизации на основе публичных geoip/geosite. Preferences → Routing setting → Simple route → Custom route и вставить конфиг. При необходимости — дополнить суффиксами или кейвордами. Список можно и нужно дополнять в зависимости от собственных предпочтений.

{     "rules": [         {             "domain_keyword": [                 "google",                 "vkontakte",                 "userapi",                 "yandex",                 "yastatic",                 "dzen",                 "yahoo",                 "microsoft",                 "tinkoff",                 "tbank",                 "gosuslugi",                 "lkfl",                 "lkfl2",                 "nalog",                 "sberbank" 	             ],             "outbound": "direct"         },         {             "domain_suffix": [                 ".ru",                 ".su",                 ".by",                 ".рф",                 "vk.com",                 "userapi.com",                 "youtube.com",                 "gstatic.com",                 "gosuslugi.ru",                 "esia.gosuslugi.ru",                 "tbank.ru",                 "www.tbank.ru",                 "sme.tinkoff.ru",                 "lkfl2.nalog.ru",                 "sberbank.ru",                 "www.sberbank.ru",                 "sber.ru",                 "www.sber.ru",                 "online.sber.ru",                 "online.sberbank.ru"              ],             "outbound": "direct"         }     ] }

Теги:
Хабы:
+8
Комментарии8

Публикации

Истории

Работа

Ближайшие события

19 августа – 20 октября
RuCode.Финал. Чемпионат по алгоритмическому программированию и ИИ
МоскваНижний НовгородЕкатеринбургСтавропольНовосибрискКалининградПермьВладивостокЧитаКраснорскТомскИжевскПетрозаводскКазаньКурскТюменьВолгоградУфаМурманскБишкекСочиУльяновскСаратовИркутскДолгопрудныйОнлайн
24 – 25 октября
One Day Offer для AQA Engineer и Developers
Онлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
26 октября
ProIT Network Fest
Санкт-Петербург
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань