Привет, 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 на каждый узел даже при длительном аптайме.
Планы на будущее
В ближайшее время планирую расширять библиотеку игр и предоставить пользователям продвинутые инструменты для ручного управления портами.


