Туннель позволяет игровому серверу дома принимать игроков без проброса порта: небольшой агент на вашей машине открывает исходящее соединение к ретранслятору с публичным адресом, а ретранслятор отправляет трафик игроков обратно по этому соединению. Именно так сервисы вроде playit.gg, самостоятельно развёрнутые инструменты вроде frp и связка WireGuard с дешёвым VPS выводят серверы в сеть из-за CGNAT. Цена - объезд: каждый пакет идёт через ретранслятор, что добавляет от нескольких миллисекунд до сотни с лишним в зависимости от того, где он находится, - и, если не принять мер, сервер видит каждого игрока пришедшим с адреса ретранслятора, что ломает баны по IP и ограничения на игрока. Используйте туннель, когда не можете пробросить порт и хотите оставить сервер дома. Не используйте его, чтобы решить проблему, которую проще решили бы проброс порта или арендованный сервер.
Что делает туннель#
Домашний сервер за NAT не может принимать соединения, которые начинаются снаружи. Зато он может сам устанавливать исходящие соединения, а они разрешены везде. Туннель разворачивает это в обратную сторону.
- Агент на домашней машине подключается к ретранслятору в публичном интернете и держит соединение открытым.
- Ретранслятор слушает публичный адрес и порт, ожидая игроков.
- Когда пакет игрока приходит на ретранслятор, тот отправляет его по открытому соединению агенту.
- Агент передаёт пакет игровому серверу на той же машине, а ответы идут обратно тем же путём.
Поскольку агент сам звонит наружу, дома ничего открывать не нужно: ни на роутере, ни через NAT оператора у провайдера. В этом и вся привлекательность. Почему прямой путь закрыт изначально, объясняет статья NAT и CGNAT для домашнего хостинга.
Варианты#
| Вариант | Протоколы | Ретранслятор держите вы? | Типичное применение |
|---|---|---|---|
| playit.gg | TCP и UDP | Нет | Быстрая настройка для Minecraft и большинства игр |
| frp | TCP и UDP | Да, на VPS | Полный контроль, много портов, без третьей стороны |
| WireGuard плюс проброс портов на VPS | Всё, что идёт по IP | Да, на VPS | Самый прозрачный вариант, больше сетевой работы |
| ngrok | TCP, без UDP | Нет | Игры только на TCP, такие как Minecraft Java |
| Cloudflare Tunnel | HTTP для публичных посетителей | Нет | Веб-панели и карты, но не игровой трафик |
| Tailscale или ZeroTier | Всё, приватно | Нет | Приватные группы, где все ставят клиент |
Столбец протоколов быстро отсеивает варианты. Большинство игр использует для геймплея UDP - Valheim, игры на Source, Palworld, Project Zomboid, почти каждая выживалка, - поэтому любой туннель, который несёт только TCP, для них бесполезен. Minecraft Java и Terraria работают по TCP и подходят к чему угодно. Почему игры выбирают UDP и что это значит для прокси, объясняет статья TCP или UDP для игровых серверов.
playit.gg#
playit.gg - туннельный сервис, ориентированный на игровые серверы. Вы запускаете его агент на машине с сервером, привязываете его к учётной записи в браузере и создаёте туннель для игры: протокол, локальный порт, а сервис выдаёт вам публичный адрес и порт в своей сети. Игроки подключаются к этому адресу вместо вашего.
Он работает и с TCP, и с UDP, поэтому он обычный ответ для Valheim и других UDP-игр за CGNAT. Бесплатного тарифа хватает для компании друзей; платные тарифы добавляют, например, больше туннелей, выбор портов и регионов. Точные ограничения меняются, поэтому проверьте текущие, прежде чем строить на них планы.
Три вещи, которые стоит знать, прежде чем на него полагаться:
- Адрес принадлежит им. Если вы уйдёте с сервиса, адрес уйдёт вместе с ним, и игрокам понадобится новый. Помогает собственный домен перед ним, если игра поддерживает имя.
- Ваш трафик проходит через третью сторону. Для игрового сервера это обычно нормально; но знать об этом стоит.
- Задержку определяет расположение ретранслятора. Выбирайте регион, ближайший к середине ваших игроков, а не к вам.
frp на VPS#
frp - обратный прокси с открытым исходным кодом, созданный именно для этой задачи. Вы запускаете frps на небольшом VPS с публичным адресом и frpc рядом с игровым сервером дома. Свежие версии используют конфигурацию в TOML:
bindPort = 7000auth.token = "a-long-random-shared-secret"serverAddr = "198.51.100.20"serverPort = 7000auth.token = "a-long-random-shared-secret"[[proxies]]name = "valheim-game"type = "udp"localIP = "127.0.0.1"localPort = 2456remotePort = 2456[[proxies]]name = "valheim-query"type = "udp"localIP = "127.0.0.1"localPort = 2457remotePort = 2457После этого игроки подключаются к 198.51.100.20:2456. Старые релизы frp использовали формат INI с другими названиями ключей, поэтому сверяйте документацию с версией, которую скачали. Откройте 7000/tcp и игровые порты в файрволе VPS, а дома - ничего.
Преимущество frp - контроль: свой ретранслятор, свои порты, сколько угодно сервисов и никакой третьей стороны на пути. Цена в том, что теперь вы держите и защищаете VPS, а расположение ретранслятора и качество его сети - ваша забота.
WireGuard и проброс портов на VPS#
Самый прозрачный вариант - обычный туннель WireGuard между VPS и домашней машиной, где VPS пересылает игровые порты в туннель на уровне IP. Ничто здесь не знает об игре; пакеты просто маршрутизируются.
# On the VPS: wg0 is the tunnel, 10.8.0.2 is the home server's tunnel address$ sudo sysctl -w net.ipv4.ip_forward=1$ sudo iptables -t nat -A PREROUTING -i eth0 -p udp --dport 2456:2457 \ -j DNAT --to-destination 10.8.0.2$ sudo iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADEСтрока с MASQUERADE - простой вариант: она переписывает адреса источника игроков на туннельный адрес VPS, поэтому ответы домашнего сервера естественным образом возвращаются через туннель. Это же означает, что игровой сервер видит каждого игрока как 10.8.0.1. Сохранить настоящие адреса можно - уберите маскарадинг и настройте на домашней машине policy routing, чтобы ответы на этот трафик возвращались через туннель, - но это кропотливо, и по дороге легко сломать остальную домашнюю сеть. Сделайте правила и sysctl постоянными, иначе после перезагрузки они исчезнут.
Этот подход без изменений несёт любой протокол и любую игру. Но и сетевых знаний он требует больше всех. Как закрыть VPS вокруг него, описано в статье правила файрвола, которые имеют значение.
Чего стоит туннель#
Задержка
Каждый пакет делает крюк через ретранслятор. Добавленная задержка - примерно время приёма-передачи от домашнего сервера до ретранслятора, а путь игрока меняется с «игрок - ваш дом» на «игрок - ретранслятор плюс ретранслятор - ваш дом».
| Домашний сервер | Ретранслятор | Игроки | Эффект |
|---|---|---|---|
| Германия | Германия | Европа | Несколько мс - почти незаметно |
| Германия | Нидерланды или Франция | Европа | Плюс 5-15 мс |
| Германия | Восток США | Европа | Плюс 80-100 мс - избегайте |
| Германия | Восток США | Восток США | Игроки выигрывают, вы проигрываете |
Правило: ставьте ретранслятор рядом с сервером или рядом с игроками, в идеале и то и другое. Ретранслятор не в том регионе превращает хороший сервер в лагающий. Расстояния - в статье пинг до игрового сервера по регионам. Бесплатные тарифы иногда сажают вас на любой доступный ретранслятор; проверьте выданный адрес и протестируйте его.
Настоящие адреса игроков
Ретранслятор, который терминирует соединения, - большинство туннельных сервисов, frp, схема с маскарадингом - делает так, что каждый игрок выглядит пришедшим с ретранслятора. Последствия:
- Бан по IP банит всех или никого, ведь у всех игроков один адрес.
- Ограничения числа соединений с одного IP срабатывают, как только заходят несколько игроков.
- Логи и античит теряют информацию, на которую опираются.
- Гео-функции и обнаружение «твинков с одного IP» перестают работать.
Для TCP-игр решение - протокол PROXY: ретранслятор добавляет в начало небольшой заголовок с настоящим адресом клиента, а сервер его читает. Paper поддерживает это через proxies.proxy-protocol: true в config/paper-global.yml, а Velocity - через haproxy-protocol = true в velocity.toml. frp и некоторые туннельные сервисы умеют отправлять этот заголовок. Обе стороны должны быть согласованы: сервер, ожидающий заголовок, отклоняет соединения без него, а в обратном случае получаются искажённые входы. У большинства UDP-игр аналога нет, поэтому для них планируйте опознавать игроков по ID учётной записи, а не по IP.
Трафик и надёжность
Ретранслятор несёт весь ваш трафик дважды - от игроков внутрь, к вам домой наружу и обратно. Бесплатный тариф с ограничением трафика или небольшой VPS с месячным лимитом передачи нужно рассчитывать с учётом этого; цифры по играм - в статье трафик игрового сервера на игрока. Кроме того, туннель добавляет компонент, который может отказать: если агент упадёт или ретранслятор ляжет, сервер будет недоступен, продолжая отлично работать. Запускайте агент как сервис, который перезапускается при сбое.
Как держать агент запущенным#
Туннель надёжен ровно настолько, насколько надёжен агент дома. Если он остановится - падение, перезагрузка, закрытая крышка ноутбука, - сервер продолжит работать, но до него никто не достучится, а консоль не покажет ничего подозрительного. В Linux запускайте агент как сервис systemd, чтобы он стартовал при загрузке и перезапускался при сбое:
[Unit]Description=frp clientAfter=network-online.targetWants=network-online.target[Service]ExecStart=/usr/local/bin/frpc -c /etc/frp/frpc.tomlRestart=alwaysRestartSec=5[Install]WantedBy=multi-user.targetВключите его командой sudo systemctl enable --now frpc. Та же схема работает и для других агентов; playit.gg поставляет собственную настройку сервиса для Linux и Windows. Подробнее файл юнита объясняет статья сервисы systemd для ваших приложений. А затем мониторьте публичную сторону, а не домашнюю: запрос к адресу ретранслятора каждые несколько минут одной проверкой ловит мёртвый агент, мёртвый ретранслятор и мёртвый игровой сервер. Проверка, которая помещается в задание cron, есть в статье query-порты и A2S.
Оверлейные сети: приватная альтернатива#
Если все, кто играет, - ваши друзья, публичный туннель может оказаться избыточным. Оверлейные сети вроде Tailscale, ZeroTier или самостоятельно собранной сетки WireGuard помещают сервер и каждого игрока в одну частную сеть. Игроки подключаются к частному адресу сервера в этой сети, а из публичного интернета не доступно вообще ничего.
У этого есть реальные преимущества: в большинстве случаев нет объезда через ретранслятор, потому что оверлейные инструменты изо всех сил стараются соединить участников напрямую и используют ретранслятор, только когда этому мешает NAT с обеих сторон; нет открытого порта для сканеров и флуда; и у каждого игрока настоящий, отдельный адрес. Цена в том, что каждый игрок ставит клиент и присоединяется к вашей сети, что исключает всё публичное и добавляет хлопот с поддержкой каждый раз, когда у кого-то новый ПК. Для группы из четырёх-десяти человек, которые все друг друга знают, это часто лучший ответ на этой странице.
Прокси, которые не туннели#
В игровом хостинге прокси называют ещё две вещи, и их стоит отделить.
Прокси, понимающие игру, такие как Velocity и BungeeCord для Minecraft, стоят перед одним или несколькими бэкенд-серверами и перемещают игроков между ними. Они решают задачу устройства сети, а не доступности - самому прокси по-прежнему нужен публичный адрес. О них - статья сети Minecraft на прокси Velocity.
Универсальные потоковые прокси, такие как модуль stream в nginx, пересылают сырой TCP или UDP с одного адреса на другой, что полезно, чтобы поставить игру за другой публичный адрес, которым вы уже управляете:
stream { server { listen 2456 udp; proxy_pass 10.8.0.2:2456; }}Фактически это половина туннеля со стороны ретранслятора, написанная вручную. Обычный обратный HTTP-прокси или оранжевое облако Cloudflare вообще не могут нести игровой трафик; почему - объясняет статья Cloudflare для сайтов и игровых серверов.
Когда использовать, а когда нет#
Используйте туннель, когда вы за CGNAT, не можете получить публичный IPv4-адрес от провайдера, хотите, чтобы сервер оставался на вашем собственном железе, а группа достаточно мала, чтобы ограничения ретранслятора не имели значения. А также когда вы хотите, чтобы ваш домашний адрес не попадал в список серверов у каждого игрока, - туннель его скрывает, и это настоящее преимущество, учитывая, как часто домашние адреса утекают.
Не используйте его, когда сработал бы проброс порта. Прямой путь всегда быстрее и проще. А для публичного или растущего сообщества туннель - полумера: вы платите за ретранслятор, добавляете задержку, теряете адреса игроков и по-прежнему зависите от домашнего подключения и электричества. В этот момент на VPS-ретрансляторе можно просто запустить сам сервер - или взять арендованный сервер. Это решение разбирают статьи домашний игровой сервер или аренда и проброс портов или хостинг.
VDS от RE:NODE подходит как конечная точка ретранслятора для frp или WireGuard, ведь вы получаете root и сами выбираете порты, - хотя VDS в Германии с публичным адресом может с тем же успехом запускать и сам игровой сервер, без всякого объезда.
FAQ#
Безопасно ли пользоваться playit.gg?
Это широко используемый сервис именно для этой задачи, и его агент устанавливает только исходящие соединения. Ваш игровой трафик действительно проходит через их ретрансляторы, а сервер доступен любому, кто знает адрес туннеля, поэтому соблюдайте те же меры, что и с любым публичным сервером: пароли или белые списки и никаких открытых наружу админских портов.
Можно ли использовать ngrok для сервера Valheim или Palworld?
Нет. TCP-туннели ngrok не несут UDP, а эти игры используют UDP для геймплея. Используйте сервис или инструмент с поддержкой UDP, например playit.gg, frp или WireGuard.
Какую задержку добавляет туннель?
Примерно время приёма-передачи между вашим сервером и ретранслятором. Если оба в одной стране - несколько миллисекунд; если ретранслятор на другом континенте - 80 мс и больше. Выбирайте ретранслятор рядом с сервером и игроками.
Почему у всех игроков один и тот же IP-адрес?
Потому что ретранслятор пересылает их трафик, и сервер видит отправителем ретранслятор. Для TCP-игр, которые это поддерживают, включите протокол PROXY и на ретрансляторе, и на сервере, чтобы передавать настоящие адреса. Для UDP-игр полагайтесь на ID учётных записей.
Нужно ли с туннелем всё равно пробрасывать порты?
Нет. Агент туннеля подключается наружу, а это разрешает любая домашняя сеть. На роутере ничего не открывается, поэтому туннели и работают за CGNAT.




Комментарии
Полностью анонимно: без аккаунта, без почты, без cookie. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.