Active directory 在Windows上使用kinit进行Kerberos身份验证失败(错误:无法访问网络)

Active directory 在Windows上使用kinit进行Kerberos身份验证失败(错误:无法访问网络),active-directory,kerberos,windows-server-2019,Active Directory,Kerberos,Windows Server 2019,我在Windows Server 2019虚拟机上运行Active Directory,并登录到作为域一部分的Windows 10虚拟机 我想使用kinit.exe(由JDK 16提供)生成Kerberos TGT KDC是为端口88配置的 UDP和TCP端口都已启用 Windows Server域防火墙已关闭 Windows 10域防火墙已关闭 使用相同主体的LDAP身份验证工作正常 问题: [命令提示符] C:\Users\eugen>kinit Password for euge

我在Windows Server 2019虚拟机上运行Active Directory,并登录到作为域一部分的Windows 10虚拟机

我想使用kinit.exe(由JDK 16提供)生成Kerberos TGT

  • KDC是为端口88配置的
  • UDP和TCP端口都已启用
  • Windows Server域防火墙已关闭
  • Windows 10域防火墙已关闭
  • 使用相同主体的LDAP身份验证工作正常
问题:

[命令提示符]

C:\Users\eugen>kinit
Password for eugen@EXAMPLE.COM:
Exception: java.net.SocketException: Network is unreachable: connect
java.io.UncheckedIOException: java.net.SocketException: Network is unreachable: connect
        at java.base/sun.nio.ch.DatagramSocketAdaptor.connect(DatagramSocketAdaptor.java:120)
        at java.base/java.net.DatagramSocket.connect(DatagramSocket.java:341)
        at jdk.naming.dns/com.sun.jndi.dns.DnsClient.doUdpQuery(DnsClient.java:408)
        at jdk.naming.dns/com.sun.jndi.dns.DnsClient.query(DnsClient.java:214)
        at jdk.naming.dns/com.sun.jndi.dns.Resolver.query(Resolver.java:81)
        at jdk.naming.dns/com.sun.jndi.dns.DnsContext.c_getAttributes(DnsContext.java:434)
        at java.naming/com.sun.jndi.toolkit.ctx.ComponentDirContext.p_getAttributes(ComponentDirContext.java:235)
        at java.naming/com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.getAttributes(PartialCompositeDirContext.java:141)
        at java.naming/com.sun.jndi.toolkit.url.GenericURLDirContext.getAttributes(GenericURLDirContext.java:103)
        at java.security.jgss/sun.security.krb5.KrbServiceLocator.lambda$getKerberosService$1(KrbServiceLocator.java:166)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:691)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:865)
        at java.security.jgss/sun.security.krb5.KrbServiceLocator.getKerberosService(KrbServiceLocator.java:164)
        at java.security.jgss/sun.security.krb5.Config.getKDCFromDNS(Config.java:1344)
        at java.security.jgss/sun.security.krb5.Config.getKDCList(Config.java:1230)
        at java.security.jgss/sun.security.krb5.KdcComm.send(KdcComm.java:216)
        at java.security.jgss/sun.security.krb5.KdcComm.send(KdcComm.java:198)
        at java.security.jgss/sun.security.krb5.KrbAsReqBuilder.send(KrbAsReqBuilder.java:345)
        at java.security.jgss/sun.security.krb5.KrbAsReqBuilder.action(KrbAsReqBuilder.java:498)
        at java.security.jgss/sun.security.krb5.internal.tools.Kinit.acquire(Kinit.java:248)
        at java.security.jgss/sun.security.krb5.internal.tools.Kinit.<init>(Kinit.java:134)
        at java.security.jgss/sun.security.krb5.internal.tools.Kinit.main(Kinit.java:96)
Caused by: java.net.SocketException: Network is unreachable: connect
        at java.base/sun.nio.ch.Net.connect0(Native Method)
        at java.base/sun.nio.ch.Net.connect(Net.java:576)
        at java.base/sun.nio.ch.DatagramChannelImpl.connect(DatagramChannelImpl.java:1243)
        at java.base/sun.nio.ch.DatagramSocketAdaptor.connectInternal(DatagramSocketAdaptor.java:91)
        at java.base/sun.nio.ch.DatagramSocketAdaptor.connect(DatagramSocketAdaptor.java:118)
        ... 21 more
