Instant DNS for self-hosted email sandboxes.
vsx.email is a DNS server that gives any public IPv4 address an instant subdomain.
No signup, no config, no waiting for propagation.
203.0.113.10 → 1mzhr2y.vsx.email We built this for VaultSandbox — a Docker container that receives email. The container needs a domain with MX records and a TLS certificate. This DNS service provides both without any setup.
203.0.113.10 → 1mzhr2y GET http://{ip}/.well-known/vaultsandbox 1mzhr2y.vsx.email → A and MX records
If you're running VaultSandbox, the probe endpoint is handled automatically. No setup required.
If the probe fails, you get NXDOMAIN. No gateway running = no DNS.
Before you get ideas: these domains are hardcoded to be useless for sending email.
Every subdomain returns these records:
| Record | Value | Effect |
|---|---|---|
SPF | v=spf1 -all | All outbound email fails SPF |
DMARC | p=reject; sp=reject | Receiving servers reject spoofed mail |
DKIM | v=DKIM1; p= | Empty key — no valid signatures possible |
Gmail, Outlook, Yahoo, and any compliant mail server will reject email
claiming to be from *.vsx.email. These domains can receive mail, not send it.
It's easier to buy a $10 .xyz domain.
{base36}.vsx.email resolves — foo.{base36}.vsx.email returns NXDOMAIN*.vsx.email, nothing elsevsx.email| Type | Value | TTL | Notes |
|---|---|---|---|
A | Bunny CDN IP | 60s | CNAME flattening for landing page |
MX | 0 . | 300s | Null MX (RFC 7505) — no mail accepted |
TXT | v=spf1 -all | 300s | Hard fail all senders |
NS | ns1.vsx.email, ns2.vsx.email | 300s |
{base36}.vsx.emailOnly returned if probe succeeds:
| Type | Value | TTL |
|---|---|---|
A | Your decoded IP | 300s |
MX | 10 {base36}.vsx.email. | 300s |
TXT (SPF) | v=spf1 -all | 300s |
CAA | 0 issue "letsencrypt.org" | 300s |
For any valid gateway at {base36}.vsx.email:
| Query | Type | Value |
|---|---|---|
_dmarc.{base36}.vsx.email | TXT | v=DMARC1; p=reject; sp=reject; adkim=s; aspf=s |
*._domainkey.{base36}.vsx.email | TXT | v=DKIM1; p= |
_mta-sts.{base36}.vsx.email | TXT | v=STSv1; id=20231025; |
IPv4 → 32-bit integer → base36 string.
IP Address Base36 Domain
───────────────────────────────────────
203.0.113.10 1mzhr2y 1mzhr2y.vsx.email
8.8.8.8 2h4s9s 2h4s9s.vsx.email
1.2.3.4 a2f44 a2f44.vsx.email
Max 7 characters. Lowercase alphanumeric only.
IPv4 only. IPv6 would make subdomains too long.
GET https://api.vsx.email/check-in
Called by gateways at boot time to verify connectivity.
{
"status": "ready",
"ip": "203.0.113.10",
"domain": "1mzhr2y.vsx.email",
"message": "You are live! DNS is active."
} {
"status": "error",
"ip": "203.0.113.10",
"error": "Probe failed. Could not reach your gateway on port 80.",
"action": "Please ensure port 80 is forwarded to your VaultSandbox container..."
} To get DNS resolution, your server must:
GET http://{ip}/.well-known/vaultsandbox with HTTP 200/.well-known/vaultsandbox responds on port 80 without redirecting.
These will never resolve:
| Range | Reason |
|---|---|
0.0.0.0/8 | Current network |
10.0.0.0/8 | Private (RFC 1918) |
100.64.0.0/10 | CGNAT (RFC 6598) |
127.0.0.0/8 | Loopback |
169.254.0.0/16 | Link-local |
172.16.0.0/12 | Private (RFC 1918) |
192.168.0.0/16 | Private (RFC 1918) |
224.0.0.0/4 | Multicast |
240.0.0.0/4 | Reserved |
No analytics. We don't track users or keep long-term logs.
# Resolve the root domain
dig vsx.email A +short
# Check MX record
dig vsx.email MX +short
# See SPF
dig vsx.email TXT +short
# Test an invalid subdomain (should be NXDOMAIN)
dig invalid-test.vsx.email A
# Test a private IP (returns NXDOMAIN)
# 10.0.0.1 = base36 "2rvxtt"
dig 2rvxtt.vsx.email A Those only provide A records for HTTP/HTTPS. We provide A (for the API and ACME challenges) and MX (for SMTP). The other records (SPF, DMARC, DKIM) aren't needed for receiving email — they exist specifically to prevent sending.
Technically you can if you expose the probe endpoint. But please don't — this service exists for VaultSandbox users.
Your domain changes too. {new-ip}.vsx.email will work as soon as you pass the probe.
We're applying. This matters for cookie isolation and Let's Encrypt rate limits.