Как исправить ошибку «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):
- Войдите в веб-панель Proxmox (обычно
https://<host-ip>:8006). - Выберите ваш узел (Datacenter → Node).
- Перейдите в Firewall → Rules (или IPSet / Aliases).
- Убедитесь, что есть правило
ACCEPTдляTCPпорт25565(или ваш порт) отAnyк IP контейнера/ВМ. - Если правил нет — добавьте: 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 → Hardware → Network Device → проверьте Bridge (обычно vmbr0 для публичной сети).
10. Перезагрузка контейнера/ВМ (последний шаг)
Если ничего не помогло — перезагрузите узел через панель proxify.cloud:
- Выберите контейнер/ВМ.
- Кнопка Shutdown → дождитесь остановки.
- Кнопка 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 |
Комментарии (0)