DNS dinamis IPA hanya memperbarui catatan AAAA. Di mana catatan A saya?

11

Saya sedang menyiapkan domain FreeIPA. Di lab saya ada tiga mesin virtual: pengontrol domain ipadc1, dan dua klien puppetdan wordpress(kreatif, ya, saya tahu). Ketiga VM menjalankan CentOS 6.4 yang baru diinstal (FreeIPA 3.0.0).

Saya telah menginstal server IPA, membuat domain yang akan kami hubungi di example.ussini, dengan layanan DNS dan pembaruan DNS otomatis diaktifkan.

Saya telah berhasil bergabung dengan dua VM ke domain. Tetapi pembaruan DNS dinamis hanya menempatkan catatan AAAA ke dalam DNS. Tidak ada catatan yang pernah dimasukkan.

DNS RRs

Pengaturan zona DNS saya untuk pembaruan dyanmic dan kebijakan pembaruan BIND tampaknya juga benar.

Pengaturan zona DNS

Kedua VM klien sebenarnya memiliki alamat IPv4; puppetmemiliki alamat IPv4 statis dan wordpressmendapatkan alamat IPv4 dari DHCP. Ini sepertinya tidak membuat perbedaan.

# 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

Masalahnya tampaknya dengan sssd, yang saya pelajari sebenarnya bertanggung jawab untuk mendorong pembaruan DNS dinamis. Saya menghidupkan debugging debug_level = 9dan menemukan ini di log. Tampaknya menunjukkan bahwa sssd bahkan tidak repot-repot dengan mencoba mengirim catatan A, meskipun itu tidak benar-benar memberi saya indikasi mengapa.

(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

Saya sssd.confadalah:

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

Hasilnya ipa dnszone-show example.us --alladalah:

  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

Meskipun ini benar-benar masalah kecil bagi saya, karena saya dapat ditayangkan tanpa pembaruan DNS IPv4 (senang menjadi 100% dual stack) masih menjengkelkan karena tidak tahu apa yang terjadi di sini. Mungkin ada log yang saya lewatkan yang akan menjelaskan situasi?

(Oh, dan ya aku mematikannya dan hidup lagi.)

Michael Hampton
sumber
wow, semuanya tampak persis seperti yang saya miliki. Mungkin ada bug, saya punya versi lebih rendah, Anda perlu bertanya pada #freeipa @fodeode. Anda juga dapat mencoba dari mesin itu secara manual mengirim pembaruan Anda harus memiliki keytab untuk itu. nsupdate >update add wordpress.example.us 86400 A 172.25.50.227?
Danila Ladner
@DanilaLadner Ya, jika saya menjalankan secara manual nsupdatemaka saya dapat memperbarui catatan. Masalahnya tampaknya sssdtidak memberitahu nsupdateuntuk memperbarui catatan A.
Michael Hampton

Jawaban:

9

Setelah Anda menambahkan

ipa_dyndns_iface = eth0

di pastebin itu saya melihat sssd mengenali ip Anda sebagai multicast:

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

dalam kode yang ditulis Yakub di mana ia akan menguji alamat looback, alamat multicast dll untuk tidak melapor ke dns Anda akan menemukan kesalahan Anda:

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;

Sekarang pertanyaannya adalah mengapa itu diakui sebagai "multicast addr" saya tidak tahu. Seperti IN_MULTICAST, in.hAnda dapat melihat:

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

Jadi, bagaimana Alamat IP itu dievaluasi menjadi multicast, saya akan mencoba untuk memetakannya dan melihatnya. Anda juga bisa bertanya pada Jacob Hrozek, dia menulis kode sssd itu. Dia biasanya selalu tersedia di #sssd di freenode, akan lebih bagus jika Anda akan berbagi apa yang Anda dapatkan dengan ini. Semoga sedikit membantu.

EDIT

Ya, ada bug di versi Anda 1.9.2. Kamu punya:

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

Harus:

  if (IN_MULTICAST(ntohl(addr->s_addr))) {
Danila Ladner
sumber
Ini adalah alamat standar RFC 1918, dan tentunya bukan IPv4 multicast. Jadi saya pikir Anda benar bahwa ini semacam bug. Di mana file sumber ini?
Michael Hampton
ya, ini sangat aneh.
Danila Ladner
apa versi rpm SSD Anda?
Danila Ladner
1
Seandainya saya bisa lebih banyak mengunggah ini lebih dari sekali. Sungguh jawaban yang komprehensif dan tepat; tepuk tangan!
MadHatter
1

Dari halaman sssd-ipa(5)manual:

   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

Anda harus mengatur ipa_dyndns_ifacedi /etc/sssd/sssd.confuntuk mencocokkan antarmuka dari server IPA, sebagai default adalah untuk hanya menggunakan alamat soket menuju server IPA:

ipa_dyndns_iface = eth0

Itu harus memungkinkan pembaruan dinamis untuk IPv4 dan IPv6.

dawud
sumber
Usaha yang bagus, tetapi tampaknya tidak membantu. Hasil menambahkan ini ada di sini di pastebin .
Michael Hampton
0

Juga coba atur lookup_family_order ke nilai non-default seperti ipv6_first sebagai case-test dan beri tahu kami jika mencoba ipv4 sama sekali.

FIV
sumber
Ini juga tidak berpengaruh .
Michael Hampton