FreeIPA 도메인을 설정하고 있습니다. 도메인 컨트롤러 : 내 연구실에서 세 개의 가상 기계입니다 ipadc1
, 그리고 두 클라이언트 puppet
및 wordpress
(크리에이티브, 그래, 나는 알고있다). 세 개의 VM 모두 새로 설치된 CentOS 6.4 (FreeIPA 3.0.0)를 실행하고 있습니다.
example.us
DNS 서비스 및 자동 DNS 업데이트가 활성화 된 상태 에서 IPA 서버를 설치하여 여기에서 호출 할 도메인을 만듭니다 .
두 개의 VM을 도메인에 성공적으로 가입했습니다. 그러나 동적 DNS 업데이트는 AAAA 레코드 만 DNS에 넣습니다. A 레코드가 삽입되지 않았습니다.
동적 업데이트 및 BIND 업데이트 정책에 대한 내 DNS 영역 설정도 올바른 것 같습니다.
두 클라이언트 VM 모두 실제로 IPv4 주소를 가지고 있습니다 . puppet
고정 IPv4 주소를 가지며 wordpress
DHCP에서 IPv4 주소를 가져옵니다. 이것은 차이가없는 것 같습니다.
# 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 업데이트를 추진하는 데 책임이 있음을 알게되었습니다. 나는 디버깅을 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 % 듀얼 스택이어서 좋았습니다) 없이도 살 수 있기 때문에 여기서 무슨 일이 일어나고 있는지 알지 못하는 것이 여전히 귀찮습니다. 어쩌면 내가 놓친 로그가 상황을 밝힐 수 있습니까?
(아, 네, 껐다가 다시 켰습니다.)
답변
추가 한 후
ipa_dyndns_iface = eth0
그 pastebin에서 sssd는 IP를 멀티 캐스트로 인식합니다.
"(Tue Jul 9 10:00:01 2013) [sssd[be[example.us]]] [ok_for_dns] (0x0200): Multicast IPv4 address 172.25.50.227"
코드 조각에서 야곱은 루즈 백 주소, 멀티 캐스트 주소 등을 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;
이제 문제는 “멀티 캐스트 주소”로 인식되는 이유입니다. 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 주소가 멀티 캐스트로 평가 된 방법, 나는 그것을 추적하려고합니다. 또한 Jacob Hrozek에게 물어볼 수 있습니다. 그는 sssd 코드를 작성했습니다. 그는 보통 freenode에서 #sssd에서 사용할 수 있으며, 이것으로 결국 공유 할 수 있다면 좋을 것입니다. 그것이 조금 도움이되기를 바랍니다.
편집하다
예, 버전 1.9.2에 버그가 있습니다. 당신은 :
if (IN_MULTICAST(addr->s_addr))) {
그것은해야한다:
if (IN_MULTICAST(ntohl(addr->s_addr))) {
답변
로부터 sssd-ipa(5)
맨 :
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 모두에 대한 동적 업데이트가 가능해야합니다.
답변
또한 lookup_family_order 를 테스트 케이스 로 ipv6_first 와 같은 기본값이 아닌 값으로 설정하고 ipv4를 시도하는지 알려주십시오.