C:\Users\eugen>kinit
密码eugen@EXAMPLE.COM:
异常:java.net.SocketException:无法访问网络:连接
java.io.UncheckedIOException:java.net.SocketException:无法访问网络:连接
位于java.base/sun.nio.ch.DatagramSocketAdaptor.connect(DatagramSocketAdaptor.java:120)
位于java.base/java.net.DatagramSocket.connect(DatagramSocket.java:341)
位于jdk.naming.dns/com.sun.jndi.dns.DnsClient.doUdpQuery(DnsClient.java:408)
位于jdk.naming.dns/com.sun.jndi.dns.DnsClient.query(DnsClient.java:214)
位于jdk.naming.dns/com.sun.jndi.dns.Resolver.query(Resolver.java:81)
位于jdk.naming.dns/com.sun.jndi.dns.DnsContext.c_getAttributes(DnsContext.java:434)
位于java.naming/com.sun.jndi.toolkit.ctx.ComponentDirContext.p_getAttributes(ComponentDirContext.java:235)
位于java.naming/com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.getAttributes(PartialCompositeDirContext.java:141)
位于java.naming/com.sun.jndi.toolkit.url.GenericURLDirContext.getAttributes(GenericURLDirContext.java:103)
位于java.security.jgss/sun.security.krb5.KrbServiceLocator.lambda$getKerberosService$1(KrbServiceLocator.java:166)
位于java.base/java.security.AccessController.doPrivileged(AccessController.java:691)
位于java.base/java.security.AccessController.doPrivileged(AccessController.java:865)
位于java.security.jgss/sun.security.krb5.KrbServiceLocator.getKerberosService(KrbServiceLocator.java:164)
位于java.security.jgss/sun.security.krb5.Config.getKDCFromDNS(Config.java:1344)
位于java.security.jgss/sun.security.krb5.Config.getKDCList(Config.java:1230)
位于java.security.jgss/sun.security.krb5.KdcComm.send(KdcComm.java:216)
位于java.security.jgss/sun.security.krb5.KdcComm.send(KdcComm.java:198)
位于java.security.jgss/sun.security.krb5.KrbAsReqBuilder.send(KrbAsReqBuilder.java:345)
位于java.security.jgss/sun.security.krb5.KrbAsReqBuilder.action(KrbAsReqBuilder.java:498)
位于java.security.jgss/sun.security.krb5.internal.tools.Kinit.acquire(Kinit.java:248)
位于java.security.jgss/sun.security.krb5.internal.tools.Kinit.(Kinit.java:134)
位于java.security.jgss/sun.security.krb5.internal.tools.Kinit.main(Kinit.java:96)
原因:java.net.SocketException:无法访问网络:连接
位于java.base/sun.nio.ch.Net.connect0(本机方法)
位于java.base/sun.nio.ch.Net.connect(Net.java:576)
位于java.base/sun.nio.ch.DatagramChannelImpl.connect(DatagramChannelImpl.java:1243)
位于java.base/sun.nio.ch.DatagramSocketAdaptor.connectInternal(DatagramSocketAdaptor.java:91)
位于java.base/sun.nio.ch.DatagramSocketAdaptor.connect(DatagramSocketAdaptor.java:118)
... 还有21个
我认为问题在于请求没有到达服务器。有没有关于如何识别问题的想法


非常感谢

我找到了解决问题的办法

如何确定原因:

运行“ping example.com”将返回

C:\Users\eugen>ping example.com
       Pinging example.com [12.0.12.200] with 32 bytes of data:    Reply from 12.0.12.200: bytes=32 time<1ms TTL=128 Reply from
   10.0.10.185: bytes=32 time<1ms TTL=128 Reply from 12.0.12.200: bytes=32 time<1ms TTL=128 Reply from 12.0.12.200: bytes=32 time<1ms    TTL=128
       Ping statistics for 12.0.12.200:    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds:    Minimum = 0ms, Maximum = 0ms, Average = 0ms
^我认为这意味着DNS服务器知道如何将域解析为IPv4地址,而不是IPv6和它更喜欢解析为IPv6的(可能有这样的设置)。请指出我逻辑上的任何缺陷

问题是如何解决的:

转到控制面板->查看网络状态和任务->单击活动连接->属性->未选中的“Internet协议版本6(TCP/IPv6)”


在此之后,再次运行kinit,我成功地收到了一个TGT。

DNS服务器不“喜欢”东西。如果要求他们提供IPv4地址(
a
type记录),他们将返回IPv4地址。如果要求他们提供IPv6(
AAAA
query type),他们将返回IPv6。如果客户端操作系统同时具有IPv4和IPv6连接,它将根据客户端的首选项发出两个查询并合并结果。(如果服务器管理员不希望DNS返回IPv6地址,他们不应该将该地址添加到DNS…。@user1686更有意义。感谢您共享此信息
C:\Users\eugen>nslookup example.com
Server:  UnKnown
Address:  2001:477:1a02:1:64ff:fe63:41a9:5600

*** UnKnown can't find example.com: No response from server