Сервер не виден снаружи: порты, фаервол и Docker

Почему игроки не подключаются, хотя сервер запущен: какой порт проверять, как работает фаервол и почему Docker обходит ufw. Пошаговая проверка.

Команда EGN 8 мин чтения
Сервер не виден снаружи: порты, фаервол и Docker
Содержание 14
  1. Коротко
  2. Шаги
  3. Условный пример
  4. Проверка TCP и UDP из разных мест
  5. Когда проблема у провайдера игрока
  6. Симптом → причина → решение
  7. Как сделать в панели EGN
  8. Частые ошибки
  9. Вопросы и ответы
  10. Почему сервер не виден, хотя он запущен?
  11. Почему ufw не закрывает порт?
  12. Какие порты нужны Minecraft-серверу?
  13. Как проверить доступность TCP-порта?
  14. Итог

Сервер горит зелёным в панели, в консоли написано «Done» или «Server started», но друзья не могут подключиться. Значит, соединение теряется где-то на пути от игрока до процесса. Путь длинный: интернет, провайдер, фаервол, проброс порта, сам процесс. Проверять его надо по очереди, а не гадать.

Коротко

Игрок видит сервер, только если: процесс слушает нужный порт, фаервол его пропускает, адрес совпадает с выданным во вкладке «Сеть» и протокол (TCP или UDP) правильный. Порты EGN выдаёт панель, их не нужно подбирать вручную. Docker публикует порты через iptables и обходит правила ufw, поэтому закрыть порт одной командой ufw часто не получается. Проверяйте путь от конца к началу: процесс, проброс, фаервол, адрес.

Шаги

  1. Убедитесь, что сервер действительно работает. Статус «Запущен» и строка Done в консоли — хорошее начало. Если сервер упал через минуту, никто не подключится. Смотрите чек-лист запуска, прежде чем искать сетевую причину.

  2. Сверьте адрес и порт во вкладке «Сеть». Там указан адрес подключения и список портов тарифа с их назначением. Игрокам передавайте именно этот адрес, включая порт. Если в клиенте введён адрес без порта, а игровой порт нестандартный, подключение не состоится.

    Вкладка «Сеть»: адрес подключения и список портов сервера

    На тестовом сервере адрес — stage-node1.egnetwork.ru:30546, игровой порт 30546 TCP. Ниже видно, что голосовой чат, Bedrock-вход и веб-карта используют свои порты. У каждого порта есть протокол: например, голос работает по UDP. Не путайте протоколы: порт, открытый по TCP, не принимает UDP.

  3. Проверьте протокол. Игровой порт Minecraft — TCP. Голосовой чат и query — UDP. Bedrock-вход через Geyser — UDP, а у Geyser 2.12 ещё и TCP на том же порту (сигналинг); смотрите протокол в «Сети». Если открыт только TCP, а голос по UDP, голос работать не будет, а сервер при этом будет доступен для игры. Проверяйте каждый сервис своим способом.

  4. Проверьте фаервол (только если сервер на вашем VPS). На игровом хостинге фаервол настроен на стороне EGN, и порты из «Сети» уже открыты; там этот шаг пропустите. Если же вы запускаете сервер на своём VPS, посмотрите правила: sudo ufw status verbose. Нужные порты должны быть разрешены. Но помните про Docker.

    Терминал
    sudo ufw status verbose
    sudo ss -tulpn | grep ПОРТ

    Вместо ПОРТ подставьте свой номер. Вторая команда показывает, слушает ли процесс нужный порт. Если его нет в списке, проблема в процессе, а не в фаерволе.

  5. Поймите, почему Docker обходит ufw. Docker добавляет правила iptables для проброса портов контейнеров. Эти правила обрабатываются раньше, чем цепочки ufw, поэтому порт может быть доступен из интернета, даже если вы его «закрыли» в ufw. Это описано в документации Docker: опубликованные порты контейнеров маршрутизируются в таблице nat до цепочек, которыми управляет ufw, и Docker с ufw несовместимы без дополнительной настройки.

    Путь пакета: игрок, интернет, фаервол, Docker, процесс

    Схема показывает путь, на каждом звене может быть отказ. Поэтому проверка «открыл порт в ufw» ничего не гарантирует. Смотрите, какой порт реально опубликован и что слушает процесс.

  6. Проверьте доступность снаружи. Для TCP можно проверить с другого компьютера: nc -vz адрес порт. Для UDP просто подключиться с клиента к плагину голосового чата или проверить через игрока: nc не даст уверенного ответа. Если TCP не отвечает, а процесс слушает, проблема где-то между вами и хостом.

  7. Проверьте результат. Попросите игрока с другой сети подключиться по адресу из «Сети». Если заходит, вопрос закрыт. Если нет, соберите адрес, порт, протокол и время попытки и напишите в поддержку.

Условный пример

