Туториал Поднятие сервера на домашнем компьютере или как создать Minecraft сервер дома

Hidens

Администратор
Команда форума
Предисловие
Так бывает, что вы хотите запустить игровой сервер для друзей со своего домашнего компьютера, но сталкиваетесь со столь популярной ошибкой - Failed to bind to port.
Казалось бы, материалов на эту тему полно, но ни один из них не помог решить проблему.
Что же, перед вами моя статья, и она поможет разобраться в вопросе.
Однако в этот раз придётся думать чуть больше, чем тогда, когда вы пытались открыть порт при помощи скайпа.
Следующая информация даст вам базовые представления о том, что и как работает в вашем же компьютере, в вашей же квартире и в нашем интернете.
Кому-то, уверен, статья поможет запустить игровой сервер.
А кому-то, возможно, откроет глаза на что-то более интересное и важное.
В любом случае, надеюсь, я смогу сэкономить время многим людям.

Что же, начнём с того, что определимся, на какому порту будет работать наш сервер.
По большому счёту это не имеет никакого значения.
Поэтому предлагаю стандартный для Java версии - 25565.
Именно он будет использоваться мной во всех объяснениях и примерах.

Поехали дальше.
Давайте сразу разберёмся с тем, имеется ли у нас в принципе возможность сделать сервер доступным во внешней сети.
Для этого нужно понять, имеется ли у нас выделенный IP-адрес.
Выделенный - значит наш персональный.
Выделенный IP выдаётся только одному лицу - только для нашей квартиры, например.
Дело в том, что уже сейчас IPv4-адресов на всех не хватает, из-за этого за одним реальным адресом может находиться несколько лиц.
Под одним IP-адресом в сеть могут попадать сразу целые дома, улицы или даже небольшие города.
Представьте, что один из таких "коммунальных квартирантов" запустит сервер.
Как мы по одному лишь IP-адресу поймём, что нужно попасть именно к нему?
Напомню, что за этим же IP могут скрываться ещё десятки, а то и сотни других квартир.

Чисто технически можно реализовать сервер даже в таких условиях - потребуется некий "проброс порта" (об этом ниже).
Но ни один провайдер не пойдёт на подобные ухищрения - если только за хорошую оплату.
Однако обычно провайдеры за дополнительные деньги предлагают услугу выделенного айпи-адреса.
Поэтому в 99% случаев для поднятия сервера наш вариант - выделенный адрес.
Такие адреса зачастую называют белыми или прямыми, хотя мне такие названия не по душе из-за несодержательности.

Обязательно к прочтению: (Статический IP вам не нужен! )
Очень прошу не путать "Выделенный/белый IP" и "Статический IP".
Это совершенно разные понятия.
Судя названию, выделенный - это персональный.
А статический - тот, который не меняется со временам.
Даже если ваш адрес является статическим, и никогда не меняется - это не означает, что он является выделенным.
И, соответственно, не означает, что вы можете запускать свой сервер в глобальную сеть.
Опять же, целый дом из сотен и тысяч квартир может годами пользоваться одним и тем же единственным IPv4-адресом.
И ни один из жильцов при этом не сможет сделать доступным свой сервер из внешней сети.

Собственно, как конкретно проверить, является ли ваш IP выделенным?
Всё довольно просто - нужно сравнить тот адрес, что выдал нам провайдер с тем адресом, который используется при выходе во внешнюю сеть.

Наш внешний адрес мы можем посмотреть, например, тут: 2ip.ru
Именно под внешним адресом нас видят все сайты, другие сервера и сервисы.
Именно по этому адресу к нам будут подключаться люди на наш сервер.

Адрес, выданный провайдером, нужно смотреть на том устройстве, куда, собственно, втыкается провод от провайдера.

Думаю, у большинства людей сейчас этим устройством является роутер.
Собственно, заходим туда и находим раздел IP или DHCP.
Для всех роутеров это будет выглядеть по-разному, но лично у меня вот так:
338

Иногда IP-адрес загружается не автоматически, а настраивается вами вручную при подключении интернета - это не столь важно.

Видел и такое, что провод от провайдера втыкается сразу в компьютер.
Тут разобраться можно быстрее, потому что всё универсально.
Ну, по крайней мере для Windows...
Открываем cmd, прописываем команду ipconfig и видим список сетевых интерфейсов своего компьютера.
Нас интересует "Адаптер Ethernet", если мы подключены по проводу и "Адаптер WiFi/беспроводный сети", если подключены без лапши.
Названия могут отличаться, но суть везде одна. Главное с Bluetooth не спутайте.
Теперь нужна строка "IPv4-адрес" - это и будет адрес, выданный провайдером (или вашем же оборудованием, если подключены через него).
Выглядеть будет примерно так:
339

Про свитчи, патчи и прочие приблуды спрашивать не нужно. Думаю, вы и сами всё понимаете.

