Запустить туннель бесплатно
☰
Игры по сети

Как играть с другом по сети в любую игру: порты, TCP и UDP

Как играть с другом по сети без белого IP и Хамачи: узнайте порт и протокол своей игры и откройте сервер другу одной командой fxtunnel.

Чтобы играть с другом по сети, одному из вас нужно запустить игру или сервер как хост, а второму достучаться до хоста через интернет. Мешает почти всегда одно: домашний компьютер не виден снаружи. Решение укладывается в три действия. Узнайте, какой порт и протокол слушает ваша игра. Откройте его командой fxtunnel tcp <порт> или fxtunnel udp <порт>. Отправьте другу адрес вида fxtun.ru:14215. Белый IP, настройка роутера и программа у друга не нужны.

Игры на TCP работают на бесплатном тарифе. Для UDP нужен тариф Base. Ниже разберём, как понять, что нужно именно вашей игре, и что делать, если портов у неё два.

Как устроена игра по сети

Почти любая сетевая игра устроена одинаково. Один компьютер — хост: на нём работает мир, он принимает подключения. Остальные — клиенты: они подключаются к хосту по адресу и порту. Хостом бывает отдельная программа (выделенный сервер) или сама игра, если в ней есть кнопка вроде «Открыть для сети» или «Создать сервер».

Порт — номер «двери», у которой хост ждёт игроков. У Minecraft Java это 25565, у Terraria — 7777. Протокола два:

  • TCP доставляет данные по порядку и без потерь. Им пользуются Minecraft Java и Terraria.
  • UDP отправляет пакеты без гарантий доставки, зато без задержек на перепроверку. На нём работают Minecraft Bedrock, Factorio и Project Zomboid.

Дома, на одном Wi-Fi, всё работает само: друг видит ваш компьютер напрямую. Через интернет — нет. Ваш компьютер стоит за роутером, а часто ещё и за общим NAT провайдера с серым адресом. Входящее подключение от друга до вас просто не доходит. Подробно про это — в статье «Серый IP: как узнать и что делать».

Туннель решает задачу с другой стороны. Клиент fxtunnel на вашем компьютере сам подключается к серверу fxTunnel, и тот выдаёт публичный адрес. Друг подключается к этому адресу, а сервер передаёт его соединение вашей игре.

интернетигра другаподключение по IP
сервер fxTunnelпубличный портfxtun.ru:14215
ваш компьютерклиент fxtunnelfxtunnel tcp 7777
локальносервер игрыlocalhost:7777
Рис. 1. Друг подключается к публичному порту на сервере fxTunnel, клиент на вашем компьютере передаёт соединение игре.

Как узнать порт и протокол своей игры

Нужны два значения: номер порта и TCP это или UDP. Искать их стоит в таком порядке.

Вики игры или руководство по серверу. Самый надёжный путь. Ищите страницу про выделенный сервер (dedicated server) и слово «port». Там обычно написано и значение по умолчанию, и протокол, и как его поменять.

Настройки сервера. Порт почти всегда можно задать: в Minecraft это server-port в server.properties, в Terraria — параметр -port, в Factorio — ключ --port. Если вы его меняли, считается ваше значение, а не то, что в вики.

Спросить у системы. Запустите сервер игры и посмотрите, какие порты заняла программа.

На Windows в PowerShell:

POWERSHELL
Get-NetTCPConnection -State Listen | Select-Object LocalPort, OwningProcess
Get-NetUDPEndpoint | Select-Object LocalPort, OwningProcess
Get-Process -Id 1234

Первые две команды покажут открытые TCP- и UDP-порты с номером процесса, третья по номеру процесса (вместо 1234 подставьте свой) назовёт программу.

На Linux:

BASH
sudo ss -tulpn

В колонке Netid будет tcp или udp, в Local Address:Port — порт, в конце строки — имя процесса.

На macOS:

BASH
sudo lsof -nP -iTCP -sTCP:LISTEN
sudo lsof -nP -iUDP

Лайфхак: сравните вывод с запущенным сервером и без него. Строки, которые появились, и есть порты игры. Если их несколько, откройте вики: часть портов бывает служебной и для игры с другом не нужна.

Порты популярных игр

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

