Свой сервер

Порты Killing Floor и NAT (port forwarding)

Если сервер работает у вас, но друзья не могут зайти, почти всегда это сеть: NAT, firewall или port forwarding.

Эта страница не про "магические цифры", а про правильную логику и чек-лист, который решает большинство кейсов.

Простая модель (что должно быть правдой)

Чтобы друг из интернета смог зайти на ваш сервер:

  1. Сервер должен слушать фиксированный порт (не случайный).
  2. Роутер должен пробросить этот порт на ПК-хост (если хостите дома).
  3. Firewall должен разрешать входящий трафик на этот порт.
  4. У вас должен быть доступный публичный IP (иногда у провайдера CGNAT).

Чек-лист по шагам

1) Выберите фиксированный порт сервера

Не оставляйте порт "как получится". Используйте фиксированный game port в конфиге сервера.

Если не уверены, где это настраивается, начните с гайда:

2) Разрешите в firewall (на ПК-хосте)

В Windows при первом запуске часто появляется запрос firewall. Если вы его пропустили:

  • Разрешите серверный процесс в Windows Firewall (Private/Public по ситуации).
  • Если у вас сторонний firewall, добавьте правило для входящего трафика по порту сервера (обычно UDP, зависит от настроек).

3) Настройте port forwarding на роутере (если хостите дома)

Создайте правило проброса порта:

  • Внешний порт: выбранный порт сервера
  • Внутренний IP: LAN IP ПК-хоста
  • Внутренний порт: тот же порт
  • Протокол: обычно UDP (зависит от конфига)

Важно:

  • Закрепите LAN IP за ПК (DHCP reservation), иначе после перезагрузки роутера все может "сломаться".

MikroTik RouterOS. В теме «Помогите открыть порты» на форуме killingfloor.ru порты на MikroTik RouterOS v5.12 не открывались через Firewall. Ответ Flack: нужен именно проброс (port-forwarding). В общих настройках: цепь DST_NAT, Dst Addr. - внешний адрес, Port - 7707, протокол - UDP; в Action: dst NAT, адрес - локальный IP сервера, dst port - 7707.

4) Проверьте публичную доступность (CGNAT)

Если firewall и forwarding настроены, но никто не может зайти, провайдер может использовать CGNAT.

Признаки:

  • На роутере нет реального публичного IPv4.
  • Проброс портов не дает результата.

Тогда варианты:

  • хостить на VPS с публичным IP
  • запросить у провайдера услугу публичного IP
  • использовать готовые community сервера
  • пусть хостит друг, у которого провайдер даёт публичный IP, или играйте через виртуальную сеть — см. Hamachi (по теме «Как обойти NAT?» с форума killingfloor.ru)

Если IP меняется, а игрокам нужен постоянный адрес, привяжите к нему доменное имя: купленный домен на статическом IP или бесплатный динамический DNS вроде No-IP, который обновляет запись сам.

Порты KF и правило в брандмауэре Windows

По теме «Проверяем/Открываем порты на Windows XP/7» на форуме killingfloor.ru (Винни, 2011–2013).

Порты, которые в теме предлагается открыть для KF:

7707;7709 - UDP (Game).
7708;7710 - UDP (Query).
7717;7719 - UDP (GameSpy).
8075; 8077 - TCP (WebAdmin).
20560; 20562 - UDP & TCP (Steam).
28852; 28854 - UDP & TCP (Master Server Browser).

Порт указывайте тот, что выставлен в игре; стандартный — 7707.

Windows 7:

  1. Панель управления → Брандмауэр Windows (если он выключен, включите его).
  2. «Дополнительные параметры» → «Правила для входящих подключений» → «Создать правило».
  3. Выберите «Для порта», затем протокол TCP или UDP (лучше создать правило для обоих по очереди) и «Определенные локальные порты», впишите порты из списка выше.
  4. «Разрешить подключение», отметьте все профили, дайте правилу имя и нажмите «Готово».

Windows XP: Пуск → Панель управления → Сеть и подключения к Интернету → Брандмауэр Windows → Исключения → Добавить порт. Назовите исключение, например, KillingFloorServer, укажите порт и добавьте его двумя отдельными исключениями — одно для TCP, другое для UDP. Сохраните и перезагрузите компьютер.

Если порты всё равно закрыты:

  • Их может блокировать антивирус. Для Eset NOD32 в теме советуют временно отключить защиту и файервол.
  • Если не помог и антивирус, дело, скорее всего, в провайдере.
  • В некоторых роутерах есть функция DMZ: она открывает в роутере все порты, но для одного компьютера.
  • Если перевести модем в режим моста, все порты будут открыты автоматически; результат можно проверить онлайн-сканером портов.

Быстрая диагностика

Симптом: по LAN заходит, а из интернета нет

Почти всегда port forwarding или CGNAT.

Симптом: один друг заходит, другой нет

Это может быть ограничение на их стороне (их сеть/firewall). Быстрый тест:

  • пусть попробуют зайти с другой сети (например, мобильная точка доступа).

Симптом: сервер виден в браузере, но войти нельзя

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

Пинг до IP:7707 не проходит

Это ничего не значит. Из темы «Висит подключение» (форум killingfloor.ru): порт 7707 работает по UDP, а ping использует ICMP, поэтому порты им не проверяются. По пингу можно узнать максимум то, отвечает ли на него роутер.

Два сервера за одним NAT, в списке «Интернет» виден только один

Из темы «Проблема с серверами Killing Floor в одном NATе» (форум killingfloor.ru): два сервера на разных машинах (виртуалках) за одним роутером и одним внешним IP.

  • Одинаковых портов у таких серверов быть не может: один порт открывается только на один внутренний IP. Каждому серверу нужны свои порты, и все их нужно пробросить; первые три (игровой, query, WebAdmin) прописываются в killingfloor.ini каждого сервера.
  • Автор темы выяснил, что общий порт Steam (20560) может быть одним на всех, а порт мастер-сервера у каждого сервера должен быть свой.
  • Пробрасывайте порт на тот же номер, что слушает сервер. У автора внешний 7707 был переназначен на внутренний 7607: приём шёл через 7607, а отправка по-прежнему по 7707, и из-за этого сервер не появлялся в списке.

Мини-сценарий (типично)

Хост пробросил порт, но не закрепил LAN IP за ПК. День работает, потом после перезагрузки роутера ПК получает новый IP и проброс перестает совпадать. DHCP reservation решает проблему навсегда.