*Ma*nage *ma*naged *DNS* services with this tool.
Schlundtech and probably soon, also Hetzner Cloud DNS too.

Paul-Dieter Klumpp 8902e18090 Initialize schlundtech-dns CLI with zone and record management hace 1 semana
.opencode 8902e18090 Initialize schlundtech-dns CLI with zone and record management hace 1 semana
cmd 8902e18090 Initialize schlundtech-dns CLI with zone and record management hace 1 semana
internal 8902e18090 Initialize schlundtech-dns CLI with zone and record management hace 1 semana
maister @ 65459dcf65 8902e18090 Initialize schlundtech-dns CLI with zone and record management hace 1 semana
tools 8902e18090 Initialize schlundtech-dns CLI with zone and record management hace 1 semana
.gitignore 8902e18090 Initialize schlundtech-dns CLI with zone and record management hace 1 semana
.gitmodules 8902e18090 Initialize schlundtech-dns CLI with zone and record management hace 1 semana
AGENTS.md 8902e18090 Initialize schlundtech-dns CLI with zone and record management hace 1 semana
README.md 8902e18090 Initialize schlundtech-dns CLI with zone and record management hace 1 semana
go.mod 8902e18090 Initialize schlundtech-dns CLI with zone and record management hace 1 semana
go.sum 8902e18090 Initialize schlundtech-dns CLI with zone and record management hace 1 semana
main.go 8902e18090 Initialize schlundtech-dns CLI with zone and record management hace 1 semana
opencode.json 8902e18090 Initialize schlundtech-dns CLI with zone and record management hace 1 semana

README.md

schlundtech-dns

A command line tool for Schlundtech DNS. List your zones, inspect their records, and set them — from the terminal, no web interface.

Build

go build -o schlundtech-dns .

Configure

Set your credentials once:

export SCHLUNDTECH_USER='your-user'
export SCHLUNDTECH_PASSWORD='your-password'
export SCHLUNDTECH_CONTEXT='10'

SCHLUNDTECH_CONTEXT is the context ID Schlundtech gave you when you applied for gateway access. Every public implementation for Schlundtech uses 10, so that is the value to try first — but yours is authoritative.

If your account has second-factor authentication enabled, also set SCHLUNDTECH_TOKEN. To talk to the demo system instead of your live zones, set SCHLUNDTECH_ENDPOINT=https://demo.autodns.com/gateway/.

Check that it works:

schlundtech-dns zones

Use

List your zones

schlundtech-dns zones

Look at a zone's records

schlundtech-dns records list example.com
schlundtech-dns records list example.com --type TXT

Set a record

schlundtech-dns records set example.com --name @ --type A --value 203.0.113.10
schlundtech-dns records set example.com --name @ --type TXT --value 'v=spf1 -all'

@ is the zone apex, www would be www.example.com. --ttl defaults to the TTL the record already has.

A name and type can hold several values — pass --value more than once. Setting any value replaces all existing ones for that name and type, so there is nothing to delete first.

Dry run

Every write touches public DNS and propagates within seconds. Preview first:

schlundtech-dns records set example.com --name @ --type A --value 203.0.113.10 --dry-run

Remove a record

Without --value this removes every value at that name and type:

schlundtech-dns records delete example.com --name @ --type TXT --value 'v=spf1 -all' --dry-run
schlundtech-dns records delete example.com --name @ --type TXT --value 'v=spf1 -all'

Pipe-friendly output

Every command takes --output table|json. table is the default.

schlundtech-dns records list example.com --output json | jq '.[].value'

Errors always go to stderr, so piping stdout stays clean.

Record types

There is no hardcoded list — --type takes whatever the gateway understands. TXT, A, AAAA, CNAME, MX and the rest all work the same way.

Two notes:

  • NS and SOA are not worth touching. Changing them breaks zone delegation.
  • MX is managed by Schlundtech alongside their mail routing. Editing it by hand can break mail delivery for the domain.

How it talks to the gateway

The gateway is InterNetX's AutoDNS XML API, reached at gateway.schlundtech.de. Two things are worth knowing if you read the code:

  • The gateway answers HTTP 200 even when a task fails. The error is in the response body, not the status line. The tool parses the body and reads the error code from there; a non-2xx status only ever means a wrong path.
  • A write is a remove and an add in one task. Changing a record sends both halves together, so a rejected change leaves the zone untouched.

The gateway allows three requests per second; the tool spaces its calls out accordingly.

References