Когда вы поднимаете игровой сервер на VPS с Windows и никто не может подключиться, виновник почти всегда один и тот же: порт блокирует файрвол Windows. Ниже показано, как открыть порт командами: это быстрее, чем ходить по меню, а главное — команды можно скопировать и вставить без ошибок.
На VPS нет роутера, который нужно настраивать. Забудьте о «пробросе портов» (port forwarding), который встречается в инструкциях: это для серверов, стоящих дома. У вашего VPS собственный публичный IP-адрес, поэтому между игроками и сервером стоит только файрвол Windows.
Откройте PowerShell от имени администратора
Подключитесь к VPS по удалённому рабочему столу (как это сделать, мы рассказываем здесь), щёлкните правой кнопкой мыши по кнопке Start (Пуск) и выберите Terminal (Admin) или Windows PowerShell (Admin). Если в названии нет «Admin» (администратор), команды завершатся ошибкой прав доступа.
Открытие порта: TCP и UDP, входящие и исходящие
В этом примере открывается порт 30120; замените номер и название на свои. Вставьте весь блок целиком:
$port = 30120
$name = "Game server"
New-NetFirewallRule -DisplayName "$name TCP $port (in)" -Direction Inbound -Protocol TCP -LocalPort $port -Action Allow -Profile Any
New-NetFirewallRule -DisplayName "$name UDP $port (in)" -Direction Inbound -Protocol UDP -LocalPort $port -Action Allow -Profile Any
New-NetFirewallRule -DisplayName "$name TCP $port (out)" -Direction Outbound -Protocol TCP -LocalPort $port -Action Allow -Profile Any
New-NetFirewallRule -DisplayName "$name UDP $port (out)" -Direction Outbound -Protocol UDP -LocalPort $port -Action Allow -Profile Any
Что делает каждая часть, если захотите что-то изменить:
-Direction Inbound— входящий трафик извне (именно он вам и нужен), аOutbound— исходящий.-Protocol— TCP или UDP. Они не взаимозаменяемы. Если игра использует UDP, а вы откроете только TCP, никто не подключится: это самая частая ошибка.-LocalPort— порт, на котором слушает ваш сервер.-Profile Anyприменяет правило ко всем трём сетевым профилям (доменный, частный и публичный). На VPS подключение обычно относится к профилю «публичный», так что это важно.
Нужны ли исходящие правила? В Windows Server исходящий трафик по умолчанию разрешён, так что обычно нет. Они добавлены, потому что не мешают, а если кто-то раньше ужесточил настройки файрвола, окажутся именно тем, чего не хватало.
Диапазон портов
New-NetFirewallRule -DisplayName "Game UDP 7777-7778 (in)" -Direction Inbound -Protocol UDP -LocalPort 7777-7778 -Action Allow -Profile Any
Можно указать и список через запятую: -LocalPort 27015,27020.
Проверка, что правила добавлены правильно
Get-NetFirewallRule -DisplayName "*30120*" | ForEach-Object {
$f = $_ | Get-NetFirewallPortFilter
[pscustomobject]@{
Rule = $_.DisplayName
Enabled = $_.Enabled
Direction = $_.Direction
Action = $_.Action
Protocol = $f.Protocol
Port = $f.LocalPort
}
} | Format-Table -AutoSize
Должны отобразиться все четыре правила со значением True в столбце Enabled и Allow в столбце Action.
Проверка, что сервер слушает порт
Открытый порт бесполезен, если за ним никто не слушает. Запустите игровой сервер и выполните:
Get-NetTCPConnection -LocalPort 30120 -State Listen
Get-NetUDPEndpoint -LocalPort 30120
Если команды ничего не вернули, дело не в файрволе: сервер не запустился, упал или настроен на другой порт. Прежде чем дальше менять правила, загляните в консоль игры.
Удаление правила
Remove-NetFirewallRule -DisplayName "Game server TCP 30120 (in)"
Если удобнее мышью
Нажмите Win + R, введите wf.msc и нажмите Enter. В левой панели выберите Inbound Rules (Правила для входящих подключений) → в правой колонке New Rule… (Создать правило…) → Port (Для порта) → выберите TCP или UDP и укажите номер в поле Specific local ports (Определенные локальные порты) → Allow the connection (Разрешить подключение) → оставьте отмеченными все три профиля → задайте имя и нажмите Finish (Готово). Повторите для второго протокола: одно правило охватывает только TCP или только UDP, но никогда оба сразу.
Всё равно не работает
Проверьте по порядку — так причины отсеиваются быстрее всего:
- Сервер слушает порт? Это две команды выше. Самая частая причина, с большим отрывом.
- Вы открыли нужный протокол? Половина игр работает по UDP. Откройте и TCP, и UDP, и вопрос отпадёт.
- Вы проверяете с самого сервера? Изнутри всё всегда работает. Проверьте с другого подключения или попросите кого-нибудь зайти.
- Фильтрация AntiDDoS. На странице вашей услуги, на вкладке Безопасность, находятся сетевые фильтры. Если вы создавали фильтры вручную, убедитесь, что в них есть порт и протокол вашей игры.
Никогда не отключайте файрвол целиком, чтобы «проверить». VPS с публичным IP-адресом начинают автоматически сканировать уже через несколько минут после включения. Откройте нужные порты, а остальные оставьте закрытыми.