# DNS mit Hetzner setzen

Einmal ein Hetzner-Cloud-API-Token verbinden. MainPath schreibt A- und CNAME-Einträge in deine DNS-Zonen.

> Source: https://www.mainpath.ai/de/docs/dns-hetzner/

Wenn die DNS-Zone deiner Domain in der [Hetzner Console](https://console.hetzner.com/) liegt, musst du die Einträge nicht mehr von Hand abtippen. Du hinterlegst ein API-Token unter **Anbindungen**; sobald ein Projekt Domains hat, schreibt MainPath die Einträge in die passende Zone.

Manuelles DNS bleibt möglich. Siehe [DNS-Eintrag konfigurieren]({{< relref "domain-how-to" >}}).

## API-Token in der Hetzner Console

Das ist die **Hetzner Cloud DNS API** (`api.hetzner.cloud/v1/zones`), nicht die abgelöste DNS-Console unter `dns.hetzner.com`. Tokens aus der alten DNS-Console funktionieren nicht.

1. In der [Hetzner Console](https://console.hetzner.com/) das Projekt öffnen, in dem die DNS-Zonen liegen.
2. Unter **Security → API tokens** ein Token mit **Read & Write** anlegen.
3. Das Token kopieren. Es wird nur einmal angezeigt.

Ein Token gilt immer nur für **ein** Console-Projekt. Am saubersten ist ein eigenes Projekt nur mit DNS-Zonen, damit das Token keine Server verwalten kann.

Die bestehende Hetzner-Cloud-Anbindung unter **Server** wird **nicht** automatisch für DNS wiederverwendet. DNS bekommt eine eigene Kachel unter **Anbindungen**, auch wenn du denselben Token-Text dort einfügst.

Die Domain muss Hetzner-Nameserver nutzen, zum Beispiel `hydrogen.ns.hetzner.com`, `oxygen.ns.hetzner.com` und `helium.ns.hetzner.de`.

## Anbindung in MainPath

1. Öffne **Anbindungen** und **Anbindung hinzufügen**.
2. Wähle unter **DNS** die Kachel **Hetzner DNS**.
3. Füge das API-Token ein und speichere. MainPath prüft, ob das Token gültig ist und welche Zonen es sieht.

Mehrere Hetzner-DNS-Zugänge in einer Organisation sind möglich, etwa je Console-Projekt. Gehört eine Domain zu mehreren Zonen, nimmt MainPath die treffendste.

## Was gesetzt wird

MainPath übernimmt dieselben Hosts, die du unter **Domains** siehst.

- Einträge werden nur gesetzt, wenn schon eine echte Server-Adresse da ist.
- Bestehende Einträge desselben Namens und Typs werden aktualisiert, nicht die ganze Zone ersetzt.
- Änderungen kommen schnell an.

```mermaid
flowchart LR
  org["Hetzner-DNS-Anbindung"]
  domains["Domains in MainPath"]
  zone["Hetzner-Zone"]
  server["Dein Server"]
  org --> zone
  domains -->|"A / CNAME"| zone
  zone --> server
```

Nach dem Speichern eines Projekts versucht MainPath, fehlende oder abweichende Einträge anzugleichen. Den Prüfstatus siehst du in der Domain-Übersicht.

## SSL über DNS-01 (optional)

Erreicht Let's Encrypt den Server nicht (kein öffentliches HTTP/443, Firewall, interne IP), öffne die Details dieser Anbindung und hake die betroffenen Domains an. MainPath schreibt dann den TXT-Eintrag `_acme-challenge` in diese Zone. Ohne Haken bleibt die bisherige TLS-Prüfung (ALPN) über den Server.

## Fehlersuche

- **Token ungültig**: In der Hetzner Console ein **Read & Write**-Token für das Projekt mit den DNS-Zonen anlegen. Ein Token aus der alten DNS-Console oder nur mit Leserechten reicht nicht.
- **Kein Eintrag bei Hetzner**: Die Domain liegt in keinem Projekt, das dieses Token sieht. Projekt oder Zonennamen prüfen.
- **Zone sichtbar, Domain nicht erreichbar**: Die Zone existiert in der Console, aber die Nameserver der Domain zeigen woanders hin. MainPath markiert das in den Anbindungs-Details und unter Domains. Nameserver beim Registrar auf die Hetzner-Server (`*.ns.hetzner.com` / `*.ns.hetzner.de`) umstellen.
- **Status in MainPath noch rot**: DNS braucht oft ein paar Minuten, oder der Server hat noch keine bekannte Adresse.

## Siehe auch

- [Domain-Setup]({{< relref "domain" >}})
- [DNS-Eintrag konfigurieren]({{< relref "domain-how-to" >}})
- [Anbindungen]({{< relref "connections" >}})
- [Hetzner]({{< relref "hetzner-tutorial" >}})

