感谢大家的时间和关注。很简单,当我调用 kinit 来测试我的 AD 域(托管在 Server 2012 机器上)的 kerberos 身份验证时,我收到此错误。
错误:kinit:在获取初始凭据时无法联系领域“MYDOMAIN.LOCAL”的任何 KDC
现在,当我明确设置韩国KDC到 IP 地址而不是主机名/etc/krb5.conf
(例如 kdc = 172.16.0.10 与 kdc = ad0.mydomain.local 且与 admin_server 相同),并且当韩国KDC被设置为主机/etc/krb5.conf
名韩国KDC中也有明确的条目/etc/hosts
。我真正的问题是为什么这是必要的? DNS 的重点是不必使用这些本地主机文件,而且我不希望我的配置设置那样。有谁知道为什么会这样?所有常用的网络工具和host -t SRV ...
查询似乎都可以正常工作(详细信息如下),无需这些额外的步骤(/etc/krb5.conf
列出主机名,并且 中没有条目/etc/hosts
)。
那么谁能告诉我为什么kinit
似乎忽略了我的 resolv.conf 文件?
代币
- 本地主机IP是
172.16.0.20
- 本地主机名是
ps
- 本地 FQDN 是
ps.mydomain.local
- AD主机IP是
172.16.0.10
- AD 主机名是
ad0
- AD FQDN 是
ad0.mydomain.local
- AD为主DNS
- 域名是
mydomain.local
(我知道 .local 不好,正在处理它) - 网络是172.16.0.0/24
/etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 172.16.0.20
netmask 255.255.255.0
gateway 172.16.0.1
network 172.16.0.0
broadcast 172.16.0.255
dns-nameservers 172.16.0.10 8.8.8.8
dns-search MYDOMAIN.LOCAL
/etc/hosts
127.0.0.1 localhost
172.16.0.20 ps.mydomain.local ps
# IPv6 stuff, don't think it's relevant to the problem
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
/etc/resolv.conf
- 自动生成
nameserver 172.16.0.10
nameserver 8.8.8.8
search MYDOMAIN.LOCAL
/etc/krb5.conf
[libdefaults]
default_realm = MYDOMAIN.LOCAL
dns_lookup_kdc = true
dns_lookup_realm = true
# tried dns_lookup_realm as both true and false, no change
[realms]
MYDOMAIN.LOCAL = {
kdc = ad0.mydomain.local
admin_server = ad0.mydomain.local
default_domain = mydomain.local
}
[domain_realm]
.opticonwa.local = OPTICONWA.LOCAL
opticonwa.local = OPTICONWA.LOCAL
不包括 smb.conf,因为一旦 kinit 函数,这一切都会起作用。
测试
user@ps:~$ KRB5_TRACE=/dev/stdout kinit administrator
[1634] 1447281918.814976: Getting initial credentials for [email protected]
[1634] 1447281918.815297: Sending request (181 bytes) to MYDOMAIN.LOCAL
[1634] 1447281918.815346: Resolving hostname ad0.mydomain.local
[1634] 1447281923.817731: Resolving hostname ad0.mydomain.local
kinit: Cannot contact any KDC for realm 'MYDOMAIN.LOCAL' while getting initial credentials
user@ps:~$ host -t SRV _kerberos._udp.mydomain.local
_kerberos._udp.mydomain.local has SRV record 0 0 88 ad0.mydomain.local.
_kerberos._udp.mydomain.local has SRV record 0 100 88 ad0.mydomain.local.
user@ps:~$ host -t SRV _kerberos._tcp.mydomain.local
_kerberos._tcp.mydomain.local has SRV record 0 0 88 ad0.mydomain.local.
_kerberos._tcp.mydomain.local has SRV record 0 100 88 ad0.mydomain.local.
user@ps:~$ dig -x 172.16.0.10
; <<>> DiG 9.9.5-3ubuntu0.5-Ubuntu <<>> -x 172.16.0.10
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19749
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;10.0.16.172.in-addr.arpa. IN PTR
;; ANSWER SECTION:
10.0.16.172.in-addr.arpa. 1200 IN PTR ad0.mydomain.local.
;; Query time: 2 msec
;; SERVER: 172.16.0.10#53(172.16.0.10)
;; WHEN: Thu Nov 12 11:19:27 PST 2015
;; MSG SIZE rcvd: 92
不知道为什么我显示 2 个 SRV 记录,因为服务器只有 1 个(至少我知道)。
gentent 主机的输出...
user@ps:~$ getent hosts ad0.mydonaim.local
user@ps:~$ getent hosts 172.16.0.10
172.16.0.10 ad0.mydomain.local
因此,当主机文件不包含域控制器的条目时,反向查找就会起作用。正向查找则不然。当条目位于主机中时,两者都有效...
nsswitch.conf 的输出未从基本安装中修改...
passwd: files winbind
group: files winbind
#passwd: compat
#group: compat
shadow: compat
hosts: files mdns4_minimal [NOTFOUND=return] dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
那么谁能告诉我为什么 kinit 似乎忽略了/etc/resolv.conf
?这是否与admin_server
中的节的 DNS 实现不完整有关/etc/krb5.conf
?或者我是否陷入了某种我没有注意到的 DNS 第 22 条军规?但为什么只有 Kerberos?作为附加问题,为什么本地主机名需要位于/etc/hosts anyway
?有人能给我指点一篇关于 Linux 网络的详尽文章来解释它在后端是如何工作的吗?
再次感谢你的帮助。这真的很困扰我。
答案1
为了让 kinit/kerberos 正常工作,主机名查找应该适用于forward
和reverse
区域。在 Linux 主机上nsswitch.conf
确定获取名称服务信息的来源。该文件中的每一行都控制数据库源,例如,hosts
该行确定将查找哪些源以进行主机名解析。
默认设置为hosts
hosts: files mdns4_minimal [NOTFOUND=return] dns
files
DNS 根本不会被查找,如果在(/etc/hosts)中找不到主机记录,它会返回并且mdns4_minimal
(这个来源似乎与 avahi-daemon 相关)multicast DNS
,但似乎无法解析您的 kerberos 主机)
删除[NOTFOUND=return]
允许联系的主机解析进程dns servers
(这似乎按照上面看到的请求/etc/resolv.conf
工作)dig