## DNS 版 Doom:通过 DNS 记录运行经典射击游戏
开发者 Adam Rice 实现了在 Cloudflare 中仅通过 DNS TXT 记录运行 Doom 共享版。游戏被压缩成 1964 个片段,通过公共 DNS 查询加载,并在 PowerShell 7 中运行,而不将 WAD 文件写入磁盘。.NET 游戏引擎 DLL 被直接加载到内存。该项目通过使用 DNS 作为二进制数据的传输方式,绕过了文件存储限制。
安装和启动
要运行它,需要 PowerShell 7 和具有编辑 DNS 区域权限的 Cloudflare API 令牌。
- 安装 PowerShell 7:
winget install Microsoft.PowerShell - 设置 Cloudflare 凭据:使用 TXTRecords 模块和
Set-CFCredential命令。 - 启动游戏:
\.\Start-DoomOverDNS.ps1 -PrimaryZone 'example.com'
脚本会自动通过 Resolve-DNSName 加载数据。免费 Cloudflare 区域可容纳 185 个片段;Pro/Business/Enterprise 区域最多可容纳 3400 个。WAD 文件需要约 1199 个片段。
# 使用多个区域的免费账户启动示例
.\Start-DoomOverDNS.ps1 -Zones @('zone1.com', 'zone2.com', 'zone3.com')
在 DNS 区域中放置数据
该项目将压缩的 WAD 分割成 TXT 记录。对于免费账户,需要多个域名——模块会自动分发片段。在 Pro 区域中,整个游戏都能容纳。
恢复下载:
Publish-TXTStripe -Resume命令会检查片段哈希。- 从最后一个有效块继续,避免重复传输。
忽略 TXT 记录限制(RFC 1035):将 DNS 用作分布式存储,利用 Cloudflare 边缘节点的全球缓存。
| 区域类型 | 分片数 | 足够运行 Doom |
|-----------|-----------|-----------------|
| 免费 | 185 | 否(需要 7+ 个区域) |
| 专业版 | 3400 | 是(完整游戏) |
压缩和解压的技术细节
WAD 文件经过压缩以最小化 TXT 记录大小。PowerShell 脚本在执行过程中即时解压数据。没有本地存储——所有操作都在内存中进行。
TXTRecords 模块的关键组件:
Publish-TXTStripe:发布片段并支持恢复。Set-CFCredential:设置 API 令牌。- 与
Resolve-DNSName集成,用于公共查询。
该项目展示了 DNS 在传输任意二进制数据方面的能力,绕过了典型的协议限制。
要点
- Doom 无需磁盘文件运行:WAD 和 DLL 从 DNS TXT 加载到内存。
- WAD 需要约 1199 个片段;免费 Cloudflare 区域仅 185 个片段。
- 支持通过片段哈希恢复下载。
- 使用 PowerShell 7 和公共 DNS 查询,无需自定义服务器。
- Pro 账户可扩展:一个区域容纳完整游戏。
— Editorial Team
暂无评论。