在我的组织网络中,如果一台机器有计算机名称(主机名),比如说,desktop-x,我只需使用“ping desk-x”就可以 ping 到那台机器。
但 ping 实际上会将 Desktop-x 转换为 FQDN,以便向 DNS 服务器查询相应的 IP 地址。因此,如果我的组织域名是在 com 下注册的 company-x,则该机器的 FQDN 为 Desktop-x.company-x.com
因此,ping 实际上查询的是“desktop-x.company-x.com 的 IP 地址是什么”。现在,当组织 DNS 服务器收到此查询时,它如何知道分配给 desk-x 的 IP 地址是多少,因为 desk-x 是由 DHCP 动态分配的私有 IP。
假设 DNS 服务器以某种方式跟踪(主机名 => IP 地址),那么为什么我无法使用“ping deskapos;company-x.com”从网络外部 ping 同一台机器?
答案1
Desktop-x 由 DHCP 动态分配一个私有 IP
有三个选项:
使用 Active Directory 时,工作站会通过发送DNS“更新”数据包到权威服务器(通常是 AD 域控制器)。
即使没有 AD 也可以实现这一点,但您需要允许未经身份验证的更新,或设置自定义更新方法。AD 只需使用 Kerberos(即 GSS-TSIG)即可实现自动化。
使用 DHCP 时,大多数工作站会在 DHCP 请求数据包中报告其主机名。然后,DHCP 服务器将联系权威 DNS 服务器(很可能使用与 isc-dhcpd 相同的 DNS“UPDATE”)将主机名插入 DNS。
这正是本地主机名(.lan/.home 域)在消费者路由器中的实现方式。
最后,如果 DHCP 服务器已为所有机器手动配置了租约并向其颁发静态地址,则可以手动添加 DNS 映射。
(DHCP 中没有任何地方规定地址必须是临时的、随机的或私有的。分配全局地址的静态租约是完全有效的。)
假设 DNS 服务器以某种方式跟踪(主机名 => IP 地址),那么为什么我无法使用“ping deskapos;company-x.com”从网络外部 ping 同一台机器?
有时你可以。
它不起作用的常见原因最多域:
这些机器具有私有(RFC1918)IPv4 地址,站点外部无法访问这些地址 - 互联网没有它们的路由。
通常情况下是这样,但并非总是如此。一些组织拥有大量全球 IPv4 地址池(例如 MIT 有一个 /8),每台机器都可以获得一个。而有些组织运行 IPv6,其中每一个机器总会得到一个。
网络位于防火墙后面,防火墙会阻止传入连接。
如果机器有全局地址(无论 IP 版本如何),这是必须的。即使地址是私有的(在 NAT 后面),这也非常重要,尽管人们往往会混淆这一点和NAT 本身。
这些机器具有本地(主机)防火墙,可以阻止传入连接,或者仅仅阻止传入的 ICMP ping。
这是独立 Windows 系统的默认设置:它们只接受来自其本地子网并将其从其他任何地方放下。
DNS 域有多个视图:内部查询看到的映射与一般公众看到的映射不同。通常“公共”视图根本没有内部主机。
(这不是标准 DNS 功能,但许多权威服务器(例如 Bind)通过检查查询的源 IP 来实现该功能。)