Kapitel 13. Adress-Auflösung

Zusätzliche Informationen sind hier zu finden

Address-Auflösung & Ziel-Adressen-Auswahl

Die Auflösung von Namen zu einer IPv4- bzw. IPv6-Adresse wird üblicherweise durch die Benutzung einer libc resolver Bibliothek durchgeführt. Dazu wird normalerweise die Funktion getaddrinfo benutzt. Im Fall, dass mehr als eine IPv6-Adresse zurückgegeben wird, soll nach RFC 3484 / Default Address Selection for Internet Protocol version 6 eine Sortierung angewandt werden, die optional auch konfiguriert werden kann.

Die ”Magie” ist durch die Datei /etc/gai.conf konfigurierbar (welche fehlt oder leer ist, solange Standardwerte gelten sollen). Die vorgegebene Sortierung ist üblicherweise in der Dokumentation (z.B. /usr/share/doc/glibc-common/gai.conf) oder im Manual ”man gai.conf” zu sehen.

Für die Kontrolle der Sortierung via benutzerdefinierter Konfiguration ist für Tests folgendes notwendig:

$ dig +short aaaa st1.bieringer.de
2001:4dd0:ff00:834::2
2a01:238:423d:8800:85b3:9e6b:3019:8909 

precedence  ::1/128       50            # default
precedence  ::/0          40            # default
precedence  2002::/16     30            # default
precedence ::/96          20            # default
precedence ::ffff:0:0/96  10            # default
precedence 2001:4dd0:ff00:834::/64  80  # dst-A
precedence 2a01:238:423d:8800::/64  90  # dst-B

$ telnet st1.bieringer.de
Trying 2a01:238:423d:8800:85b3:9e6b:3019:8909...    (dst-B)
...
Trying 2001:4dd0:ff00:834::2...                     (dst-A)
...

precedence 2001:4dd0:ff00:834::/64  90  # dst-A ex 80
precedence 2a01:238:423d:8800::/64  80  # dst-B ex 90

$ telnet st1.bieringer.de
Trying 2001:4dd0:ff00:834::2...                     (dst-A)
...
Trying 2a01:238:423d:8800:85b3:9e6b:3019:8909...    (dst-B)
...

Quell-Addressen-Auswahl

Source address selection in Linux wird automatisch vom Kernel vorgenommen, üblicherweise abhängig von den Routing-Tabellen und unter der Vorgabe, den Scope einer Adresse beizubehalten.

Quell-Adressen-Auswahl mit ”ip addrlabel”

Mit einer Erweiterung der internen ”ip addrlabel” Tabelle kann eine Quell-Adresse zu einer Ziel-Adresse gebunden werden. Bindung wird hier durch die Angabe des gleichen Labels (einer Nummer) konfiguriert.

# ip addrlabel
prefix ::1/128 label 0 
prefix ::/96 label 3 
prefix ::ffff:0.0.0.0/96 label 4 
prefix 2001::/32 label 6 
prefix 2001:10::/28 label 7 
prefix 2002::/16 label 2 
prefix fc00::/7 label 5 
prefix ::/0 label 1 

# ip -6 addr show dev eth1 | grep -w inet6 |grep -w global
    inet6 2001:6f8:12d8:2:5054:ff:fefb:6582/64 scope global dynamic     (src-A)
    inet6 2001:6f8:900:8cbc:5054:ff:fefb:6582/64 scope global dynamic   (src-B)

$ telnet st1.bieringer.de
Trying 2001:4dd0:ff00:834::2...                     (dst-A)
...
Trying 2a01:238:423d:8800:85b3:9e6b:3019:8909...    (dst-B)
...

IP6 2001:6f8:12d8:2:5054:ff:fefb:6582.37762 > 2001:4dd0:ff00:834::2.telnet:                  (src-A -> dst-A)
IP6 2001:6f8:12d8:2:5054:ff:fefb:6582.45754 > 2a01:238:423d:8800:85b3:9e6b:3019:8909.telnet: (src-A -> dst-B)

# ip addrlabel add prefix 2001:6f8:12d8:2::/64 label 200
# ip addrlabel add prefix 2001:6f8:900:8cbc::/64 label 300
# ip addrlabel add prefix 2001:4dd0:ff00:834::/64 label 200
# ip addrlabel add prefix 2a01:238:423d:8800::/64 label 300

# ip addrlabel
prefix ::1/128 label 0 
prefix ::/96 label 3 
prefix ::ffff:0.0.0.0/96 label 4 
prefix 2a01:238:423d:8800::/64 label 300   # dst-B
prefix 2001:4dd0:ff00:834::/64 label 200   # dst-A
prefix 2001:6f8:900:8cbc::/64 label 300    # src-B
prefix 2001:6f8:12d8:2::/64 label 200      # src-A
prefix 2001::/32 label 6 
prefix 2001:10::/28 label 7 
prefix 2002::/16 label 2 
prefix fc00::/7 label 5 
prefix ::/0 label 1 

$ telnet st1.bieringer.de
Trying 2001:4dd0:ff00:834::2...                     (dst-A)
...
Trying 2a01:238:423d:8800:85b3:9e6b:3019:8909...    (dst-B)
...

IP6 2001:6f8:12d8:2:5054:ff:fefb:6582.37765   > 2001:4dd0:ff00:834::2.telnet:                  (src-A -> dst-A)
IP6 2001:6f8:900:8cbc:5054:ff:fefb:6582.39632 > 2a01:238:423d:8800:85b3:9e6b:3019:8909.telnet: (src-B -> dst-B)

Persistente Konfiguration von ”ip addrtable” ist wahrscheinlich in aktuellen Linux-Distributionen nicht unterstützt, somit wäre eine Erweiterung der Netzwerk-Init-Scripts oder rc.local notwendig. Ein Skript, welches Informationen aus /etc/gai.conf in entsprechendes ”ip addrtable” umwandelt, gibt es hier: /etc/gai.conf - it ain't what you think it is