![无需 NAT,即可从私有网络访问具有公共 IP 的服务器](https://linux22.com/image/747262/%E6%97%A0%E9%9C%80%20NAT%EF%BC%8C%E5%8D%B3%E5%8F%AF%E4%BB%8E%E7%A7%81%E6%9C%89%E7%BD%91%E7%BB%9C%E8%AE%BF%E9%97%AE%E5%85%B7%E6%9C%89%E5%85%AC%E5%85%B1%20IP%20%E7%9A%84%E6%9C%8D%E5%8A%A1%E5%99%A8.png)
是否可以从专用网络访问公共服务器(即具有公共 IP 地址的服务器)而无需 NAT?换句话说,如果我将公共地址提供给服务器,将专用地址提供给 Intranet 中的主机,Intranet 是否可以提供公共服务?
答案1
不。
私有网络很可能能够将数据包发送到公共 IP 地址(假设私有网络具有正确配置的路由器,该路由器在公共互联网和私有内部网络上均具有接口)。但公共互联网上的服务器将无法向未进行 NAT 的私有网络发送回复,原因很简单,因为服务器不知道将响应数据发送到何处。
为了使计算机在网络上互相传输 IP,它们必须知道正在与之通信的对方的 IP 地址,以及获取该 IP 地址的下一步是什么。如果 IP 地址位于同一子网中,则您的计算机将直接询问本地子网上的“谁拥有 IP 地址 wxyz”,然后直接与响应的计算机通信。如果 IP 不在同一子网中,则计算机将遵循其路由表中的说明(通常,将数据包发送到 IP 配置中列为“默认网关”的本地路由器)。
接收数据包的每个网络间节点(此时通常为路由器)都会查看目标 IP 地址,并做出类似的决定,确定谁是链中的下一跳,以便将此数据包传送到最终目的地。如此反复,直到它最终到达预定目的地。
但这一切都依赖于数据包头中列出的目的地(这是 IP 协议所要求的),以及网关和路由器知道如何将数据发送到 IP 所属的网络。如果您有一个非 NAT 私有 IP 地址,那么这些路由器将不知道如何传送数据包,并且会将其丢弃。它变成了电子版的“死信”,永远消失了。
NAT 的作用是使用公共 IP 地址(或地址西文) 作为代理为您的专用网络进行通信的中间人。当它看到出站流量时,它会更改标头的“在此地址回复我”部分以使用其自己的公共 IP;NAT 设备会保留一个查找表,以查找它正在为谁中继通信,这样当响应到达时,它可以将它们转发到专用网络上的正确 IP。如果没有该地址转换功能,专用网络上的计算机就无法与公共互联网上的计算机进行 TCP/IP 通信。
答案2
除了顶部的“不”之外,@Ruscal 的答案是正确的,但不完整。
答案是极其肯定的“是的,有时,但取决于如何设置,且是有限的”。
至少有 2 个解决方法 -但它们都需要一个可以通过私有 IP 访问的系统,但该系统又可以访问互联网,例如具有公共 IP 的第二个接口- 这在路由器上很常见,在服务器上也并非闻所未闻(但并不常见)
在上述情况下,解决方法包括:
- 使用该系统作为代理。
- 在该系统与外部系统之间建立 VPN,然后通过该系统使用 VPN 或隧道。