Собственно, теперь у нас есть адрес от провайдера и наш внешний адрес.
Теперь, как я писал выше, их нужно просто сравнить.
Поздравляю, у вас выделенный адрес и вы можете без проблем организовать свой сервер во внешней сети.
Вы можете продолжать читать материал, следующая информация для вас.
Что же, у меня плохие новости.
Видимо, вам придется заказывать у провайдера услугу выделенного айпи.
Вероятно, адрес, выданный вам провайдером, попадает в один из этих диапазонов:
10.0.0.0 — 10.255.255.255
100.64.0.0 — 100.127.255.255
172.16.0.0 — 172.31.255.255
192.168.0.0 — 192.168.255.255
Не исключено, что прямо сейчас ваш сосед - Вася из 5Б - оскорбляет админа на вашем любимом сервере майнкрафта.
И если его отправят в бан по IP - вы тоже не сможете построить свою коробку возле спауна.
Какая жалость.
Впрочем, вы знаете, что делать.
Васю, конечно, искать не стоит, а вот заказать выделенный IP - вполне можно.
Заодно и свой сервер удастся запустить.
А пока такой возможности нет - боюсь, эта статья не для вас.


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

Тут на помощь приходит проброс портов.
Условно говоря, необходимо настроить роутер таким образом, чтобы при получении сигнала на 25565 порт он чётко понимал, что этот сигнал нужно перенаправить на конкретное устройство.
Например, на ваш ноутбук.
Теперь все, кто "стучится" на роутер по 25565 порту - отправляется на наш ноутбук, потому что роутер отправил "гостей" туда.
Надеюсь, суть вы уловили.
Конкретную инструкцию по пробросу не даю, т.к. всё, опять же, зависит от модели вашего устройства.
Информации в интернете полно, думаю, справитесь.

Теперь, казалось бы, все запросы должны приходить на наш компьютер и прямиком на наш сервер.
Но нет... Осталась последняя преграда - фаервол (он же сетевой фильтр и брандмауэр на ОС Windows).
Это специальная программа, которая защищает компьютер от внешнего воздействия.
Это крайне важно, если компьютер подключён непосредственно ко внешней сети, а не через защищённый доверенный роутер, например.
Условно говоря, фаервол - это сторожевая собака на страже вашего компьютера.
Назначение фаервола в том, чтобы пропускать лишь тот интернет-трафик, который не сможет принести вреда.
Зачастую фаерволы запрещают абсолютно всю входящую информацию на домашних компьютерах, т.к. обычно такие компьютеры не используются в качестве серверов.
Что же, наша задача - разрешить входящие подключения на порт 25565.
Обращаю внимание, что фаервол может находиться как на уровне роутера, так и на уровне компьютера (обычно и там, и там).
Подробнее о том, как конкретно настроить разрешение порта - можно почитать в интернете.
Опять же, существует огромное множество роутеров, операционных систем и антивирусных программ (которые тоже зачастую фильтруют сетевой трафик).
Ищите то, что подходит именно вам.

Вы, наверно, уже успели подумать, что сообщение "Failed to bind to port" из заголовка темы - это кликбейт?
Не тут-то было!
Решение конкретно этой проблемы можно описать одним предложением:
"Уберите из server.properties значение параметра server-ip= - оставьте его пустым"
Собственно, это всё.
Скорее всего, вы не разобрались в вопросе, поэтому вписали туда неверное значение - свой адрес с 2ip.ru, например.
Самым корректным значением параметра является то, что было там изначально - это отсутствие значения.
Ещё раз - айпи в server.properties указывать не нужно.
В 99% процентах случаев это не требуется, если вы обычный пользователь обычного домашнего интернета.
Удивлены?
Возможно, когда-нибудь я расскажу о том, почему это работает именно так.
А так же о том, что туда всё же можно вписать, если уж прям хочется.

Ну и, справедливости ради, стоит упомянуть ещё о том, что порт действительно может быть занят другой программой.
Но, как правило, этого не происходит, если вы не суёте свои руки в настройки программ по типу скайпа и юторрента.
Честно откровенно, я ещё ни разу за 20 лет своей жизни не видел, чтобы на стандартном 25565 порту работало что-то кроме сервера майнкрафта.
В целом, оно и не должно.
Порт занят другим приложением?
Меняете в этом приложении порт или вовсе завершаете приложение.
Думаю, больше разжёвывать этот момент не имеет смысла.
В интернете полно однообразных статей про "Failed to bind to port", в которых вам всё подробно об этом расскажут.

По итогу имеем 5 основных причин проблем неработоспособности сервера:
  1. Отсутствие выделенного IP-адреса
  2. Неправильная маршрутизация внутри сети - отсутствие проброса или других настроек
  3. Фильтрация трафика на любом из этапов - роутер/ос/антивирус
  4. Неверное заполнение server-ip в server.properties
  5. Занятость порта другой программой
Собственно, на этом всё.
Оригинальная тема
 
Сверху