IPA động DNS chỉ cập nhật bản ghi AAAA. Hồ sơ A của tôi ở đâu?


11

Tôi đang thiết lập một miền FreeIPA. Trong phòng thí nghiệm của tôi có ba máy ảo: bộ điều khiển miền ipadc1và hai máy khách puppetwordpress(sáng tạo, vâng, tôi biết). Tất cả ba máy ảo đang chạy CentOS 6.4 mới được cài đặt (FreeIPA 3.0.0).

Tôi đã cài đặt máy chủ IPA, tạo một miền mà chúng tôi sẽ gọi example.usở đây, với dịch vụ DNS và cập nhật DNS tự động được bật.

Tôi đã tham gia thành công hai máy ảo vào miền. Nhưng các bản cập nhật DNS động chỉ đưa bản ghi AAAA vào DNS. Không có hồ sơ A được chèn.

DNS RR

Cài đặt vùng DNS của tôi cho các cập nhật dyanmic và chính sách cập nhật BIND dường như cũng chính xác.

Cài đặt vùng DNS

Cả hai máy khách VM thực sự địa chỉ IPv4; puppetcó một địa chỉ IPv4 tĩnh và wordpressnhận địa chỉ IPv4 từ DHCP. Điều này dường như không làm cho một sự khác biệt.

# 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

Vấn đề thực sự có vẻ là với sssd, mà tôi học được là thực sự chịu trách nhiệm cho việc đẩy các bản cập nhật DNS động. Tôi đã chỉnh sửa debug_level = 9và tìm thấy điều này trong nhật ký. Nó dường như chỉ ra rằng sssd thậm chí không bận tâm đến việc cố gắng gửi một bản ghi A, mặc dù nó không thực sự cho tôi bất kỳ dấu hiệu nào tại sao.

(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

Của tôi sssd.conflà:

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

Kết quả ipa dnszone-show example.us --alllà:

  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

Mặc dù đây thực sự là một vấn đề nhỏ đối với tôi, vì tôi có thể phát trực tiếp mà không cần cập nhật DNS IPv4 (thật tuyệt khi được xếp chồng 100%), thật khó chịu khi không biết chuyện gì đang xảy ra ở đây. Có lẽ có những bản ghi mà tôi đã bỏ lỡ sẽ làm sáng tỏ tình hình?

(Ồ, và vâng, tôi đã tắt và bật lại.)


wow, mọi thứ trông giống hệt như tôi có. Có lẽ một số lỗi, tôi có phiên bản thấp hơn, bạn cần hỏi Jacob trên #freeipa @freenode. Ngoài ra, bạn có thể thử từ máy đó bằng tay gửi bản cập nhật mà bạn nên có keytab cho việc đó. nsupdate >update add wordpress.example.us 86400 A 172.25.50.227?
Danila Ladner

@DanilaLadner Có, nếu tôi tự chạy nsupdatethì tôi có thể cập nhật hồ sơ. Vấn đề dường như sssdlà không bảo nsupdatecập nhật bản ghi A.
Michael Hampton

Câu trả lời:


9

Sau khi bạn đã thêm

ipa_dyndns_iface = eth0

trong pastebin đó tôi thấy sssd nhận ra ip của bạn là multicast:

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

trong đoạn mã Jacob đã viết nơi anh ta sẽ kiểm tra các địa chỉ looback, địa chỉ multicast, v.v. không báo cáo cho dns bạn sẽ thấy lỗi của mình:

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;

Bây giờ câu hỏi là tại sao nó được công nhận là "addast multicast" tôi không biết. Như IN_MULTICAST trong in.hbạn có thể thấy:

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

Vì vậy, làm thế nào mà Địa chỉ IP được đánh giá là phát đa hướng, tôi sẽ cố gắng sải bước và xem xét. Ngoài ra, bạn có thể hỏi Jacob Hrozek, anh ấy đã viết đoạn mã sssd đó. Anh ấy thường luôn có sẵn tại #sssd trên freenode, sẽ rất tuyệt nếu bạn chia sẻ những gì bạn kết thúc với điều này. Hy vọng nó sẽ giúp một chút.

BIÊN TẬP

Vâng, có một lỗi trong phiên bản 1.9.2 của bạn. Bạn có:

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

Nó nên là:

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

Đó là một địa chỉ RFC 1918 tiêu chuẩn không có thật, và chắc chắn không phải là multicast IPv4. Vì vậy, tôi nghĩ rằng bạn đúng rằng đây là một loại lỗi. Tập tin nguồn này là gì?
Michael Hampton

Vâng, nó rất kỳ lạ.
Danila Ladner


phiên bản nào của vòng quay sssd của bạn?
Danila Ladner

1
Ước gì tôi có thể nâng cao điều này nhiều hơn một lần. Thật là một câu trả lời toàn diện và chính xác; vỗ tay!
MadHatter

1

Từ sssd-ipa(5)trang hướng dẫn:

   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

Bạn phải thiết lập ipa_dyndns_ifacetrong /etc/sssd/sssd.confđể phù hợp với giao diện của máy chủ IPA, như mặc định là để chỉ sử dụng địa chỉ của các ổ cắm về phía máy chủ IPA:

ipa_dyndns_iface = eth0

Điều đó sẽ cho phép cập nhật động cho cả IPv4 và IPv6.


Cố gắng tốt, nhưng dường như không giúp được gì. Kết quả của việc thêm này là ở đây trên pastebin .
Michael Hampton

0

Ngoài ra, hãy thử đặt lookup_family_order thành giá trị không mặc định, chẳng hạn như ipv6_first làm trường hợp thử nghiệm và thông báo cho chúng tôi nếu nó thử ipv4.


Điều này cũng không có tác dụng .
Michael Hampton
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.