DNS로 DOOM을? DNS TXT 레코드의 놀라운 활용!
DNS TXT 레코드를 활용하여 DOOM 게임 엔진과 게임 에셋(Game Assets)을 저장하고 실행하는 프로젝트가 공개됨
C# 기반의 managed-doom을 활용하여 메모리 내에서 게임을 실행하며, 디스크 접근 없이 DNS 쿼리만으로 게임 구동
DNS TXT 레코드의 무궁무진한 활용 가능성을 보여주며, 보안 및 성능 측면에서 다양한 논의가 진행됨
Cloudflare API를 사용하여 DNS 레코드를 업로드하는 과정에서 발생한 속도 문제와 대안에 대한 논의가 이루어짐
DNS TXT 레코드 기반 DOOM 실행 원리
본 프로젝트는 DNS TXT 레코드를 파일 서버(File Server)로 활용하여 게임을 구동한다. 구체적으로, 게임 엔진과 에셋을 Base64로 인코딩하여 여러 개의 TXT 레코드에 분산 저장하고, PowerShell 스크립트를 통해 DNS 쿼리를 수행하여 데이터를 메모리에 재조립한다. 이 방식은 디스크에 파일을 저장하지 않고, 메모리 내에서 게임을 실행(In-memory Execution)하는 특징을 가진다.
C# managed-doom 포팅 및 최적화
프로젝트는 기존의 managed-doom을 활용하여 C# 환경에서 DOOM을 실행한다. 하지만, 파일 시스템 의존성(File System Dependency)을 제거하고, 메모리 스트림(MemoryStream)에서 게임 데이터를 읽어오도록 코드를 수정했다. 또한, 윈도우 API 호출을 직접 사용하여 네이티브 종속성(Native Dependency)을 최소화했다. 이러한 과정을 통해 DNS 쿼리만으로 게임을 실행할 수 있는 환경을 구축했다.
DNS 레코드 업로드 및 성능 문제
저자는 Cloudflare API를 사용하여 DNS 레코드를 업로드하는 과정에서 1,966개의 레코드를 생성하는 데 약 15분이 소요되었다고 언급한다. 댓글에서는 DNS 쿼리 속도(DNS Query Speed)와 동시성(Concurrency)에 대한 논의가 이루어졌다. 특히, 100 QPS(Queries Per Second)는 느린 속도이며, TCP 연결을 통한 벌크 쿼리(Bulk Query)를 활용하여 성능을 개선할 수 있다는 의견이 제시되었다.
DNS의 보안 및 활용 가능성
본 프로젝트는 DNS TXT 레코드의 무궁무진한 활용 가능성(Versatility)을 보여준다. 댓글에서는 DNS를 악성 코드 은닉에 활용하는 사례에 대한 언급과 함께, TXT 레코드의 보안 취약점(Security Vulnerability)에 대한 우려가 제기되었다. 또한, DNS를 데이터 저장소(Data Storage)로 활용하는 방식에 대한 다양한 아이디어가 제시되었으며, DNS의 잠재적 위험성에 대한 경고도 있었다.