我在 Macbook 上设置了一个 Apache HTTP 服务器,这样我就可以一边学习 PHP 语言一边使用 PHP 的全部功能。我没有注册域名或稳定的网络访问,因此在这个服务器上托管实际网站的想法不可行;我这样做只是为了学习目的。
无论如何,我在想一些事情。我注意到,当我在 Web 浏览器中输入我的私有 IP 地址(不是环回地址,而是实际的 DHCP 分配地址)时,我可以访问由我的服务器托管的网页,我认为这意味着我可以从我的计算机外部访问它。但是,当我输入我的公共 IP 地址时,我收到网络超时,我猜这意味着我无法从本地网络外部访问我的 Web 服务器(除非连接真的很慢)。
我想知道这是为什么。是否设置了一层安全措施,以防止人们从外部访问 LAN 内的计算机?
答案1
从您的计算机开始,线路中可能有三个阻塞跳转:
您的操作系统可能配置了防火墙并阻止了传入请求。您可以使用同一子网/不同子网中但仍位于家庭路由器后面的其他计算机来检查这一点。我不熟悉 MAC OS,所以我不能告诉你如何配置防火墙。
你连接的家用路由器(或大多数 wifi 路由器)使用NAT“隐藏”其后的子网,并允许您的多个设备通过从 ISP 获得的单个全局 IP 地址进行通信。如果您从 LAN 向远程服务器发出请求,无论从哪个设备,远程服务器都会看到该请求来自您的路由器。如果您从外部向您的公共 IP 地址发出请求,那么您实际上是在寻址您的路由器。如果你希望所有发往路由器的 HTTP 请求都由后面的笔记本电脑处理,你必须添加一个端口转发将路由器菜单中的规则设置为笔记本电脑的 IP 地址和端口 80(标准 HTTP 端口)或 HTTPS 端口 443。
如今,ISP 甚至不向您提供公共(全局可路由)IP 地址的情况越来越普遍。ISP 还使用 NAT(以保存全局 IPv4 地址),路由器的外部 IP 地址来自 ISP 的私有子网。这需要在 ISP 的路由器中注册端口转发规则,但他们不会为您这样做。在这种情况下,您无法从互联网访问您的笔记本电脑。
答案2
发生这种情况的原因是由于 NAT 翻译。
当您连接到互联网时,您的 ISP 会为您提供一个公共 IP 地址,以便您可以与互联网通信。
当互联网上的某个人想要访问您的网络服务器并输入公共 IP 地址时,路由器需要知道请求将发往网络中的哪个位置。这称为 NAT 转换。它是通过设置端口映射来完成的。
网站使用 HTTP 流量,默认端口为 80,因此您需要在路由器中创建一条规则,告知端口 80 需要转发到内部 IP 地址。完成此操作后,如果外部有人在浏览器中输入您的公共 IP 地址,您的路由器现在就知道必须将请求转发到您的 MacBook。
现在,问题又多了一个。如果你设置了端口转发,大多数路由器都不会理解你的公网 IP 地址就是你自己的 IP 地址,所以你很可能仍然无法从你自己的公网 IP 地址访问你的网站。
您的 MacBook 将请求发送到路由器,路由器将其发送给 ISP,ISP 将其发回,而路由器并没有预料到会收到该请求,因此它会忽略该请求,最终导致超时,因为它无法连接到自身。