ИграПортПротоколТуннелейТарифИсточник
Minecraft Java Edition25565TCP1бесплатныйminecraft.wiki
Minecraft Bedrock Edition19132UDP1Baseminecraft.wiki
Terraria7777TCP1бесплатныйterraria.wiki.gg
Factorio34197UDP1Basewiki.factorio.com
Project Zomboid16261 и 16262UDP2Basepzwiki.net

Столбец «Туннелей» показывает, сколько портов нужно открыть. Один туннель fxTunnel открывает ровно один порт. На бесплатном тарифе одновременно работает один туннель, поэтому игре с двумя портами нужен Base: на нём пять туннелей одновременно, и UDP.

Про Minecraft с другом есть отдельный подробный разбор: «Майнкрафт по сети без Хамачи». Про остальные игры из таблицы и другие популярные — отдельные статьи: сервер Minecraft Bedrock для друзей, сервер Project Zomboid, сервер Valheim и Palworld, Terraria и Stardew Valley по сети.

Открываем сервер одной командой

Установите клиент и войдите

На Windows в PowerShell:

POWERSHELL
irm https://fxtun.ru/install.ps1 | iex

На Linux и macOS:

BASH
curl -fsSL https://fxtun.ru/install.sh | sh

Затем в новом окне терминала:

BASH
fxtunnel login

Клиент откроет страницу входа в браузере. Подтвердите вход, и в терминале появится Authorized!. Аккаунт заводится на fxtun.ru, входить нужно один раз.

Игра на TCP: пример с Terraria

Запустите выделенный сервер Terraria и создайте или выберите мир. Порт оставьте стандартный, 7777 (terraria.wiki.gg). Во втором окне терминала:

BASH
fxtunnel tcp 7777
CONSOLE
Connecting to fxtunnel server...
Tunnel established!
TCP: fxtun.ru:14215
Forwarding to localhost:7777
Ready to receive connections

Строка TCP: fxtun.ru:14215 — адрес для друга. Порт у вас будет свой, из диапазона 10000–20000. В Terraria друг выбирает в главном меню Multiplayer, затем Join via IP, персонажа, и вводит IP-адрес fxtun.ru и порт 14215 (terraria.wiki.gg).

Туннель работает, пока открыто окно терминала. Остановить его можно клавишами Ctrl+C.

Игра на UDP: пример с Factorio

Factorio использует только UDP и порт 34197 (wiki.factorio.com). Запустите сервер Factorio на этом порту, затем:

BASH
fxtunnel udp 34197
CONSOLE
Connecting to fxtunnel server...
Tunnel established!
UDP: fxtun.ru:20715
Forwarding to localhost:34197
Inspector: http://127.0.0.1:4040
Ready to receive connections

Порт UDP-туннеля берётся из диапазона 20001–30000. Друг подключается к серверу по адресу fxtun.ru и порту из строки UDP:. Строку Inspector: для игр можно не замечать, она про HTTP-туннели.

На бесплатном тарифе UDP-туннель не откроется, клиент ответит:

CONSOLE
Failed to connect: server rejected tunnel: UDP tunnels are not available on your plan — upgrade to enable UDP

Это не ошибка сети: сервер прямо говорит, что UDP на тарифе нет. Он включается с тарифа Base.

Друг подключается к серверу fxTunnel, а не к вашему домашнему адресу. Ваш IP он не видит, а на роутере ничего открывать не нужно.

Почему порт меняется и как его удержать

Сервер fxTunnel выдаёт первый свободный порт из диапазона. Пока клиент работает, порт держится за вами: пропал интернет, клиент переподключится и получит тот же номер. А вот после перезапуска fxtunnel порт будет новым, и другу придётся отправить свежий адрес.

Чтобы адрес не менялся, попросите конкретный порт флагом --remote-port:

BASH
fxtunnel tcp 7777 --remote-port 17777
fxtunnel udp 34197 --remote-port 24197

Номер должен быть из диапазона: для TCP 10000–20000, для UDP 20001–30000. Попросить --remote-port 7777 нельзя, сервер ответит outside allowed range. Если номер уже занял кто-то другой, клиент откажет с Failed to connect: server rejected tunnel: port 17777 is already in use, и нужно выбрать другой. Навсегда порт за аккаунтом не закрепляется: кто первым занял, того и порт. Держите в запасе пару номеров.

