IPA Dynamic DNS aktualisiert nur den AAAA-Eintrag. Wo sind meine A-Aufzeichnungen?

11

Ich richte eine FreeIPA-Domain ein. In meinem Labor befinden sich drei virtuelle Maschinen: der Domänencontroller ipadc1und zwei Clients puppetund wordpress(kreativ, ja, ich weiß). Auf allen drei VMs wird frisch installiertes CentOS 6.4 (FreeIPA 3.0.0) ausgeführt.

Ich habe den IPA-Server installiert und eine Domäne erstellt, die wir example.ushier aufrufen , wobei der DNS-Dienst und die automatischen DNS-Updates aktiviert sind.

Ich habe die beiden VMs erfolgreich mit der Domäne verbunden. Bei den dynamischen DNS-Updates werden jedoch nur AAAA-Einträge in den DNS eingefügt. Es werden niemals A-Datensätze eingefügt.

DNS-RRs

Meine DNS-Zoneneinstellungen für dyanmische Updates und die BIND-Update-Richtlinie scheinen ebenfalls korrekt zu sein.

DNS-Zoneneinstellungen

Beide Client - VMs tatsächlich haben IPv4 - Adressen; puppethat eine statische IPv4-Adresse und wordpresserhält ihre IPv4-Adresse von DHCP. Dies scheint keinen Unterschied zu machen.

# ip a s dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:3c:d5:f5 brd ff:ff:ff:ff:ff:ff
    inet 172.25.50.227/24 brd 172.25.50.255 scope global eth0
    inet6 2001:db8:16:bf:5054:ff:fe3c:d5f5/64 scope global dynamic 
       valid_lft 86180sec preferred_lft 14180sec
    inet6 fe80::5054:ff:fe3c:d5f5/64 scope link 
       valid_lft forever preferred_lft forever

Das Problem scheint tatsächlich bei sssd zu liegen, von dem ich erfahren habe, dass es tatsächlich für das Pushen der dynamischen DNS-Updates verantwortlich ist. Ich habe das Debuggen mit gestartet debug_level = 9und dies in den Protokollen gefunden. Es scheint darauf hinzudeuten, dass sssd sich nicht einmal die Mühe macht, einen A-Datensatz zu senden, obwohl es mir keinen wirklichen Hinweis darauf gibt, warum.

