Le DNS dynamique IPA met à jour uniquement l'enregistrement AAAA. Où sont mes enregistrements A?

11

J'installe un domaine FreeIPA. Dans mon laboratoire, il y a trois machines virtuelles: le contrôleur de domaine ipadc1, et deux clients puppetet wordpress(créatif, oui, je sais). Les trois machines virtuelles exécutent CentOS 6.4 fraîchement installé (FreeIPA 3.0.0).

J'ai installé le serveur IPA, créant un domaine que nous appellerons example.usici, avec le service DNS et les mises à jour DNS automatiques activés.

J'ai réussi à joindre les deux machines virtuelles au domaine. Mais les mises à jour DNS dynamiques ne mettent que des enregistrements AAAA dans le DNS. Aucun enregistrement A n'est jamais inséré.

RR DNS

Mes paramètres de zone DNS pour les mises à jour dyanmic et la politique de mise à jour BIND semblent également être corrects.

Paramètres de zone DNS

Les deux machines virtuelles clientes ont en fait des adresses IPv4; puppetpossède une adresse IPv4 statique et wordpressobtient son adresse IPv4 auprès de DHCP. Cela ne semble pas faire de différence.

# 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

Le problème semble en fait être avec sssd, dont j'ai appris qu'il était en fait responsable de la diffusion des mises à jour DNS dynamiques. J'ai lancé le débogage avec debug_level = 9et trouvé cela dans les journaux. Cela semble indiquer que sssd ne prend même pas la peine d'envoyer un enregistrement A, mais cela ne me donne pas vraiment d'indication pourquoi.

(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

Mon sssd.confest:

[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]

Le résultat ipa dnszone-show example.us --allest de:

  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

Bien que ce soit vraiment un problème mineur pour moi, car je pourrais aller en direct sans mises à jour DNS IPv4 (c'est bien d'être 100% dual stack), c'est toujours ennuyeux de ne pas savoir ce qui se passe ici. Peut-être y a-t-il des journaux que j'ai ratés qui éclaireraient la situation?

(Oh, et oui je l'ai éteint et rallumé.)

Michael Hampton
la source
wow, tout ressemble exactement à moi. Probablement un bug, j'ai une version inférieure, vous devez demander à Jacob sur #freeipa @freenode. Vous pouvez également essayer à partir de cette machine d'envoyer manuellement la mise à jour, vous devez avoir un fichier de clés pour cela. nsupdate >update add wordpress.example.us 86400 A 172.25.50.227?
Danila Ladner
@DanilaLadner Oui, si je lance manuellement, nsupdateje peux mettre à jour les enregistrements. Le problème semble être qu'il sssdne dit pas nsupdatede mettre à jour l'enregistrement A.
Michael Hampton

Réponses:

9

Après avoir ajouté

ipa_dyndns_iface = eth0

dans ce pastebin je vois sssd reconnaître votre ip comme multicast:

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

dans le morceau de code que Jacob a écrit où il testerait les adresses looback, les adresses de multidiffusion, etc. pour ne pas signaler au DNS, vous trouverez votre erreur:

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;

Maintenant, la question est de savoir pourquoi il est reconnu comme "addr multicast", je n'en ai aucune idée. Comme IN_MULTICAST en in.hvous pouvez voir:

   "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)

Alors, comment cette adresse IP a-t-elle été évaluée en multidiffusion, j'essaierais de l'étirer et de la regarder. Vous pouvez également demander à Jacob Hrozek, il a écrit ce morceau de code sssd. Il est généralement toujours disponible sur #sssd sur freenode, serait formidable si vous partagiez ce que vous vous retrouvez avec à ce sujet. J'espère que ça aide un peu.

ÉDITER

Oui, il y a un bug dans votre version 1.9.2. Vous avez:

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

Ça devrait être:

  if (IN_MULTICAST(ntohl(addr->s_addr))) {
Danila Ladner
la source
Il s'agit d'une adresse RFC 1918 standard et certainement pas de multidiffusion IPv4. Je pense donc que vous avez raison, il s'agit d'une sorte de bogue. Dans quel fichier source se trouvait-il?
Michael Hampton
oui, c'est très bizarre.
Danila Ladner
quelle version de votre rpm sssd?
Danila Ladner
1
J'aimerais pouvoir voter plus d'une fois. Quelle réponse complète et précise; applaudissements!
MadHatter
1

Depuis la sssd-ipa(5)page de manuel:

   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

Vous devez définir ipa_dyndns_ifacedans /etc/sssd/sssd.confpour correspondre à l'interface du serveur IPA, comme la valeur par défaut est d'utiliser uniquement l'adresse de la prise vers le serveur IPA:

ipa_dyndns_iface = eth0

Cela devrait permettre des mises à jour dynamiques pour IPv4 et IPv6.

dawud
la source
Bien essayé, mais n'a pas semblé aider. Les résultats de l'ajout sont ici sur pastebin .
Michael Hampton
0

Essayez également de définir lookup_family_order sur une valeur autre que par défaut, comme ipv6_first comme test-case et indiquez -nous s'il essaie ipv4.

FIV
la source
Cela n'a également eu aucun effet .
Michael Hampton