Игры с двумя портами

Одни игры используют два порта. Project Zomboid, например, работает на UDP 16261 и 16262 (pzwiki.net). Официальное руководство Valheim пишет прямо: сервер занимает указанный порт и следующий за ним, по умолчанию 2456–2457 (valheimgame.com).

С туннелем тут два момента.

Каждому порту нужен свой туннель. Два порта значит два туннеля, а два туннеля одновременно есть только с тарифа Base.

Номера снаружи и внутри разные. Туннель на локальный порт 16261 получит снаружи, скажем, fxtun.ru:20412, а туннель на 16262 — fxtun.ru:20413 или вообще другой номер. Если игра ждёт второй порт строго на единицу больше первого или сама сообщает игрокам свой номер порта, такая разница может сломать подключение.

Приём для таких игр: запустить сервер на портах из диапазона UDP и попросить ровно такие же номера снаружи. В настройках сервера игры поставьте, например, порты 20261 и 20262, а туннели откройте так, каждый в своём окне:

BASH
fxtunnel udp 20261 --remote-port 20261
fxtunnel udp 20262 --remote-port 20262

Теперь номера совпадают: игра слушает 20261 и 20262, и снаружи те же 20261 и 20262. Друг подключается к fxtun.ru:20261. Какие именно порты нужны конкретной игре и где они задаются, смотрите в её документации. Разборы для Project Zomboid и Valheim выйдут отдельными статьями, ссылки на них выше.

Если игра не даёт ввести адрес

Некоторые игры ищут сервер только в локальной сети. Хост рассылает объявления всем компьютерам вокруг, клиенты собирают их в список. Minecraft так показывает открытые для сети миры: игра хоста рассылает объявление на групповой адрес 224.0.2.60:4445 (minecraft.wiki). Через туннель такое объявление не доходит, поэтому у друга мир в списке не появится.

Для Minecraft это не беда: есть прямое подключение по адресу. Но если в игре нет поля для адреса вообще, туннель не поможет. Тогда нужна виртуальная локальная сеть вроде Radmin VPN или ZeroTier, где все игроки как будто сидят в одной комнате. Честное сравнение обоих подходов — в статье «Аналог Radmin VPN и Хамачи».

Кого пускать на сервер

Адрес туннеля публичный: кто его знает, тот и может подключиться. Для игры с друзьями обычно хватает встроенных средств самой игры. Пароль сервера, белый список игроков, в Minecraft — online-mode и /whitelist.

У TCP- и UDP-туннелей есть и флаг --allow-ip: он пропускает только перечисленные адреса, остальных сервер сразу отбрасывает.

BASH
fxtunnel udp 34197 --allow-ip 203.0.113.10 --allow-ip 198.51.100.0/24

Минус один: у многих домашних провайдеров внешний IP друга время от времени меняется, и тогда список придётся обновлять. Флага --auth с паролем у TCP и UDP нет, он только для HTTP-туннелей.

Если друг не может подключиться

Не тот протокол. Игра на UDP, а открыт fxtunnel tcp, или наоборот. Проверьте по вики или через ss -tulpn / Get-NetUDPEndpoint.

Не тот порт. Сервер игры запущен на одном порту, а туннель смотрит на другой. Число в команде fxtunnel должно совпадать с портом, который слушает игра.

Адрес без порта. Друг вписал просто fxtun.ru. Нужен адрес целиком, с портом из строки TCP: или UDP:.

Старый адрес. Вы перезапустили fxtunnel без --remote-port, и порт стал другим. Отправьте новую строку.

Второй туннель не открылся. На бесплатном тарифе работает один туннель одновременно. Второй получит Failed to connect: server rejected tunnel: tunnel limit reached.

Разные версии игры. Многие серверы пускают только клиентов своей версии. Выберите одну версию на двоих.

Что дальше

UDP — с тарифа Base

Игровые серверы, голосовые чаты и DNS работают по UDP. UDP-туннели открываются на тарифе Base и выше, вместе с пятью туннелями одновременно.

$ curl -fsSL https://fxtun.ru/install.sh | sh
@mephistofx

Пишу fxTunnel — туннели для разработчиков без белого IP. Рассказываю, как это устроено изнутри.

Написать в Telegram →

Читайте дальше