(Mon Jul 22 21:50:01 2013) [sssd[be[example.us]]] [ipa_dyndns_update_send] (0x4000): Performing update
(Mon Jul 22 21:50:01 2013) [sssd[be[example.us]]] [ok_for_dns] (0x0200): Multicast IPv4 address 172.25.50.227
(Mon Jul 22 21:50:01 2013) [sssd[be[example.us]]] [ok_for_dns] (0x0200): Link local IPv6 address fe80::5054:ff:fe3c:d5f5
(Mon Jul 22 21:50:01 2013) [sssd[be[example.us]]] [ipa_dyndns_gss_tsig_update_step] (0x1000): Checking if the update is needed
(Mon Jul 22 21:50:01 2013) [sssd[be[example.us]]] [resolv_get_family_order] (0x1000): Lookup order: ipv6_first
(Mon Jul 22 21:50:01 2013) [sssd[be[example.us]]] [resolv_is_address] (0x4000): [wordpress.example.us] does not look like an IP address
(Mon Jul 22 21:50:01 2013) [sssd[be[example.us]]] [resolv_gethostbyname_step] (0x2000): Querying DNS
(Mon Jul 22 21:50:01 2013) [sssd[be[example.us]]] [resolv_gethostbyname_dns_query] (0x0100): Trying to resolve AAAA record of 'wordpress.example.us' in DNS
(Mon Jul 22 21:50:01 2013) [sssd[be[example.us]]] [schedule_request_timeout] (0x2000): Scheduling a timeout of 5 seconds
(Mon Jul 22 21:50:01 2013) [sssd[be[example.us]]] [schedule_timeout_watcher] (0x2000): Scheduling DNS timeout watcher
(Mon Jul 22 21:50:01 2013) [sssd[be[example.us]]] [unschedule_timeout_watcher] (0x4000): Unscheduling DNS timeout watcher
(Mon Jul 22 21:50:01 2013) [sssd[be[example.us]]] [request_watch_destructor] (0x0400): Deleting request watch
(Mon Jul 22 21:50:01 2013) [sssd[be[example.us]]] [resolv_gethostbyname_step] (0x2000): Querying DNS
(Mon Jul 22 21:50:01 2013) [sssd[be[example.us]]] [resolv_gethostbyname_dns_query] (0x0100): Trying to resolve A record of 'wordpress.example.us' in DNS
(Mon Jul 22 21:50:01 2013) [sssd[be[example.us]]] [schedule_request_timeout] (0x2000): Scheduling a timeout of 5 seconds
(Mon Jul 22 21:50:01 2013) [sssd[be[example.us]]] [schedule_timeout_watcher] (0x2000): Scheduling DNS timeout watcher
(Mon Jul 22 21:50:01 2013) [sssd[be[example.us]]] [unschedule_timeout_watcher] (0x4000): Unscheduling DNS timeout watcher
(Mon Jul 22 21:50:01 2013) [sssd[be[example.us]]] [request_watch_destructor] (0x0400): Deleting request watch
(Mon Jul 22 21:50:01 2013) [sssd[be[example.us]]] [resolv_gethostbyname_next] (0x0200): No more address families to retry
(Mon Jul 22 21:50:01 2013) [sssd[be[example.us]]] [resolv_gethostbyname_next] (0x0100): No more hosts databases to retry
(Mon Jul 22 21:50:01 2013) [sssd[be[example.us]]] [resolv_is_address] (0x4000): [wordpress.example.us] does not look like an IP address
(Mon Jul 22 21:50:01 2013) [sssd[be[example.us]]] [resolv_gethostbyname_step] (0x2000): Querying DNS
(Mon Jul 22 21:50:01 2013) [sssd[be[example.us]]] [resolv_gethostbyname_dns_query] (0x0100): Trying to resolve A record of 'wordpress.example.us' in DNS
(Mon Jul 22 21:50:01 2013) [sssd[be[example.us]]] [schedule_request_timeout] (0x2000): Scheduling a timeout of 5 seconds
(Mon Jul 22 21:50:01 2013) [sssd[be[example.us]]] [schedule_timeout_watcher] (0x2000): Scheduling DNS timeout watcher
(Mon Jul 22 21:50:01 2013) [sssd[be[example.us]]] [unschedule_timeout_watcher] (0x4000): Unscheduling DNS timeout watcher
(Mon Jul 22 21:50:01 2013) [sssd[be[example.us]]] [request_watch_destructor] (0x0400): Deleting request watch
(Mon Jul 22 21:50:01 2013) [sssd[be[example.us]]] [resolv_gethostbyname_next] (0x0200): No more address families to retry
(Mon Jul 22 21:50:01 2013) [sssd[be[example.us]]] [resolv_gethostbyname_next] (0x0100): No more hosts databases to retry
(Mon Jul 22 21:50:01 2013) [sssd[be[example.us]]] [ipa_dyndns_gss_tsig_update_check] (0x1000): Address on localhost only: 2001:db8:16:bf:5054:ff:fe3c:d5f5
(Mon Jul 22 21:50:01 2013) [sssd[be[example.us]]] [ipa_dyndns_gss_tsig_update_check] (0x0400): Detected IP addresses change, will perform an update
(Mon Jul 22 21:50:01 2013) [sssd[be[example.us]]] [create_nsupdate_message] (0x0200): Creating update message for realm [EXAMPLE.US] and zone [example.us].
(Mon Jul 22 21:50:01 2013) [sssd[be[example.us]]] [create_nsupdate_message] (0x0400):  -- Begin nsupdate message --
realm EXAMPLE.US
zone example.us.
update delete wordpress.example.us. in A
send
update delete wordpress.example.us. in AAAA
send
update add wordpress.example.us. 86400 in AAAA 2001:db8:16:bf:5054:ff:fe3c:d5f5
send
(Mon Jul 22 21:50:01 2013) [sssd[be[example.us]]] [create_nsupdate_message] (0x0400):  -- End nsupdate message --
(Mon Jul 22 21:50:01 2013) [sssd[be[example.us]]] [child_handler_setup] (0x2000): Setting up signal handler up for pid [2144]
(Mon Jul 22 21:50:01 2013) [sssd[be[example.us]]] [child_handler_setup] (0x2000): Signal handler set up for pid [2144]
(Mon Jul 22 21:50:01 2013) [sssd[be[example.us]]] [write_pipe_handler] (0x0400): All data has been sent!
(Mon Jul 22 21:50:01 2013) [sssd[be[example.us]]] [ipa_dyndns_stdin_done] (0x4000): Sending nsupdate data complete
(Mon Jul 22 21:50:01 2013) [sssd[be[example.us]]] [child_sig_handler] (0x1000): Waiting for child [2144].
(Mon Jul 22 21:50:01 2013) [sssd[be[example.us]]] [child_sig_handler] (0x0100): child [2144] finished successfully.
(Mon Jul 22 21:50:01 2013) [sssd[be[example.us]]] [sss_child_handler] (0x2000): waitpid failed [10]: No child processes
(Mon Jul 22 21:50:01 2013) [sssd[be[example.us]]] [ipa_dyndns_update_done] (0x0020): DNS update finished

