假设Google HTTP服务器的IP地址是111.111.111.111
,并且我的计算机在局域网内被分配了这个IP地址。
我知道如果我访问localhost
,计算机就知道它正在访问自己,并且可能不会去询问路由器/网关?
但是,如果我访问网络管理员分配的 LAN IP 地址,与访问相比,会发生什么情况localhost
?
它会去询问路由器/网关谁111.111.111.111
是 eg 吗?路由器能欺骗/告诉它111.111.111.111
位于 LAN 之外并让它出去寻找它吗?更确切地说,NAT 可以将 LAN 路由111.111.111.111
到公共区域吗111.111.111.111
?
我之所以问这个问题,是因为我认为我的 ISP 为我提供了一个公共 IP 作为 LAN IP 地址(我真正连接到该公共 IP 的可能性较小),所以我想知道上面描述的细节以及我所问的问题是否可以实现。
答案1
但是,如果我访问网络管理员分配的 LAN IP 地址,与访问本地主机相比,会发生什么情况?
它会询问路由器/网关谁是谁吗,例如 111.111.111.111?
不会。一般来说,操作系统会意识到它拥有目标地址,并且不会将数据包发送到外面的任何地方。
例如,在 Linux 系统上,这通过路由表实现 - 如果您查看该local
表,您将看到所有分配的 IP 地址都有指向“lo”接口的 /32 路由。
在其他操作系统(例如 Windows 或 BSD)中,该机制可能更加不透明,但最终结果仍然相同。(唯一的例外是使用“jails”、“容器”、“网络命名空间”或“VRF”时 - 每个实例仅识别自己的 IP 地址,而不识别属于其他 jail/容器的 IP 地址。)
该地址是“公共”还是“私人”并不重要。
路由器能否欺骗/告诉它 111.111.111.111 位于 LAN 之外并告诉它出去寻找它?更准确地说,NAT 能否将 LAN 111.111.111.111 路由到公共地址,即真正的 111.111.111.111?
如果它与你电脑的 IP 地址完全匹配 – 不会。电脑根本不会联系路由器。
如果它是在同一子网中作为计算机的 IP 地址 – 可行,但有困难。路由器除了 NAT 之外还需要 Proxy-ARP。理论上,使用 Linux iptables 应该可行,但我不确定是否有任何最终用户路由器内置了该功能。
我之所以问这个问题,是因为我认为我的 ISP 为我提供了一个公共 IP 作为 LAN IP 地址(我不太可能真正连接到该公共 IP)
ISP 发放公网 IP 地址是正常的,因为 ISP 一般不发放局域网IP 地址:这是路由器的工作。ISP 仅为该路由器提供初始配置(并且仅当设备本身由 ISP 提供时)。路由器本身,当然是从 ISP 获取其地址。
所提供的设备实际上可能只是一台网桥(或桥接模式的路由器),在这种情况下接收公共 IP 地址是完全正常的。
话虽如此,但一些 ISP 以“借用”以前未使用的 IP 空间而闻名。例如,范围 1.0.0.0/8 多年来几乎未使用(直到 CloudFlare 将其占用),因此各种网络管理员有时决定将其用作标准私有地址范围的扩展。在这种情况下,最好联系客户服务并提交具体投诉,说明您无法在重叠地址上访问某些特定服务。
(请注意,100.64.0.0/10 范围不是公开的,恰恰相反。这是一个私有范围,仅供 ISP 和其客户在没有任何公有 IP 地址。
答案2
您的计算机将使用网络管理员设置的 DNS 机制,因为路由将先经过其基础设施,然后才会到达任何类型的外部 DNS。因此,如果您的管理员出于某种原因分配了他们不应该拥有的内部 IP 地址,并且该 IP 地址通常会转到外部位置 - 您的计算机将被路由到该内部系统。
虽然 ISP 有几种不同的方法来分配公共 IP 地址,但简单的答案是他们不是会为您提供另一个外部位置使用的 IP 地址。大多数情况下,这由 DHCP 处理,因此一旦公共 IP 变为非活动状态或其租约已过期,该 IP 很可能会被重新分配(这是 DNS 很重要的一个很好的理由 - 特别是如果您不是拥有静态 IP 地址块的大型公司)。
因此,重申一下:如果您的路由器告诉您的计算机111.111.111.111
在您的 LAN 之外,您的计算机将按照该路由出去,直到外部系统将其发送到111.111.111.111
(如果存在),而该路由应该只公开分配给一个地方。