2023

WATERFLAKE

간단한 설치만으로 마인크래프트 도메인 서버 열기

터널 만들기

참가 인원
1명(개인)
개발 기간
2023.03 ~ 2023.05
주요 기술
NestJS, Java

Highlights

Motivation

10여 년 전, 마인크래프트라는 게임에 빠져 모두와 함께할 수 있는 서버를 열어보는 게 가장 큰 목적이었습니다. 컴퓨터는 전혀 모르는 초등학생이 블로그 글만 읽고 VPS 서버를 대여해 리눅스 환경에서 게임 서버를 실행했습니다. 그리고 복잡한 네트워크 설정까지 해 마침내 서버를 열었습니다. 그때의 성취감은 평생 잊을 수 없는 기억입니다. 그래서 '만약 복잡한 과정 없이 쉽게 게임 서버를 열 수 있게 도와주는 도구가 있으면 어떨까?'라는 생각에서 시작했습니다.

Architecture

SRV 레코드로 서브도메인이 특정 IP 의 포트를 가리키도록 자동 설정하기

도메인에서 게임 서버까지

사용자가 WATERFLAKE 웹 화면에서 터널을 생성하면 Cloudflare API 를 통해 SRV 레코드를 생성합니다. 그리고 터널링을 담당하는 가상 머신에 랜덤한 포트로 터널링 서버를 띄웁니다. 터널링 서버는 두 개의 연결을 받는데, 한 개는 SRV 레코드를 통해 들어오는 연결, 한 개는 마인크래프트 서버 쪽으로 나가는 연결입니다. 이 두 연결을 파이프해 외부에서 들어오는 패킷이 자연스럽게 마인크래프트 서버로 나갈 수 있습니다. 사용자에게는 도메인 주소만 입력하면 연결되는 서버처럼 보입니다.

게임 서버와 터널링 서버 사이를 TCP 소켓으로 터널링하기

터널링 서버와 게임 서버 간 TCP 터널은 20개의 소켓으로 관리됩니다. 게임 플레이어가 서버에 접속하면 이 소켓 중 하나를 점유합니다. 플레이어가 게임 서버를 나가면 해당 소켓은 폐기되고, 새 소켓을 생성합니다. 이 주기가 반복되어 소켓의 개수를 관리합니다. 다행히 마인크래프트 서버 설정에는 최대 접속 가능한 인원이 정해져 있기 때문에, 이 값만큼만 소켓을 관리하면 운영에 문제가 없었습니다.