FreeIPAドメインを設定しています。私のラボには、ドメインコントローラーipadc1
と2つのクライアントpuppet
とwordpress
の3つの仮想マシンがあります(クリエイティブ、はい、わかっています)。 3つのVMはすべて、新しくインストールされたCentOS 6.4(FreeIPA 3.0.0)を実行しています。
IPAサーバーをインストールし、ここでexample.us
と呼ぶドメインを作成し、DNSサービスと自動DNS更新を有効にしました。
2つのVMをドメインに正常に参加させました。ただし、動的DNS更新はAAAAレコードをDNSに挿入するだけです。Aレコードは挿入されません。
動的更新とBIND更新ポリシーのDNSゾーン設定も正しいようです。
両方のクライアントVMは実際にはhave 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
これは私にとって本当に小さな問題ですが、私はcould 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.h
_のIN_MULTICASTとして、次のことがわかります。
_ "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サーバーへのソケットのアドレスのみを使用するため、ipa_dyndns_iface
に/etc/sssd/sssd.conf
をIPAサーバーのインターフェースと一致するように設定する必要があります。
ipa_dyndns_iface = eth0
これにより、IPv4とIPv6の両方の動的更新が可能になります。
また、テストケースとしてlookup_family_orderをデフォルト以外の値(ipv6_firstなど)に設定してみて、ipv4を試行するかどうかを通知してください。