Как запустить Doom через DNS-записи и зачем это вообще нужно

09 апр 2026

Репозиторий давно не обновлялся

Последнее обновление было 6 месяцев назад.

827
39
5
6 месяцев

Когда кажется, что мы видели уже все способы запустить Doom — на тестах на беременность, внутри осциллографов или в меню принтеров — появляется проект, который заставляет вспомнить основы сетевых протоколов. Речь о doom-over-dns. Идея здесь балансирует на грани безумия и инженерного изящества: автор решил использовать DNS TXT-записи как облачное хранилище для целой игры.

Demo

В чем соль задумки

Обычно DNS (Domain Name System) просто переводит понятные имена сайтов в IP-адреса. Но стандарт позволяет хранить в TXT-записях произвольный текст. Разработчик этого проекта задался вопросом: если Cloudflare позволяет бесплатно создавать тысячи таких записей и кэширует их по всему миру, почему бы не превратить их в распределенную файловую систему?

Технически это выглядит так: берется классический WAD-файл (архив с ресурсами игры), сжимается и нарезается на мелкие куски. Каждый кусок упаковывается в отдельную TXT-запись. При запуске скрипт на PowerShell просто опрашивает DNS-сервер, собирает эти кусочки прямо в оперативной памяти и «скармливает» их игровому движку.

Как это устроено внутри

Проект состоит из двух частей: загрузчика (Publisher) и самого игрового клиента.

Реклама

Для реализации пришлось немного «допилить» движок managed-doom. В оригинале он использует Native AOT, который не дружит с динамической загрузкой из памяти. Автор форкнул его, перевел на .NET 8 и научил работать с потоками данных напрямую, минуя жесткий диск.

Интересные детали реализации:

  • Никаких файлов на диске. Игра загружается через Assembly.Load() и работает исключительно в RAM.
  • Обход лимитов. Бесплатный тариф Cloudflare позволяет хранить около 185 записей в одной зоне. Чтобы уместить целый WAD-файл (а это почти 2000 записей), автор реализовал «страйпинг» — распределение данных по нескольким доменам сразу.
  • Устойчивость. Если интернет моргнул во время заливки игры в облако, скрипт умеет возобновлять загрузку по хешам, не перекачивая всё заново.

Инструкция по запуску

Чтобы повторить этот трюк, понадобится Windows 10/11 с поддержкой OpenGL. На MacOS проект не заведется из-за специфики работы с графическими библиотеками.

Сначала нужно подготовить движок и залить данные (если вы хотите использовать свои домены):

# Собираем движок
cd managed-doom
dotnet publish ManagedDoom/ManagedDoom.csproj -c Release -f net8.0 -o publish-out

# Настраиваем доступ к Cloudflare
Import-Module .\TXTRecords\TXTRecords.psm1
Set-CFCredential -ApiToken (Read-Host 'Ваш токен')

# Публикуем игру в DNS
.\Publish-DoomOverDNS.ps1 `
    -PublishDir 'managed-doom\publish-out' `
    -WadPath 'DOOM1.WAD' `
    -Zones @('your-domain.com')

После того как записи разойдутся по серверам (пропагация может занять время), запуск превращается в одну команду:

.\Start-DoomOverDNS.ps1 -PrimaryZone 'your-domain.com'

Если не хочется ждать обновления локального кэша DNS, можно принудительно указать публичный резолвер через параметр -DnsServer '1.1.1.1'.

Практическая ценность или просто фан

Конечно, никто не будет всерьез распространять софт через DNS-записи. Это медленно, неудобно и превращает отладку в кошмар. Однако проект отлично демонстрирует две вещи.

Во-первых, возможности PowerShell 7+ и .NET по работе с памятью и сетевыми запросами. Загрузить DLL напрямую в память и выполнить её — полезный навык для понимания того, как работают современные системы защиты и, наоборот, эксплойты.

Во-вторых, это крутой пример нестандартного использования инфраструктуры. Использование DNS как бесплатного CDN с бесконечным временем жизни кэша — это архитектурный хак, который в других сценариях (например, для хранения очень мелких конфигураций или флагов) может оказаться вполне рабочим.

Кому стоит заглянуть в репозиторий

Проект будет интересен тем, кто копается во внутренностях .NET и хочет посмотреть на живой пример работы с Resolve-DnsName или потоковой обработкой данных. Ну и, конечно, всем любителям Doom, которые коллекционируют самые странные способы запуска этой легендарной игры.

Единственный минус — в текущей версии нет звука. Автор использовал заглушки NullSound, чтобы не усложнять и без того громоздкую передачу данных через текстовые записи. Но, честно говоря, когда играешь в Doom, который прилетает к тебе по кусочкам из TXT-записей, тишина кажется вполне уместной.

Попробовать проект можно здесь: resumex/doom-over-dns.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.