Mein sssd.confist:

[domain/example.us]

cache_credentials = True
krb5_store_password_if_offline = True
ipa_domain = example.us
id_provider = ipa
auth_provider = ipa
access_provider = ipa
ipa_hostname = wordpress.example.us
chpass_provider = ipa
ipa_dyndns_update = True
ipa_server = _srv_, ipadc1.example.us
ldap_tls_cacert = /etc/ipa/ca.crt
[sssd]
services = nss, pam, ssh
config_file_version = 2

domains = example.us
[nss]

[pam]

[sudo]

[autofs]

[ssh]

[pac]

Das Ergebnis von ipa dnszone-show example.us --allist:

  dn: idnsname=example.us,cn=dns,dc=example,dc=us
  Zone name: example.us
  Authoritative nameserver: ipadc1.example.us.
  Administrator e-mail address: hostmaster.example.us.
  SOA serial: 1374982142
  SOA refresh: 3600
  SOA retry: 900
  SOA expire: 1209600
  SOA minimum: 3600
  BIND update policy: grant EXAMPLE.US krb5-self * A; grant EXAMPLE.US krb5-self
                      * AAAA; grant EXAMPLE.US krb5-self * SSHFP;
  Active zone: TRUE
  Dynamic update: TRUE
  Allow query: any;
  Allow transfer: none;
  mxrecord: 0 mail.example.us
  nsrecord: ipadc1.example.us.
  objectclass: top, idnsrecord, idnszone
  txtrecord: v=spf1 a mx -all

Obwohl dies für mich wirklich ein kleines Problem ist, ist es immer noch ärgerlich, nicht zu wissen, was hier vor sich geht , da ich ohne IPv4-DNS-Updates live gehen könnte (es ist schön, 100% Dual-Stack zu sein). Vielleicht gibt es Protokolle, die ich verpasst habe und die die Situation beleuchten würden?

(Oh, und ja, ich habe es aus- und wieder eingeschaltet.)

Michael Hampton
quelle
Wow, alles sieht genauso aus wie ich. Wahrscheinlich ein Fehler, ich habe eine niedrigere Version, du musst Jacob auf #freeipa @freenode fragen. Sie können auch versuchen, von diesem Computer aus manuell das Update zu senden, für das Sie die Keytab haben sollten. nsupdate >update add wordpress.example.us 86400 A 172.25.50.227?
Danila Ladner
@DanilaLadner Ja, wenn ich manuell ausführe, nsupdatekann ich die Datensätze aktualisieren. Das Problem scheint zu sein, dass sssdes nicht aussagekräftig ist nsupdate, den A-Datensatz zu aktualisieren.
Michael Hampton

Antworten:

9

Nachdem Sie hinzugefügt haben

ipa_dyndns_iface = eth0

In diesem Pastebin sehe ich, dass sssd Ihre IP als Multicast erkennt:

