惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

I
InfoQ
博客园_首页
美团技术团队
M
MIT News - Artificial intelligence
人人都是产品经理
人人都是产品经理
Blog — PlanetScale
Blog — PlanetScale
H
Help Net Security
J
Java Code Geeks
T
Tailwind CSS Blog
Jina AI
Jina AI
量子位
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
G
Google Developers Blog
爱范儿
爱范儿
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
宝玉的分享
宝玉的分享
小众软件
小众软件
MongoDB | Blog
MongoDB | Blog
博客园 - 三生石上(FineUI控件)
L
LangChain Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
V
Visual Studio Blog
博客园 - Franky
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知

Hacker News

GitHub - SeanFDZ/macmind: Single-layer transformer in HyperTalk for the classic Macintosh Show HN: Agent-cache – Multi-tier LLM/tool/session caching for Valkey and Redis Bonsai 1-bit WebGPU - a Hugging Face Space by webml-community Moving a large-scale metrics pipeline from StatsD to OpenTelemetry / Prometheus GitHub - Nightmare-Eclipse/RedSun: The Red Sun vulnerability repository GitHub - SethPyle376/hiraeth: Local AWS emulator focused on fast integration testing, with SQS support, SQLite-backed state, and a debug-friendly web UI. GitHub - macOS26/Agent: Any AI, replaces Claude Code, Cursor, OpenClaw. Over 18 LLM providers (Claude, OpenAI, Gemini, Ollama, Zai, HF, Qwen) wired into a native Mac app that writes code, builds Xcode projects, bumps versions, manages git, automates Safari, use AppleScript, JS or Accessibility, extend Agent! w/ MCP Servers, run tasks from your iPhone via Messages. YouTube now lets you turn off Shorts I Made a Terminal Pager Burgers | マクドナルド公式 Commands — HackerNews CLI documentation ChatGPT for Excel PiCore - Raspberry Pi Port of Tiny Core Linux Live Nation illegally monopolized ticketing market, jury finds Google Broke Its Promise to Me. Now ICE Has My Data. Founding Engineer at Adaptional | Y Combinator CRISPR takes important step toward silencing Down syndrome’s extra chromosome GitHub - saffron-health/libretto: The AI toolkit for building reliable browser automations US v. Heppner (S.D.N.Y. 2026) no attorney-client privilege for AI chats [pdf] Retrofitting JIT Compilers into C Interpreters IPv6 – Google The Accursèd Alphabetical Clock Cybersecurity Looks Like Proof of Work Now Fragments: April 14 Cal.com Goes Closed Source: Why AI Security Is Forcing Our Decision | Cal.com - Scheduling Software for Online Bookings Laravel raised money and now injects ads directly into your agent When moving fast, talking is the first thing to break Too much Discussion of the XOR swap trick – Heather Cafe Introduction to Spherical Harmonics for Graphics Programmers The Grand Line
GitHub - vshakitskiy/armadillo: A DNS server in Gleam
2026-06-28 · via Hacker News

A self-hosted DNS server for homelab use, written in Gleam.

armadillo.showcase.mp4

Configure it once on your router as the DNS resolver and every device on the network resolves your local domains automatically.

How it works

When a DNS query arrives, the server checks its local record store first. If a matching record exists, it responds immediately with the configured IP. If no record matches, the query is forwarded to a configurable upstream resolver, the response is cached by TTL, and returned to the client.

Local records are stored in a DNS zone file and loaded into ETS on startup. All query resolution at runtime goes through ETS only, the zone file is never read during query handling.

Container image

Available at ghcr.io/vshakitskiy/armadillo:latest.

Variable Default Description
DNS_PORT 53 Port the DNS server listens on
DNS_UPSTREAM 8.8.8.8 Upstream resolver for unknown domains
DNS_TTL 300 Default TTL for zone records in seconds
DNS_SOA_MINIMUM 3600 SOA minimum TTL for negative caching in seconds
API_PORT 3000 Port for the web UI and REST API
API_SECRET_KEY_BASE random key Secret used to sign session cookies
ZONE_FILE /data/local.zone Path to the DNS zone file

Mount a volume to /data to persist the zone file across restarts. The zone file is created automatically if it does not exist.

Deployment guides

Deployment guides can be found in the examples/ directory.

  • Podman — systemd service via Podman Quadlet with Caddy as a reverse proxy.

Domain naming

The server accepts any domain string. That said, avoid .local. It is reserved for mDNS/Bonjour (RFC 6762) and Apple devices will not send .local queries to a unicast DNS server. .lan or .internal are common alternatives.

Contributing

I will be glad to receive any contributions and feedbacks. Issues or pull requests are welcomed!

The project has three packages: server runs the DNS resolver and HTTP API, client is the web UI, and shared contains modules used by both. Each package is developed independently, run gleam run in server/ and gleam run -m lustre/dev in client/.

For managing environment variables locally during development, direnv is recommended.

To bind to port 53 locally without sudo, run setcap on the BEAM binary:

# Find the binary:
$(which erl) -noshell -eval 'io:format("~s~n",[os:find_executable("beam.smp")]),halt().'
# > /path/to/beam.smp

sudo setcap cap_net_bind_service=+ep /path/to/beam.smp

Resolving with VPN

Personal notes for if I run into DNS issues with a VPN again.

When running a VPN like vless in proxy or tun mode, it's very important to make sure the VPN resolves domains via the correct DNS. Asuming the router's IP 192.168.1.1 is where the DNS server is configured:

  1. Add the router as a DNS server and route LAN IPs directly for xray:
  1. Tag the local DNS server and route private IPs through it for sing-box: