Первое, что ставит в тупик при настройке MTProto-прокси для Telegram, - это порт. Казалось бы, схема простая: IP, число, секретный ключ. Но цифры в инструкциях почему-то не совпадают, и портов всплывает сразу несколько. Ниже - разбор, какой порт у прокси mtproto реально используется, откуда берутся разные значения и что выбрать под свою задачу.
Стандартный порт 443: почему он считается золотым
Спросите у большинства админов, какой порт у прокси mtproto, - услышите «443». Порт 443 - стандарт для HTTPS-трафика. Прокси на этом порту выглядит для сетевого оборудования как обычное защищённое соединение: привычный трафик, никаких лишних вопросов. Поэтому в инструкциях по установке MTProto-прокси через Docker чаще всего фигурирует именно 443.
В командной строке это выглядит так: контейнер запускается с пробросом 443 на хосте, внутри прокси слушает тот же номер. Условие одно - на порту не должно быть ничего другого. Если на сервере уже крутится Nginx или Apache, они займут 443 и создадут конфликт. Тогда либо освобождайте порт, либо берите другой, о которых ниже.
Порт 2233: значение по умолчанию для некоторых реализаций
В документации npm-пакета @mtproto-org/mtproxy порт по умолчанию - 2233. Он не лучше и не хуже 443: разработчики просто выбрали число, которое не пересекается с популярными веб-портами и реже конфликтует с другим софтом. Ставите прокси через этот пакет и не меняете настройки - он слушает 2233.
Разные цифры в разных гайдах путают. Порт - это параметр конфигурации, не более. Задать можно любое свободное число: 8443, 1122, да хоть 9000. Лишь бы он был открыт в файрволе и не занят другим процессом. В том же npm-пакете параметры port и secret передаются объектом, и значение по умолчанию меняется одной строкой.
Как изменить порт в Docker и Nginx
В Docker синтаксис простой: во флаге -p указываете порт на хосте, после двоеточия - порт внутри контейнера. Команда docker run -d -p8443:443 ... пробросит внешний 8443 на внутренний 443. Прокси про внешний порт «не знает» и выдаст ссылку с 443. Ссылку придётся править руками - менять 443 на 8443. Об этом забывают, а потом час ищут, почему подключение не проходит.
С Nginx интереснее. Несколько прокси на одном сервере разделяются по SNI-роутингу - на Хабре эта схема расписана по шагам в разборе экспериментов с mtproxy. Nginx слушает 443, читает поле ssl_preread_server_name и отправляет трафик в нужный контейнер. В stream-блоке прописывается map: домен - свой бэкенд. На выходе несколько прокси на одном IP и одном порту, без лишних открытых дверей. Требует аккуратности, но экономит ресурсы.
Почему порт 443 обычно предпочтительнее для публичных прокси
443 - пропуск в мир HTTPS. Он реже попадает под фильтры провайдеров и корпоративных сетей: закрыть 443 значит сломать большинство защищённых сайтов, на такое мало кто идёт. Для прокси в публичных Wi-Fi и сетях с жёсткой фильтрацией это ощутимый плюс. Готовые решения тоже чаще отдают 443.
Если свой сервер поднимать не хочется, посмотрите каталог прокси от 3seller: в нём есть прокси под разные задачи, включая работу с Telegram. Порт и тип соединения выбираются в интерфейсе, настройки для подключения приходят готовыми - копируй и вставляй.
Нестандартные порты: когда и зачем
443 занят или провайдер смотрит на него особенно внимательно - берут 8443, 4443, 1234. На Хабре описан кейс: прокси запускали на портах 4443-4447, и подключение сыпалось. Причина - часть клиентов не ждёт прокси на таком порту и разбирает трафик иначе. После переезда на 443 через Nginx всё поехало стабильно.
Нестандартный порт - решение для внутренних задач или временный костыль. Для себя и команды экспериментировать можно. Для публичного прокси держитесь 443 или 2233, если нет веской причины отступать.
Как указать порт при настройке в Telegram
В настройках Telegram интерфейс просит хост, порт и секретный ключ. Порт вводите тот, что указали на сервере или получили от провайдера. Готовый прокси из каталога уже содержит все три значения. В ручном режиме - только цифры, без «порт:» и прочих украшений. Сервер слушает 443? Пишите 443.
В сторонних клиентах поле соединения иногда редактируется вручную. Выбираете тип MTPROTO - заполняете поля; по умолчанию там часто стоит 2233, меняйте на своё. Не перепутайте порт с ключом: ключ - строка из 32 символов, порт - число от 1 до 65535.
Что делать, если порт не подходит
Провайдер закрывает не только 443, но и другие популярные порты? Проверьте, какие значения вообще проходят. Онлайн-сканеры покажут доступность за минуту, второй вариант - перебор при подключении. Если не работает ни один - проблема скорее в конфиге сервера или в самом прокси.
Частая причина - порт занят. netstat или ss покажут, кто слушает нужный номер. Занят - освободите или берите другой. В Docker это особенно актуально: контейнеры дерутся за порты на хосте.
С покупным прокси всё проще: точный порт есть в личном кабинете и в письме с настройками. Не угадывайте и не подставляйте стандартный - это ошибка новичков номер один.
Чек-лист: какой порт выбрать под свою задачу
Публичный прокси для Telegram - 443. Локальный тест в Docker - 2233 или любой свободный номер. Несколько прокси на одном IP - 443 плюс SNI-роутинг в Nginx. Пробрасываете порт через Docker - сразу правьте ссылку для подключения, иначе клиент будет стучаться не туда. Сомневаетесь - берите готовый прокси в каталоге 3seller: там порт прописан в настройках и проверен на работоспособность.