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

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"         }     ] }

В моем тг канале я выложил все актуальные способы обхода блокировки YouTube с подробными инструкциями, можно подобрать для себя наиболее подходящие способы — для Smart TV, для ПК, Для Телефона, Android, IOS итд, а так же ссылки на статьи с различными настройками протоколов VLESS. Все в закрепе!

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


  1. smart90
    20.09.2024 07:21

    Какая по счету уже это одинаковая статья на эту тему? И все они или удаляются или скрываются


  1. Johan_Palych
    20.09.2024 07:21
    +1

    Что потребуется?
    Debian 11\12 или Ubuntu 22.04\24.04

    What’s new in Security for Ubuntu 22.04 LTS?
    "nftables as the default firewall backend"
    Nftables - Debian Wiki
    "nftables is the default framework in use in Debian (since Debian 10 Buster)"
    Имена сетевых интерфейсов eth0, eth1... ушли в прошлое c 15.10(Ubuntu) / stretch(Debian 9) Martin Pitt Wed Jun 17 07:14:39 UTC 2015


    1. uneasy
      20.09.2024 07:21

      Сервера на Debian 12, eth0 на месте, iptables на месте. "Начиная с Debian Buster, nf_tables бэкэнд по умолчанию для iptables, посредством уровня iptables-nft (т.е. используя синтаксис iptables с подсистемой ядра nf_tables)." То есть внешне ничего не поменялось.


      1. Johan_Palych
        20.09.2024 07:21

        Значит такой кастомный шаблон VPS/VDS хостера.
        На реальном железе поменялось.
        Можно вернуться к eth0, способов много(75-persistent-net-generator.rules и др....)
        You can translate the iptables rules to nft
        https://manpages.ubuntu.com/manpages/jammy/en/man8/iptables-restore-translate.8.html
        Можно переключиться в legacy
        https://wiki.debian.org/nftables
        Switching to the legacy version:

        # update-alternatives --set iptables /usr/sbin/iptables-legacy
        # update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
        # update-alternatives --set arptables /usr/sbin/arptables-legacy
        # update-alternatives --set ebtables /usr/sbin/ebtables-legacy


        1. uneasy
          20.09.2024 07:21

          Нет, я ставил на свое железо, виртуалка Hyper-V, официальный debian-11.2.0-amd64-netinst.iso. Потом делал обновление до 12."nftables: command not found"


          1. Johan_Palych
            20.09.2024 07:21

            Поставил на Proxmox VE debian-12.7.0-amd64-netinst.iso. Из доп-пакетов только openssh-server.
            nftables установлен, но nftables.service надо включить(enabled) - заработает утилита nft


  1. RangerRU
    20.09.2024 07:21

    автор, ты зачем этих больных из псины упоминаешь?

    или ты не застал их приколов?