Как исправить ошибку «Failed to Bind to Port»

Причины ошибки

Ошибка Failed to bind to port означает, что порт, указанный в server.properties, уже занят другим процессом, недоступен из-за настроек фаервола или некорректно привязан к IP-адресу. На выделенном сервере Ubuntu в панели proxify.cloud (Proxmox VE) это частая проблема при запуске нескольких серверов, смене IP или после перезагрузки хоста.


1. Проверка текущего порта и IP в конфигурации

Подключитесь к контейнеру (LXC) или виртуальной машине (QEMU) через SSH. В панели proxify.cloud откройте консоль нужного узла или используйте внешний SSH-клиент.

cat /opt/minecraft/server.properties | grep -E "^(server-port|server-ip)="

Пример вывода:

server-port=25565
server-ip=0.0.0.0
  • server-ip=0.0.0.0 — прослушивание на всех интерфейсах (рекомендуется).
  • server-ip=192.168.1.10 — привязка к конкретному внутреннему IP. Если IP изменился после перезагрузки Proxmox — порт не привяжется.

Действие: Если server-ip задан явно, убедитесь, что он совпадает с текущим IP контейнера/ВМ:

ip -4 addr show scope global | grep inet

При необходимости исправьте server.properties:

sed -i 's/^server-ip=.*/server-ip=0.0.0.0/' /opt/minecraft/server.properties

2. Поиск процесса, занимающего порт

Вариант А: через ss (современная замена netstat)

ss -ltnp | grep :25565

Вариант Б: через lsof

lsof -i :25565

Вариант В: если порт в диапазоне 25565–25580 (часто на хостингах)

for p in {25565..25580}; do ss -ltnp | grep ":$p" && echo "Port $p busy"; done

Пример вывода занятого порта:

LISTEN 0 128 0.0.0.0:25565 0.0.0.0:* users:(("java",pid=1234,fd=45))

Если PID принадлежит вашему же серверу — процесс «зомби» не завершился корректно. Убейте его:

kill -9 1234

Если PID принадлежит другому процессу (другой сервер, прокси, BungeeCord, Velocity) — остановите тот сервис или смените порт в server.properties.


3. Проверка systemd-юнитов и автозапуска

На выделенном сервере Ubuntu серверы часто запускаются через systemd. Проверьте, не запущен ли дубликат:

systemctl list-units --type=service | grep -i minecraft
systemctl status minecraft@server1

Если видите active (running) — остановите:

systemctl stop minecraft@server1
systemctl disable minecraft@server1   # если не нужен автозапуск

В панели proxify.cloud у каждого контейнера/ВМ может быть свой набор юнитов. Имена обычно: minecraft, mc-server, paper, fabric. Уточните через:

systemctl list-unit-files | grep -E "(minecraft|paper|fabric|velocity|bungee)"

4. Проверка фаервола (UFW / iptables / nftables)

Ubuntu по умолчанию использует UFW. В Proxmox на хост-ноде также может быть настроен фаервол (Datacenter → Firewall). Проверьте оба уровня.

Внутри контейнера/ВМ (Ubuntu):

ufw status verbose

Если статус active — убедитесь, что порт открыт:

ufw allow 25565/tcp comment "Minecraft Server"
ufw reload

