为什么我无法从网络外部访问我的 Web 服务器?

use*_*544 6 networking apache-http-server wireless-networking

我在我的 Macbook 上设置了一个 Apache HTTP 服务器,这样我就可以在学习 PHP 的同时访问 PHP 的全部功能。我没有注册域名或一致的网络访问权限,因此在此服务器上托管实际网站的想法是不可行的;我这样做只是为了学习目的。

无论如何,我在想什么。我注意到当我在网络浏览器中输入我的私有 IP 地址(不是环回地址,而是实际的 DHCP 分配地址)时,我可以访问由我的服务器托管的网页,我认为这意味着我可以从我的计算机外部访问它. 然而,当我输入我的公共 IP 地址时,我得到了一个网络超时,我猜这意味着我无法从本地网络外部访问我的 Web 服务器(除非连接真的很慢)。

我想知道这是为什么。是否设置了一层安全措施来防止人们从外部访问 LAN 内的计算机?

小智 8

从您的计算机开始,线路中可能存在三个阻塞跃点:

  • 您的操作系统可能配置了防火墙并阻止传入请求。您可以使用同一子网/不同子网上的不同机器进行检查,但仍位于您的家庭路由器后面。我不熟悉 MAC OS 所以我不能告诉你如何配置防火墙。

  • 您连接的家用路由器(或大多数 wifi 路由器)使用NAT来“隐藏”其背后的子网,并允许您的多个设备通过您从 ISP 获得的单个全局 IP 地址进行通信。如果您从 LAN 向任何设备向远程服务器发出请求,远程服务器将看到该请求是由您的路由器发起的。如果您从外部向您的公共 IP 地址发出请求,您实际上是在为您的路由器寻址。如果您希望所有发往路由器的 HTTP 请求都由其背后的笔记本电脑提供服务,您必须在路由器菜单中将端口转发规则添加到笔记本电脑的 IP 地址和端口 80(标准 HTTP 端口),或端口 443 HTTPS。

  • 如今,ISP 甚至不为您提供公共(全球可路由)IP 地址的情况越来越普遍。ISP 还使用 NAT(以保存全局 IPv4 地址),您路由器的外部 IP 地址来自您 ISP 的私有子网。这需要在 ISP 的路由器中注册端口转发规则,他们不会为您做这些。在这种情况下,您无法从 Internet 访问您的笔记本电脑。


LPC*_*hip 6

发生这种情况的原因是 NAT 转换。

当您连接到 Internet 时,您的 ISP 会为您提供一个公共 IP 地址,以便您可以与 Internet 通信。

当互联网上的某个人想要访问您的网络服务器,并且他们输入了公共 IP 地址时,路由器需要知道请求在网络中的哪个位置。这称为 NAT 转换。它是通过设置端口映射来完成的。

网站使用默认为端口 80 的 HTTP 流量,因此您需要在路由器中创建一个规则来告知端口 80 需要转发到内部 IP 地址。一旦完成,并且外部有人在他们的浏览器中输入您的公共 IP 地址,您的路由器现在知道它必须将请求转发到您的 macbook。

现在,这个问题还有一个补充。如果你设置了端口转发,大多数路由器不会知道你的公网IP地址是你自己的,所以你很可能仍然无法从你自己的公网IP地址访问你的网站。

您的 macbook 将请求发送到路由器,路由器将其发送给 ISP,ISP 将其发回,而路由器并不期待它,因此它会忽略该请求,从而导致超时,因为它无法连接到自己。