IPA ไดนามิก DNS จะอัปเดตระเบียน AAAA เท่านั้น บันทึก A ของฉันอยู่ที่ไหน


11

ฉันกำลังตั้งค่าโดเมน FreeIPA ในแล็บของฉันมีเครื่องเสมือนสามเครื่อง: ตัวควบคุมโดเมนipadc1และลูกค้าสองรายpuppetและwordpress(โฆษณาใช่ฉันรู้) VMs ทั้งสามนั้นกำลังเรียกใช้ CentOS 6.4 (FreeIPA 3.0.0) ที่ติดตั้งใหม่

ฉันได้ติดตั้งเซิร์ฟเวอร์ IPA แล้วสร้างโดเมนที่เราจะโทรหาexample.usที่นี่พร้อมบริการ DNS และเปิดใช้งานการอัปเดต DNS อัตโนมัติ

ฉันได้เข้าร่วม VMs ทั้งสองกับโดเมนเรียบร้อยแล้ว แต่การอัปเดต DNS แบบไดนามิกจะใส่ระเบียน AAAA ลงใน DNS เท่านั้น ไม่มีการแทรกระเบียน A

DNS RRs

การตั้งค่าโซน DNS ของฉันสำหรับการอัพเดตแบบ dyanmic และนโยบายการอัพเดต BIND นั้นถูกต้องเช่นกัน

การตั้งค่าโซน DNS

VM ของไคลเอ็นต์ทั้งสองมีที่อยู่ IPv4 จริง puppetมีที่อยู่ IPv4 แบบคงที่และwordpressรับที่อยู่ IPv4 จาก DHCP สิ่งนี้ดูเหมือนจะไม่สร้างความแตกต่าง

# 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

ปัญหาที่เกิดขึ้นจริงดูเหมือนว่าจะอยู่กับ sssd ซึ่งฉันได้เรียนรู้จริง ๆ แล้วรับผิดชอบการผลักดันการปรับปรุง DNS แบบไดนามิก ฉัน cranked ขึ้นการแก้จุดบกพร่องด้วยdebug_level = 9และพบสิ่งนี้ในบันทึก ดูเหมือนว่าจะระบุว่า sssd ไม่ได้รบกวนการพยายามส่งบันทึก A ถึงแม้ว่ามันจะไม่ได้ให้เหตุผลใด ๆ แก่ฉันก็ตาม

(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

ของฉันsssd.confคือ:

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

ผลลัพธ์ของipa dnszone-show example.us --allคือ:

  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

แม้ว่านี่จะเป็นปัญหาเล็กน้อยสำหรับฉันเนื่องจากฉันสามารถใช้งานได้หากไม่มีการอัปเดต IPv4 DNS (ดีมากที่ได้เป็น 100% สแต็คคู่) ก็ยังน่ารำคาญที่ไม่รู้ว่าเกิดอะไรขึ้นที่นี่ บางทีอาจมีบันทึกที่ฉันพลาดไปซึ่งจะทำให้เข้าใจสถานการณ์

(โอ้และใช่ฉันปิดและเปิดอีกครั้ง)


ว้าวทุกอย่างดูเหมือนว่าฉันมี อาจมีข้อบกพร่องบางอย่างฉันมีรุ่นที่ต่ำกว่าคุณต้องถามจาค็อบใน #freeipa @freenode นอกจากนี้คุณยังสามารถลองจากเครื่องนั้นส่งการอัปเดตด้วยตนเองที่คุณควรมีคีย์แท็บ nsupdate >update add wordpress.example.us 86400 A 172.25.50.227?
Danila Ladner

@DanilaLadner ใช่ถ้าฉันเรียกใช้ด้วยตนเองnsupdateฉันสามารถอัปเดตระเบียนได้ ปัญหาน่าจะเป็นที่sssdไม่ได้บอกnsupdateให้อัปเดตบันทึก A
Michael Hampton

คำตอบ:


9

หลังจากที่คุณได้เพิ่ม

ipa_dyndns_iface = eth0

ใน pastebin นั้นฉันเห็น sssd รู้จัก ip ของคุณเป็น multicast:

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

ในชิ้นส่วนของรหัสจาค็อบเขียนว่าเขาจะทดสอบที่อยู่ Looback ที่อยู่มัลติแคสต์ ฯลฯ ไม่ให้รายงานไปยัง DNS คุณจะพบข้อผิดพลาดของคุณ:

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;

ตอนนี้คำถามคือทำไมมันถึงรู้จักเป็น "multicast addr" ฉันไม่มีความคิด ในฐานะที่เป็น IN_MULTICAST in.hคุณสามารถดู:

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

ดังนั้นที่อยู่ IP นั้นประเมินว่าเป็นมัลติคาสต์ฉันจะพยายาม strace และดู นอกจากนี้คุณสามารถถาม Jacob Hrozek ได้เขาเขียนโค้ด sssd ชิ้นนั้น เขามักจะอยู่ที่ #sssd บน freenode จะดีมากถ้าคุณแบ่งปันสิ่งที่คุณจะได้รับ หวังว่ามันจะช่วยได้เพียงเล็กน้อย

แก้ไข

ใช่มีข้อผิดพลาดในรุ่น 1.9.2 ของคุณ คุณมี:

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

มันควรจะเป็น:

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

มันเป็นที่อยู่ RFC 1918 มาตรฐานที่ลุ่มและแน่นอนว่าไม่ใช่มัลติคาสต์ IPv4 ดังนั้นฉันคิดว่าคุณพูดถูกนี่เป็นข้อบกพร่องบางอย่าง ไฟล์นี้มาจากไหน?
Michael Hampton

ใช่มันแปลกมาก
Danila Ladner


sssd รอบต่อนาทีของคุณเป็นเวอร์ชันอะไร
Danila Ladner

1
หวังว่าฉันจะสามารถโหวตได้มากกว่านี้มากกว่าหนึ่งครั้ง ช่างเป็นคำตอบที่ครอบคลุมและแม่นยำ เสียงปรบมือ!
MadHatter

1

จาก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

คุณต้องตั้งค่าipa_dyndns_ifaceใน/etc/sssd/sssd.confเพื่อให้ตรงกับอินเตอร์เฟซของเซิร์ฟเวอร์ IPA ในขณะที่เริ่มต้นคือการใช้เฉพาะที่อยู่ของซ็อกเก็ตที่มีต่อเซิร์ฟเวอร์ IPA นี้:

ipa_dyndns_iface = eth0

ที่ควรเปิดใช้งานการปรับปรุงแบบไดนามิกสำหรับทั้ง IPv4 และ IPv6


พยายามดี แต่ดูเหมือนจะไม่ช่วย ผลที่ได้จากการเพิ่มนี้นี่บน Pastebin
Michael Hampton

0

และลองตั้งค่าlookup_family_orderให้เป็นค่าที่ไม่ใช่ค่าเริ่มต้นเช่นipv6_firstเป็นกรณีทดสอบและแจ้งให้เราทราบหากลองใช้ ipv4 เลย


สิ่งนี้ก็ไม่มีผลเช่นกัน
Michael Hampton
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.