Files
homelab-docs/docs/vps/vpn-vps-mtproto-check-report.md

5.5 KiB
Raw Blame History

Отчёт проверки MTProto + маскировка (katykhin.store)

Проверки выполнены с внешней консоли (без SSH на сервер) 2026-02-26. Цель: убедиться, что на 443 выглядит как обычный HTTPS, а MTProto срабатывает только при наличии секрета.


1) HTTPS сайта

Команда: curl -I https://katykhin.store/

Результат:

  • HTTP/1.1 200 OK
  • Server: nginx/1.24.0 (Ubuntu)
  • Content-Type: text/html

Вывод: Сайт отдаётся по HTTPS, не по HTTP. Маскировка по TLS выполнена.


2) Порт 443 и TLS

Порт 443 открыт

Команда: nc -vz katykhin.store 443

Результат: Connection to katykhin.store port 443 [tcp/https] succeeded!

TLS-рукопожатие и сертификат

Команда: openssl s_client -connect katykhin.store:443 -servername katykhin.store

Результат:

  • Verification: OK
  • Сертификат: Let's Encrypt (E8), CN=katykhin.store
  • Срок: NotBefore 26 Feb 2026, NotAfter 27 May 2026
  • Протокол: TLSv1.3, Cipher TLS_AES_256_GCM_SHA384
  • SAN: host "katykhin.store" в сертификате

Вывод: Внешний вид — обычный HTTPS с валидным доверенным сертификатом, без самоподписи.


3) Однострочная проверка

Команда: curl -Iv https://katykhin.store/

Результат:

  • TLS handshake успешен
  • Сертификат проверен (SSL certificate verify ok)
  • HTTP/1.1 200 OK
  • subject: CN=katykhin.store, issuer: Let's Encrypt

Вывод: Важнейшая часть маскировки выполнена: katykhin.store:443 = обычный HTTPS.


4) Поведение при «не-TLS» подключении к 443

Сырой TCP без данных

Команда: подключение к 443 без отправки данных (nc без ввода).

Результат: Ответа нет (сервер ждёт данные). mtg перенаправил соединение на nginx:993; nginx ждёт TLS ClientHello — логично.

Plain HTTP на порт 443

Команда: отправка GET / HTTP/1.0 на 443 (без TLS).

Результат: Ответ от nginx:

  • HTTP/1.1 400 Bad Request
  • «The plain HTTP request was sent to HTTPS port»

Вывод: На 443 приходит трафик без MTProto-секрета → mtg отдаёт его nginx (cloak). Nginx на 993 принимает только TLS, поэтому на plain HTTP отвечает 400. Для DPI/активной проверки, которые делают нормальный TLS (как браузер или openssl s_client), будет обычный HTTPS и страница сайта. Plain HTTP на 443 даёт только 400 от nginx, а не MTProto.


5) Итоговая таблица поведения

Подключение Ожидание по плану Факт
Браузер / curl HTTPS Сайт-заглушка, 200 HTTP/1.1 200, nginx, TLS
TLS (openssl s_client) Валидный HTTPS Let's Encrypt, TLS 1.3
Telegram с MTProto Работа прокси Подтверждено пользователем
Plain HTTP на 443 Не MTProto 400 от nginx (HTTPS port)
Соединение без данных Нет «сырого» HTTP-ответа Нет ответа (ожидание TLS)

6) Что не проверялось из консоли (нужен сервер или устройство)

  • Логи nginx (access.log / error.log) — нужен SSH.
  • Логи mtg (принятые соединения с секретом) — нужен SSH.
  • Проверка из РФ (iPhone/устройство в целевой сети, без общего VPN, с MTProto) — нужно выполнить у тебя.
  • Симуляция активного probing уже по сути сделана: openssl s_client к 443 ведёт себя как обычный HTTPS-клиент и получает нормальный TLS и сайт.

7) Частые ошибки — статус

Риск Статус
Сайт только по HTTP Нет: HTTPS отвечает 200
Самоподписанный сертификат Нет: Let's Encrypt
MTProto на нестандартном порту Нет: используется 443
Не-MTProto видит прокси Нет: без секрета — nginx/сайт или 400

Краткий вывод

Сеть видит katykhin.store:443 как обычный HTTPS (валидный сертификат, TLS 1.3, ответ 200 на GET /).
Только клиент с правильным MTProto-секретом попадает на прокси; остальное идёт в nginx (сайт или 400 на plain HTTP). Маскировка настроена корректно.