甲壳兽 - 用于家庭实验室的 Gleam DNS 服务器
一个自托管的 DNS 服务器,适用于家庭实验室,使用 Gleam 编写。 armadillo.showcase.mp4 只需在路由器上配置一次作为 DNS 解析器,网络上的每个设备就会自动解析您的本地域名。工作原理 当 DNS 查询到达时,服务器首先检查其本地记录存储。如果存在匹配的记录,它会立即以配置的 IP 响应。如果没有匹配的记录,该查询会被转发到可配置的上游解析器,响应将根据 TTL 缓存,并返回给客户端。本地记录存储在 DNS 区域文件中,并在启动时加载到 ETS 中。运行时的所有查询解析都仅通过 ETS 进行,查询处理期间不会读取区域文件。容器镜像 可在 ghcr.io/vshakitskiy/armadillo:latest 获取。变量 默认 说明 DNS_PORT 53 DNS 服务器监听的端口 DNS_UPSTREAM 8.8.8.8 用于未知域名的上游解析器 DNS_TTL 300 区域记录的默认 TTL(以秒为单位) DNS_SOA_MINIMUM 3600 负缓存的 SOA 最小 TTL(以秒为单位) API_PORT 3000 Web UI 和 REST API 的端口 API_SECRET_KEY_BASE 随机密钥 用于签署会话 cookie 的秘密 ZONE_FILE /data/local.zone DNS 区域文件的路径 将一个卷挂载到 /data 以在重启中持久化区域文件。如果不存在,该区域文件会自动创建。部署指南 可以在 examples/ 目录中找到部署指南。Podman - 通过 Podman Quadlet 和 Caddy 作为反向代理的 systemd 服务。域名命名 该服务器接受任何域名字符串。也就是说,避免使用 .local。它保留用于 mDNS/Bonjour(RFC 6762),而 Apple 设备不会将 .local 查询发送到单播 DNS 服务器。常见的替代品是 .lan 或 .internal。贡献 我将很高兴收到任何贡献和反馈。欢迎提问或提交拉取请求!该项目有三个包:server 运行 DNS 解析器和 HTTP API,client 是 Web UI,shared 包含两个都使用的模块。每个包独立开发,在 server/ 中运行 gleam run,或在 client/ 中运行 gleam run -m lustre/dev。为了在开发期间本地管理环境变量,推荐使用 direnv。要在本地绑定到端口 53 而无需 sudo,请在 BEAM 二进制文件上运行 setcap: # 找到二进制文件: $( which erl ) -noshell -eval ' io:format(
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