Как я создал PortPlay: история разработки альтернативы Hamachi для геймеров
Прототип приложения
Привет, SE7EN! В годы моего детства интернет-провайдеры по умолчанию выдавали «серые» IP-адреса. Да, они динамически менялись, но это не мешало нам «прокидывать» порты и собираться с друзьями в CS 1.6 или Minecraft. Сегодня ситуация изменилась: получение «белого» IP превратилось в настоящий квест, который либо требует внушительной доплаты, либо вовсе невозможен. Но сейчас речь пойдет не о провайдерских ограничениях.
От концепции до MVP
История началась с желания поиграть в CS 1.6 с коллегами. Взрослая жизнь раскидала нас по разным локациям, и собрать всех в одной комнате стало невозможно. Тогда родилась идея: создать софт, который позволит запускать игровой сервер в пару кликов, без возни с Hamachi, ngrok и утомительной настройки портов, пока остывает чай.
Спустя полгода я сменил жилье, где у провайдера отсутствовала возможность выдачи статических IP. Так я начал работу над проектом для проброса портов. Концепция была прозрачной: арендовать недорогой VPS, развернуть на нем серверную часть и через туннель пробрасывать нужные порты клиенту.
Кто-то спросит: «Зачем изобретать велосипед, если есть WireGuard?». Ответ прост:
-
VPN-протоколы сейчас активно блокируются.
-
Настройка правил iptables на каждом VPS противоречит моей цели — «запуск сервера за минуту».
Прототип на Go
Благодаря тесной работе с ChatGPT, за несколько дней я написал на Go серверную и клиентскую части. Решение получилось эффективным, с поддержкой TCP/UDP и пробросом нескольких портов одновременно.
Однако консольный интерфейс выглядел архаично: нужно было постоянно помнить порты, IP и команды, создавая отдельные скрипты под каждую игру. Тогда пришла мысль: почему бы не автоматизировать весь процесс до одной кнопки?
Так на свет появился PortPlay.
Эволюция от CLI к полноценному GUI
Следом началась разработка бэкенда для управления сессиями, авторизацией и мониторинга прокси. Для GUI-клиента я снова выбрал Go. Поскольку нативной графики в языке нет, я остановился на фреймворке Wails: он позволяет создать удобный интерфейс на базе React, что дает отличную гибкость.
Первая версия выглядела довольно скромно:
Впрочем, итерация за итерацией, и интерфейс стал напоминать качественный десктопный продукт.
Принцип работы
Техническая составляющая подключения выглядит так:
-
Пользователь нажимает «Подключиться», и клиент отправляет запрос на наш бэкенд.
-
Бэкенд генерирует уникальный токен сессии, привязанный к конкретному прокси-узлу. Выбор сервера происходит автоматически: клиент получает список с метриками (пинг и загруженность) и выбирает оптимальный вариант, избегая перегруженных нод.
-
Клиент соединяется с выбранным прокси-сервером, передавая токен.
-
Прокси верифицирует токен (через API бэкенда или проверку JWT).
-
В случае успеха устанавливается туннель для TCP/UDP-трафика; иначе — соединение моментально сбрасывается.
Вызов: автоматическое обнаружение Minecraft
Первая версия поддерживала только Minecraft, что добавило головной боли при детектировании:
-
Порты динамические.
-
Множество процессов java.exe невозможно различить по имени.
Пришлось внедрить комплексную проверку: анализ порта, процесса, пути к исполняемому файлу и аргументов запуска.

Первый кризис: сетевые блокировки
После релиза первый же пользователь столкнулся с тем, что сервер недоступен. Анализ трафика через Wireshark показал классическую картину: соединение рвется после обмена парой пакетов, что типично для DPI-систем.
Это стало серьезным испытанием для проекта.
Решение
Я пересмотрел архитектуру, разделив прокси-узлы по региональному принципу:
-
/en — зарубежные серверы.
-
/ru — серверы внутри СНГ.
Это помогло решить проблему доступности для большинства пользователей.
Масштабирование и новые игры
За первые две недели количество регистраций достигло 150. Окрыленный успехом, я добавил поддержку CS 1.6, CS2 и Terraria.

Распределение аудитории оказалось предсказуемым: 80% — Minecraft, по 10% — CS и Terraria. Раздел с гайдами на сайте помог привлечь органический трафик, и база пользователей выросла до 500 человек.
Запуск серверов «из коробки»
Следующим логичным шагом стала возможность развертывания выделенного сервера прямо через интерфейс программы, чтобы не держать игру запущенной. Для Minecraft я остановился на высокопроизводительном форке Paper, добавив удобный менеджер плагинов.

Программа сама определяет нужную версию Java и при необходимости скачивает портативную версию, избавляя пользователя от ручной настройки.
Экономика проекта
Инфраструктура оказалась весьма доступной:
-
Core-система (API, БД, учет): $20/мес.
-
Прокси-ноды: СНГ — ~$4, зарубеж — ~$7. Сейчас 10 узлов обходятся в ~$60/мес.
Итого: ~$80 в месяц для обслуживания 1500 пользователей и более 13 500 сессий. Написанные на Go прокси показывают феноменальную легкость — менее 20 МБ RAM на каждый узел даже при длительном аптайме.
Планы на будущее
В ближайшее время планирую расширять библиотеку игр и предоставить пользователям продвинутые инструменты для ручного управления портами.
Шоураннер заявил, что финальный сезон «Дома дракона» превзойдет третий по масштабу
О британском аналоге «Броска кобры» Экшн-Мэне снимут фильм при участии ветеранов Marvel
Ремастер Oblivion удивил производительностью на Nintendo Switch 2, удерживая 30 кадров в секунду
На ПК выпустили ремейк Donkey Kong Land спустя 31 год после выхода оригинала, причем игра работает без оригинального ROM
Создатели extraction-шутера платят игрокам реальные деньги, но списывают средства за спавн персонажа
Раскрыта реальная стоимость физических игр на фоне отказа Sony от дисков
Президент Bones объяснил причины экранизации «Брачного токсина»
Bethesda анонсировала мрачное обновление для Fallout 76 с новым тёмным контентом