- Go 98.4%
- Dockerfile 1.6%
| docker-compose.yml | ||
| Dockerfile | ||
| go.mod | ||
| main.go | ||
| README.md | ||
Relay Server (Minecraft Tunneling & Voice Chat)
Специализированный релей-сервер для проксирования соединений Minecraft, написанный на Go. Позволяет хостить Minecraft-серверы локально (без "белого" IP-адреса) и предоставлять игрокам доступ через автоматически генерируемые поддомены (например, happy-wolf-1234.porkof48.ru).
Ключевой особенностью сервера является встроенная поддержка UDP-туннелирования, что позволяет полноценно использовать мод Simple Voice Chat вместе с проксированием.
Как это работает
Релей-сервер открывает несколько портов для взаимодействия:
25565/TCP(Minecraft Port): Сюда подключаются обычные игроки. Сервер парсит начальный пакет рукопожатия, извлекает запрошенный адрес (например,subdomain.porkof48.ru), находит активную сессию хоста и ставит клиента в ожидание.25566/TCP(Control Port): Порт для управляющего соединения от хост-машины (мода на стороне локального сервера). При подключении хоста релей регистрирует новую сессию и выдает ей уникальный поддомен, а также выделяет UDP-порт для голосового чата.25567/TCP(Data Port): Хост использует этот порт для создания отдельных TCP-туннелей (для передачи трафика конкретных игроков) и для UDP-туннеля (чтобы получать и отправлять пакеты Voice Chat).25570-35570/UDP(Динамические порты): Релей динамически биндит один из этих портов под каждую сессию для трансляции UDP-пакетов между клиентами и хостом.
Поддержка Simple Voice Chat
Чтобы обойти ограничения TCP-туннелей, релей "упаковывает" UDP-трафик между клиентами (которые шлют голосовые пакеты на динамический UDP-порт релея) и отправляет его хосту по единому TCP-каналу (UDP Tunnel). На стороне хоста трафик распаковывается и перенаправляется на локальный сервер Simple Voice Chat.
Запуск сервера
Для запуска предоставляется готовый docker-compose.yml. Сервер использует network_mode: host, чтобы напрямую работать с сетью хоста машины и биндить необходимые порты.
docker-compose up -d
Логи
Просмотр логов контейнера:
docker logs relay-server_relay_1 -f