49 lines
1.6 KiB
Markdown
49 lines
1.6 KiB
Markdown
# DNS operations
|
|
|
|
HexaHost GameCloud stores desired DNS records in PostgreSQL (`server_dns_records`) and synchronizes them through a provider abstraction in `@hexahost/dns`.
|
|
|
|
## Providers
|
|
|
|
| Provider | `DNS_PROVIDER` | Use case |
|
|
|----------|----------------|----------|
|
|
| Local metadata | `local` (default) | Development — records exist only in the database |
|
|
| RFC2136 dynamic updates | `rfc2136` | Production with BIND or compatible authoritative DNS |
|
|
|
|
## Production (RFC2136)
|
|
|
|
Set on API and worker hosts:
|
|
|
|
```env
|
|
DNS_PROVIDER=rfc2136
|
|
GAME_BASE_DOMAIN=play.example.net
|
|
EDGE_PUBLIC_HOST=203.0.113.10
|
|
EDGE_LISTEN_PORT=25565
|
|
RFC2136_SERVER=ns1.internal.example.net
|
|
RFC2136_KEY_NAME=gamecloud-updater.
|
|
RFC2136_KEY_SECRET=base64-encoded-secret
|
|
RFC2136_TTL=300
|
|
```
|
|
|
|
Requirements:
|
|
|
|
- `nsupdate` (bind9-utils) installed on API/worker hosts
|
|
- TSIG key authorized for A and SRV updates on `*.play.example.net`
|
|
- Edge gateway reachable at `EDGE_PUBLIC_HOST:EDGE_LISTEN_PORT`
|
|
|
|
## Record layout
|
|
|
|
For each Java server with join slug `my-server-abc123`:
|
|
|
|
- `A` record: `my-server-abc123.play.example.net` → edge gateway IP
|
|
- `SRV` record: `_minecraft._tcp.my-server-abc123.play.example.net` → edge hostname/port
|
|
|
|
## Worker sync
|
|
|
|
The worker runs a DNS sync tick every 60 seconds (`pushPendingDnsRecords`). Records start as `PENDING` when `DNS_PROVIDER=rfc2136` and move to `ACTIVE` or `FAILED`.
|
|
|
|
## Troubleshooting
|
|
|
|
1. Check `server_dns_records.status` and `lastError` in PostgreSQL.
|
|
2. Run `nsupdate -y` manually with the generated script from logs.
|
|
3. Verify TSIG key name ends with `.` if your nameserver expects FQDN form.
|