DNS Intro | Docs | TitaniumGuard

DNS Intro

DNS Documentation

This section contains product documentation for TitaniumGuard DNS.

For authoritative zone setup, see DNS Zone Hosting. For policy syntax and examples, see DNS Rule Engine Policy.

Run with Docker

The DNS image is published as:

  • ghcr.io/titaniumguardlabs/source/dns:latest

The DNS process accepts --config <path> (or first positional path). Without an explicit path, it loads config.json from the current directory when present; otherwise it starts with local defaults. A missing explicit path and an invalid configuration fail startup.

The no-config profile listens on 127.0.0.1:5353, with health endpoints on 127.0.0.1:8081. It permits recursion only for loopback clients and disables audit logging. Query it with dig -p 5353 @127.0.0.1 example.com. The --allow-default-config flag remains accepted for compatibility but is no longer required for this local mode.

1. Create a local config file

Example ./dns-config.json:

{
  "listen_addr": "0.0.0.0:8080",
  "resolvers": ["1.1.1.1", "8.8.8.8"],
  "zones": []
}

2. Run container and mount config

Publish both UDP and TCP for DNS queries:

docker run --rm \
  -p 8080:8080/udp \
  -p 8080:8080/tcp \
  -v "$PWD/dns-config.json:/etc/titaniumguard/dns-config.json:ro" \
  ghcr.io/titaniumguardlabs/source/dns:latest \
  --config /etc/titaniumguard/dns-config.json --allow-open-policy

3. Query it

dig @127.0.0.1 -p 8080 example.com
dig @127.0.0.1 -p 8080 example.com +tcp

If UDP queries time out but TCP works, check that -p <host>:<container>/udp is present.