Как притвориться сайтом, но посмотреть 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.