我在 Macbook 上設定了一個 Apache HTTP 伺服器,這樣我就可以在學習 PHP 的同時存取 PHP 的全部功能。我沒有註冊網域名稱或一致的網路存取權限,因此在此伺服器上託管實際網站的想法不可行;我這樣做只是為了學習目的。
無論如何,我想知道一些事情。我注意到,當我在Web 瀏覽器中輸入我的私有IP 位址(不是環回位址,而是實際的DHCP 分配的位址)時,我可以訪問伺服器託管的網頁,我認為這意味著我可以從電腦外部存取它。但是,當我輸入我的公用 IP 位址時,我遇到網路逾時,我猜這意味著我無法從本機網路外部存取我的 Web 伺服器(除非連線非常慢)。
我想知道這是為什麼。是否設定了一層安全層來防止人們從外部存取 LAN 內的電腦?
答案1
從您的電腦開始,線路中可能存在三個阻塞躍點:
您的作業系統可能配置了防火牆並阻止傳入請求。您可以使用同一子網路/不同子網路上的另一台電腦進行檢查,但仍在家庭路由器後面。我對MAC作業系統不熟悉,所以我無法告訴你如何設定防火牆。
您連接的家庭路由器(或大多數 WiFi 路由器)使用網路位址轉換「隱藏」其後面的子網,並允許您的多個裝置在您從 ISP 獲得的單一全域 IP 位址上進行通訊。如果您從任何裝置從 LAN 向遠端伺服器發出請求,遠端伺服器將看到該請求是由您的路由器發起的。如果您從外部向您的公用 IP 位址發出請求,您實際上是在尋址您的路由器。如果您希望發送到路由器的所有 HTTP 請求都由您的筆記型電腦在其後面提供服務,則必須添加連接埠轉送在路由器的選單中將規則設定為筆記型電腦的 IP 位址和連接埠 80(標準 HTTP 連接埠),或連接埠 443(用於 HTTPS)。
如今,ISP 甚至不為您提供公共(全球可路由)IP 位址的現象越來越普遍。 ISP 也使用 NAT(保存全域 IPv4 位址),路由器的外部 IP 位址來自 ISP 的私有子網路。這需要在 ISP 的路由器中註冊連接埠轉送規則,但他們不會為您執行此操作。在這種情況下,您無法從網路存取您的筆記型電腦。
答案2
發生這種情況的原因是 NAT 轉換。
當您連接到網際網路時,您的 ISP 會為您提供一個公用 IP 位址,以便您可以與網際網路通訊。
當網路上的某人想要存取您的網路伺服器並輸入公用 IP 位址時,路由器需要知道請求將傳送到網路中的哪個位置。這稱為 NAT 轉換。這是透過設定連接埠映射來完成的。
網站使用 HTTP 流量,預設使用連接埠 80,因此您需要在路由器中建立一條規則來告知連接埠 80 需要轉送至內部 IP 位址。一旦完成此操作,並且外部人員在瀏覽器中輸入您的公用 IP 位址,您的路由器現在就知道它必須將請求轉送到您的 MacBook。
現在,問題還有一個補充。如果您設定了連接埠轉發,大多數路由器將無法理解您的公用 IP 位址是您自己的位址,因此您很可能仍然無法從您自己的公用 IP 位址存取您的網站。
你的macbook將請求發送到路由器,路由器將其發送到ISP,ISP將其發回,而路由器並不期待它,因此它忽略了該請求,導致超時,因為它無法連接到自身。