# NAPTR Resource Record

Mit NAPTR (Naming Authority Pointer) Resource Records werden DNS-Namen Adressen von Servern und weitere Informationen zugeordnet.

## Hintergrund

Traditionell werden über den DNS-Dienst Namen in IP-Adressen aufgelöst. Man sendet einen Namen zu einem DNS-Server und erhält eine IP-Adresse zurück (hinter der sich dann meist ein Server verbirgt). Dieses einfache und bewährte Verfahren ist heute in vielen Fällen unzureichend, da die Anfragenden oft weitere Information benötigen.
NAPTR-Records liefern diese zusätzlichen Informationen auf sehr flexible Art und Weise. Unter anderem wird das Protokoll angegeben, das der Server verwendet. Über die Gewichtung kann, falls mehrere NAPTR-Records zu einem Namen existieren, eine Priorisierung festgelegt werden. Außerdem kann, falls mehrere NAPTR-Records gleicher Priorität zu einem Namen existieren, per Präferenz eine Lastverteilung erreicht werden.
Der NAPTR-Record-Typ kann damit als eine Erweiterung des klassischen A-Records (oder auch SRV-Records) aufgefasst werden.

## Aufbau

Die Struktur von NAPTR-Records ist kompliziert, da eine Vielzahl von Fällen abgedeckt werden muss. Eine Hauptschwierigkeit besteht darin, dass oft nicht direkt ein Server-Name zurückgeliefert wird, sondern ein Regulärer Ausdruck, der zunächst aufgelöst werden muss.
Einfaches Beispiel eines NAPTR-Records (ohne regulären Ausdruck):
Links steht hier ein DNS-Name und ganz rechts ein Verweis auf den Namen eines Servers, der den gewünschten Dienst bereitstellt. Das "A" bedeutet: Der ganz rechts stehende Ausdruck "prodserver.example.com" ist ein A-Record. Um die IP-Adresse zu erhalten, ist damit noch ein weiterer Schritt erforderlich: Dieser A-Record muss aufgelöst werden (einige Name-Server wie BIND erledigen das aber selbständig und liefern die IP-Adresse in der Additional-Section mit).

### DNS-Name

    Aufzulösender Name (auf den ggf. der reguläre Ausdruck angewendet wird)

### IN

    Internet

### NAPTR

    Naming Authority Pointer (Record-Typ)

### Priorität

    Einträge mit niedrigeren Nummern müssen zuerst verwendet werden (vgl. MX-Priorität)

### Präferenz

    Einträge mit niedrigeren Nummern sollen stärker gewichtet werden (Gewichtung zwischen zwei Einträgen mit gleicher Priorität)

### Flag

    Definiert den Record-Typ, der zurückgeliefert wird

### Dienst

    gibt den Dienst oder das Protokoll an, den/das der Server bereitstellt

### Regulärer Ausdruck

    Dieser wird auf den DNS-Namen angewandt

### Ersetzung

    Zeichenkette, die vom regulären Ausdruck verwendet werden kann, oder "."
Zurzeit sind folgende Flags definiert:
* A – das Ergebnis ist ein A-Record
* S – das Ergebnis ist ein SRV-Record
* U – das Ergebnis ist ein URI
* leer – das Ergebnis ist ein NAPTR-Record.
Um die IP-Adresse des gesuchten Servers zu erhalten, muss also in jedem Fall mindestens eine weitere DNS-Anfrage gestellt oder eine URL aufgelöst werden. Bei leerem Flag ist eine weitere NAPTR-Anfrage erforderlich. Man spricht in diesem Fall von einer Verkettung.

## Beispiel mit regulärem Ausdruck

Das oben aufgeführte Beispiel wird durch Einbeziehung eines regulären Ausdrucks realisiert:
Der reguläre Ausdruck entspricht einer Posix Extended Regular Expression. Das erste im regulären Ausdruck vorkommende Zeichen (hier "!") dient als Begrenzer. Es ist sinnvoll als Begrenzer z. B. das "!" anstelle des gewöhnlich genutzten Begrenzers "/" zu wählen, da URLs häufig bereits "/" beinhalten und der reguläre Ausdruck so einfacher zu lesen ist. Im ersten von den Begrenzern definierten Feld (^.*$) befinden sich Informationen, die definieren, welche Teile des Eingangsstrings (dienst.example.com.) durch den rechts vom Begrenzer stehenden String (prodserver.example.com) ersetzt werden sollen. "^.*$" bedeutet: Es soll alles ersetzt werden.