Владелец открывает порт 25565 в ufw, но игроки не подключаются. Проверка: ss -tulpn показывает, что процесс слушает 30536. Значит, игровой порт выдан другой. Сверяете со вкладкой «Сеть»: порт 30536, а владелец передавал адрес с 25565. Исправили адрес, подключение прошло. Фаервол тут был ни при чём.

Второй пример: порт открыт в ufw, ss показывает процесс, но снаружи TCP не отвечает. Смотрите Docker-проброс: порт в контейнере опубликован на другой номер или не опубликован вовсе. Это не лечится правилом ufw, а настройкой публикации. Такие случаи решаются через поддержку.

Проверка TCP и UDP из разных мест

Снаружи проверить TCP проще, чем UDP. Для TCP подойдёт nc с другого компьютера: nc -vz адрес порт. Если сообщение говорит, что соединение установлено, порт открыт. Если ответа нет, сначала проверьте адрес и порт во вкладке «Сеть», потом фаервол хоста, потом публикацию в Docker.

Для UDP надёжного способа без клиента нет. Голосовой чат и query проверяются тем, что игрок видит их в интерфейсе клиента или в статусе сервера. Если голоса нет, но игра работает, проверьте, что сам порт голоса открыт по UDP, а не только по TCP.

Полезно проверить путь и с другой стороны. Команда traceroute или tracert до адреса покажет маршрут, а не открытость порта. Но если маршрут обрывается на одном участке, проблема почти всегда у провайдера или на стороне хоста, а не в настройках сервера.

Когда проблема у провайдера игрока

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

Симптом → причина → решение

Симптом Причина Решение
Игроки не подключаются, сервер «Запущен» Адрес без порта или старый адрес Передать адрес целиком из «Сети»
TCP не отвечает снаружи, процесс слушает порт Фаервол или проброс Docker Проверить правила и публикацию портов, обратиться в поддержку
Голос не работает, игра работает Порт голоса закрыт для UDP Проверить протокол в «Сети»
Порт открыт в ufw, но недоступен Docker обходит ufw Настроить публикацию портов в Docker
Доступ есть у части игроков Провайдер или регион Проверить через другого провайдера, сообщить поддержке

Как сделать в панели EGN

  1. Откройте «Сеть» и скопируйте адрес подключения целиком.
  2. Проверьте в списке портов, что игровой порт совпадает с адресом.
  3. Если сервер не отвечает, откройте «Консоль» и убедитесь, что сервер запущен и не упал.
  4. Попросите игрока с другой сети подключиться по адресу из «Сети».
  5. Если не получилось, соберите адрес, порт, протокол и время попытки и напишите в поддержку.
Вкладка «Сеть»: адрес подключения и порты сервера
Вкладка «Сеть»: адрес подключения и порты сервера

На скриншоте адрес и список всех портов тарифа: игровой, голос по UDP, Bedrock-вход и веб-карта. Именно эти значения надо передавать игрокам и сверять при диагностике.

Частые ошибки

  • Передавать адрес без порта. Игрок вводит только хост, а игровой порт нестандартный. Передавайте адрес целиком из «Сети».
  • Путать TCP и UDP. Голос и query работают по UDP, игра по TCP. Проверяйте каждый протокол отдельно.
  • Полагаться на ufw при Docker. Правило ufw не закроет порт, который Docker опубликовал. Проверяйте публикацию портов в Docker.
  • Менять игровой порт вручную. Адрес для игроков изменится, а панель может не знать о новом порте. Не меняйте его вручную: снаружи доступны только порты, выданные серверу, список которых — во вкладке «Сеть».
  • Искать причину, не проверив процесс. Если сервер не слушает порт, ни один фаервол не поможет.

Вопросы и ответы

Почему сервер не виден, хотя он запущен?

Чаще всего адрес или порт, переданные игрокам, не совпадают с выданными во вкладке «Сеть». Проверьте адрес целиком, а потом фаервол.

Почему ufw не закрывает порт?

Docker публикует порты через iptables в обход правил ufw. Порт может быть открыт, даже если в ufw он закрыт. Проверяйте публикацию портов в Docker.

Какие порты нужны Minecraft-серверу?

Игровой TCP-порт из «Сети» — обязательно. Голосовой чат и query — UDP. Bedrock-вход и веб-карта используют свои порты из «Сети».

Как проверить доступность TCP-порта?

С другого компьютера выполните nc -vz адрес порт. Если соединение проходит, порт открыт снаружи. Для UDP проверка сложнее, её проще делать через клиента.

Итог

Сервер не виден снаружи, когда рвётся путь от игрока до процесса. Сверьте адрес и порт во вкладке «Сеть», проверьте протокол, убедитесь, что процесс слушает нужный порт, и помните, что Docker обходит ufw. Смежные статьи: про занятый порт, про чек-лист запуска и про Timed out.

Сервер под игру за пару минут — egnetwork.ru

Читать далее

Вся рубрика →