На хост-ноде Proxmox (панель proxify.cloud):

  1. Войдите в веб-панель Proxmox (обычно https://<host-ip>:8006).
  2. Выберите ваш узел (Datacenter → Node).
  3. Перейдите в FirewallRules (или IPSet / Aliases).
  4. Убедитесь, что есть правило ACCEPT для TCP порт 25565 (или ваш порт) от Any к IP контейнера/ВМ.
  5. Если правил нет — добавьте: Add → Direction: In, Action: Accept, Protocol: TCP, Destination Port: 25565.

Важно: В proxify.cloud фейервол на уровне дата-центра может блокировать входящие соединения до того, как они достигнут Ubuntu. Всегда проверяйте оба уровня.


5. Проверка IPv6 и dual-stack

Если сервер слушает только IPv4, а клиент подключается по IPv6 (или наоборот) — связь не установится.

Проверьте, на чем слушает Java:

ss -ltnp | grep java

Если видите только :::25565 (IPv6) — добавьте в запуск JVM флаг:

-Djava.net.preferIPv4Stack=true

В скрипте запуска (start.sh или systemd unit):

ExecStart=/usr/bin/java -Xms4G -Xmx4G -Djava.net.preferIPv4Stack=true -jar paper.jar nogui

Перезагрузите демон и перезапустите:

systemctl daemon-reload
systemctl restart minecraft@server1

6. Проверка SELinux / AppArmor (редко на Ubuntu, но возможно)

apparmor_status | grep -i minecraft

Если профиль блокирует bind — временно отключите для теста:

apparmor_parser -R /etc/apparmor.d/usr.lib.jvm.java-21-openjdk-amd64.bin.java

(путь зависит от версии Java, уточните через which java и aa-status).


7. Смена порта (если порт занят системой или провайдером)

Некоторые хостинги резервируют порты < 1024 или блокируют конкретные диапазоны. Выберите порт в диапазоне 25565–25580 или 20000–30000.

Отредактируйте server.properties:

sed -i 's/^server-port=.*/server-port=25570/' /opt/minecraft/server.properties

Обновите фаервол (UFW + Proxmox) под новый порт.

Перезапустите сервер:

systemctl restart minecraft@server1
# или вручную:
cd /opt/minecraft && ./start.sh

8. Проверка логов сервера

После исправлений запустите сервер вручную в консоли, чтобы увидеть ошибку в реальном времени:

cd /opt/minecraft
java -Xms4G -Xmx4G -jar paper.jar nogui

Ищите строки:

[Server thread/INFO]: Starting minecraft server version 1.20.4
[Server thread/INFO]: Loading properties
[Server thread/INFO]: Default game type: SURVIVAL
[Server thread/INFO]: Generating keypair
[Server thread/INFO]: Starting Minecraft server on 0.0.0.0:25570
[Server thread/INFO]: Using epoll channel type
[Server thread/INFO]: Server started

Если появится Failed to bind to port — повторно проверяйте шаги 2–5.


9. Проверка сетевых интерфейсов в Proxmox (vmbr0, vmbr1)

В панели proxify.cloud (Proxmox) у контейнера/ВМ может быть несколько сетевых интерфейсов. Убедитесь, что server-ip=0.0.0.0 или IP соответствует интерфейсу с выходом в интернет (обычно eth0 в контейнере, ens18/ens19 в ВМ).

Посмотреть интерфейсы внутри:

ip link show

В Proxmox: выберите VM/CT → HardwareNetwork Device → проверьте Bridge (обычно vmbr0 для публичной сети).


10. Перезагрузка контейнера/ВМ (последний шаг)

Если ничего не помогло — перезагрузите узел через панель proxify.cloud:

  1. Выберите контейнер/ВМ.
  2. Кнопка Shutdown → дождитесь остановки.
  3. Кнопка Start.

Это сбросит зависшие сокеты в ядре хоста и обновит DHCP-аренду (если используется).


Возможные проблемы и решения

Проблема Симптом Решение
Порт занят systemd-юнитом другого сервера ss -ltnp показывает PID другого java-процесса systemctl stop <другой-юнит>, смените порт в server.properties
Фаервол Proxmox блокирует входящий трафик Локально telnet localhost 25565 работает, извне — нет Добавьте правило ACCEPT TCP 25565 в Datacenter → Firewall → Rules для IP контейнера
UFW внутри Ubuntu блокирует ufw status = active, правил нет ufw allow 25565/tcp && ufw reload
IP контейнера сменился после ребута Proxmox server-ip=10.0.0.5 в конфиге, а ip a показывает 10.0.0.7 Поставьте server-ip=0.0.0.0 или настройте статический IP в Proxmox (Hardware → Network Device → IPv4/CIDR)
Java слушает только IPv6 ss -ltnp показывает :::25565, а не 0.0.0.0:25565 Добавьте -Djava.net.preferIPv4Stack=true в параметры JVM
Порт < 1024 без root Ошибка Permission denied при бинде на 25565 (редко) Используйте порт > 1024 или setcap 'cap_net_bind_service=+ep' $(readlink -f $(which java))
Несколько контейнеров на одном хосте с одинаковым портом Конфликт на уровне хоста (bridge) Назначьте уникальные порты каждому контейнеру, пробросьте через Proxmox Firewall / NAT при необходимости
Остался TIME_WAIT сокет после краша Порт «свободен», но бинд не удаётся 30–60 сек Подождите или добавьте в sysctl: `net.ipv4.tcp_tw