Как притвориться сайтом, но посмотреть YouTube. Часть 1

Как притвориться сайтом, но посмотреть YouTube. Часть 1

Статья не для простого человека, но про обходы методов блокировки в разных странах. Возможно, это Иран или Китай.
Короткое описание. Да, это опять статья про XRay от китайских разработчиков, который я очень не люблю. Но попробую понятно и с картинками.

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

Нам понадобятся
1. Домен (его надо купить)
2. VDS в Европе. Подойдет любая и за любые деньги
3. Учетная запись на Cloudflare.

Примерная схема реализации

Наш VDS подключается к Cloudflare. Клиенты подключаются к Cloudflare. Выходят уже с сервера. Трафик маскируется под обычный веб с сайтом заглушкой.

Регистрируемся в Cloudflare и передаем ему в управление наш домен. У вашего регистратора в вашей стране указываем, что управлять доменом будет CF. Это делается примерно вот так:

Вот так это выглядит у моего регистратора

При передаче домена Cloudflare укажет, какие DNS-сервера надо указать. У вас они могут отличаться.
Дальше заходим в управление ZeroTrust:

А там переходим в Network и выбираем Tunnels

Создаем новый тоннель:

При создании выдаст инструкцию типа:

sudo cloudflared service install SvPR9GZmp955h7eE1fDUks4oFkVx3KMVb7oyqCLKWWbErwIz3l1kiI3LmaHTIx63

Нас интересует токен, который выдал Cloudflare. Сохраняем его. Он нам будет нужен.

На VDS устанавливаем docker посвежее, следуя инструкции с официального сайта.

Создаем файлик docker-compose.yaml:

---
version: "3"
services:
  3x-ui:
    image: ghcr.io/mhsanaei/3x-ui:latest
    container_name: 3x-ui
    hostname: 3x-ui
    ports:
      - "2053:2053"
    volumes:
      - $PWD/db/:/etc/x-ui/
    environment:
      XRAY_VMESS_AEAD_FORCED: "false"
    tty: true
    restart: unless-stopped
    networks:
      - my-network
  nginx:
    image: nginx:alpine
    container_name: nginx
    hostname: nginx
    ports:
      - "443:443"
    volumes:
      - ./default.conf:/etc/nginx/conf.d/default.conf
    restart: unless-stopped
    networks:
      - my-network
  cloudflare-tunnel:
    image: cloudflare/cloudflared:latest
    container_name: cloudflare-tunnel
    hostname: cloudflare-tunnel
    command:
      - tunnel
      - --no-autoupdate
      - run
    environment:
      TUNNEL_TOKEN: {{ tunnel_token }}
    restart: unless-stopped
    networks:
      - my-network
    restart: unless-stopped
networks:
  my-network:
     driver: bridge

{{ tunnel_token }} в файле docker-compose.yaml заменяем на тот, который выдал Cloudflare.

Рядом создаем файлик default.conf:

server {
    listen  0.0.0.0:8444;
    server_name {{ server_domain }};
    resolver 127.0.0.11;
    index index.html;
    root /var/www/html;

    client_header_timeout 52w;
    keepalive_timeout 52w;

    location /4UVM4fzVTnfVuEFe6mxl {
        proxy_pass http://3x-ui:2053;
        proxy_redirect off;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_read_timeout 52w;
    }

    location /websocket {
        if ($http_upgrade != "websocket") {
                return 404;
        }
        proxy_pass http://3x-ui:8889;
        proxy_redirect off;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_read_timeout 52w;
    }

    location / {
        try_files $uri $uri/ =404;
    }
}

{{ server_domain }} - заменяем на тот домен, который вы купили у регистратора.

Обратите внимание на location /4UVM4fzVTnfVuEFe6mxl в файле default.conf. Эту часть можно поменять на любую другую. Это будет наш доступ к панели управления. Запомним ее.

Дальше выполняем команду: docker compose up
Три контейнера должны корректно запуститься. А в панели Cloudflare в том самом разделе, где вы создали туннель, он должен стать со статусом HEALTHY

У меня их три, у вас будет один

Дальше идем на IP адрес нашего купленного сервера на порт 2053. Что-то типа:
http://10.20.30.40:2053

Это откроет вам панель 3x-ui

Username: admin
Password: admin

Заходим сразу же в Panel Settings и меняем пароль на свои

Current Username и Current Password - вводим в обоих полях admin

В New Username вводим свой юзернейм и New Password вводим новый сложный пароль.

Нажимаем Confirm. Нас разлогинит из панели. Надо будет зайти с введеными новыми данными.

Зашли, опять идем в Panel Settings. Там открываем вкладку General. Находим URI Path:

Туда и вбиваем тот location, который запомнили из файла default.conf. Прям вот так /4UVM4fzVTnfVuEFe6mxl. Или как там у вас будет.

Нажимаем кнопку SAVE и потом красную кнопку Restart Panel.

Теперь настраиваем доступ к нашей панели через Cloudflare. Заходим в панель Cloudflare, Zero Trust, Networks, Tunnels (Это там, где мы изначально настраивали тоннель). Выбираем наш тоннель, нажимаем на него и справа вылезает панелька. Там будет кнопка "Edit"

Нажимаем её, открывается окно обзора тоннеля. Переходим во вкладку Public Hostname:

Нажимаем синюю кнопку "Add a public hostname".

В поле Domain выбираем наш домен. А в service выбираем http. В url пишем nginx:8444.

Нажимаем кнопку "Save hostname".

Все, теперь панель будет доступна через Cloudflare. К ней можно прийти по адресу с вашим доменом типа:

https://my-secret-domain.ru/4UVM4fzVTnfVuEFe6mxl

Все получилось? Осталось создать первое подключение для websocket.

В левой панельке тыкаем "Inbounds" и там нажимаем кнопку "Add Inbound".

Открывшееся окно заполняем вот так:

Здесь важно вбить порт 8889 (как это было в default.conf), нажать по строчке Client (это создаст первого вашего клиента). В Transmission выбрать WebSocket. В Path поставить /websocket.

Все. Дальше настраиваем клиента на телефоне или компе. Скачиваем nekoray. И настраиваем его так:

Надо поменять Сервер на ваш домен, который купили у регистратора типа my-secret-domain.ru. Порт вбиваем 443. В логин пользователя вбиваем тот самый ID клиента, который был создан при добавлении Inbound. Скть выбираем ws.

В Хост Websocket тоже вбиваем наш домен. Путь вебсокет вбиваем /websocket. Шифрование выбираем tls.

Дальше листаем в самый низ и находим uTLS Fingerprint. Выбираем популярный браузер, под который будет маскироваться телефон, например chrome.

Нажимаем на галочку в правом верхнем углу. Профиль сохранился. Дальше надо нажать по центру экрана кнопку со стрелочкой.

Всё должно работать. Подключение будет осуществляться к серверам Cloudflare, а IP-адрес в браузере на сайте 2ip.ru будет показывать уже тот, который на вашем VDS.