"(Tue Jul 9 10:00:01 2013) [sssd[be[example.us]]] [ok_for_dns] (0x0200): Multicast IPv4 address 172.25.50.227"

In dem Code, den Jacob schrieb, wo er auf Looback-Adressen, Multicast-Adressen usw. testen würde, um nicht an DNS zu melden, werden Sie Ihren Fehler finden:

if (IN_MULTICAST(ntohl(addr->s_addr))) {
        DEBUG(SSSDBG_FUNC_DATA, ("Multicast IPv4 address %s\n", straddr));
        return false;
    } else if (inet_netof(*addr) == IN_LOOPBACKNET) {
        DEBUG(SSSDBG_FUNC_DATA, ("Loopback IPv4 address %s\n", straddr));
        return false;
    } else if ((addr->s_addr & 0xffff0000) == 0xa9fe0000) {
        /* 169.254.0.0/16 */
        DEBUG(SSSDBG_FUNC_DATA, ("Link-local IPv4 address %s\n", straddr));
        return false;
    } else if (addr->s_addr == htonl(INADDR_BROADCAST)) {
        DEBUG(SSSDBG_FUNC_DATA, ("Broadcast IPv4 address %s\n", straddr));
        return false;
    }
} else {
    DEBUG(SSSDBG_CRIT_FAILURE, ("Unknown address family\n"));
    return false;
}

return true;

Jetzt ist die Frage, warum es als "Multicast-Adresse" erkannt wird. Ich habe keine Ahnung. Als IN_MULTICAST in können in.hSie sehen:

   "IN_MULTICAST(a)" - tests whether a is a multicast address. and it is in "inet.h/in.h":
   #define  IN_CLASSD(i)        (((long)(i) & 0xf0000000) == 0xe0000000)
   #define  IN_MULTICAST(i)     IN_CLASSD(i)

Also, wie diese IP-Adresse zu Multicast ausgewertet wurde, würde ich versuchen, sie zu straffen und zu schauen. Sie können auch Jacob Hrozek fragen, er hat diesen SSD-Code geschrieben. Er ist normalerweise immer bei #sssd auf freenode verfügbar. Es wäre großartig, wenn Sie uns mitteilen würden, was Sie damit zu tun haben. Hoffe es hilft ein wenig.

BEARBEITEN

Ja, es gibt einen Fehler in Ihrer Version 1.9.2. Du hast:

  if (IN_MULTICAST(addr->s_addr))) {

Es sollte sein:

  if (IN_MULTICAST(ntohl(addr->s_addr))) {
Danila Ladner
quelle
Es ist eine Standard-RFC-1918-Adresse und sicherlich kein IPv4-Multicast. Ich denke, Sie haben Recht, dass dies eine Art Fehler ist. In welcher Quelldatei war das?
Michael Hampton
Ja, es ist sehr komisch.
Danila Ladner
welche version deiner sssd rpm?
Danila Ladner
1
Ich wünschte, ich könnte dies mehr als einmal positiv bewerten. Was für eine umfassende und präzise Antwort; Beifall!
MadHatter
1

Aus der sssd-ipa(5)Manpage:

   ipa_dyndns_iface (string)
       Optional. Applicable only when ipa_dyndns_update is true. Choose the interface whose IP address should be used for dynamic DNS updates.

       Default: Use the IP address of the IPA LDAP connection

Sie müssen eingestellt ipa_dyndns_ifacein /etc/sssd/sssd.confdie Schnittstelle des IPA Servers übereinstimmen, da die standardmäßig nur auf die Adresse der Buchse in Richtung des IPA - Server zu verwenden:

ipa_dyndns_iface = eth0

Dies sollte dynamische Updates für IPv4 und IPv6 ermöglichen.

dawud
quelle
Netter Versuch, schien aber nicht zu helfen. Die Ergebnisse des Hinzufügens sind hier auf Pastebin .
Michael Hampton
0

Versuchen Sie auch, den Wert lookup_family_order auf einen nicht standardmäßigen Wert wie ipv6_first als Testfall festzulegen, und teilen Sie uns mit, ob ipv4 überhaupt versucht wird.

FIV
quelle
Dies hatte auch keine Wirkung .
Michael Hampton