無法從內部網路 ping 靜態 IP,只能從外部網路 ping 靜態 IP

無法從內部網路 ping 靜態 IP,只能從外部網路 ping 靜態 IP

我正在運行 ubuntu 並且正在運行 apache,但是,我無法在內部 ping 到我的靜態 IP,也無法http://207.40.XXX.XX使用我的靜態 IP 瀏覽 Web 伺服器。我只能 ping/瀏覽localhost, 127.0.0.1, and 192.168.0.120 或者 207.40.XXX.XX只能來自外界。

# cat /etc/hosts
127.0.0.1       localhost
127.0.1.1       my-server.myhost.com my-server

# hostname
my-server

# netstat -tapn
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      -                  
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      -               
tcp        0      0 127.0.0.1:29754         0.0.0.0:*               LISTEN      -               
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      -               
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN 

有什麼想法為什麼這不起作用嗎?

答案1

您的 NAT 網關的行為方式不允許。這可能是它的工作原理:

  1. 您從 192.168.0.5 發送 ICMP Echo 請求到 207.40.123.45
  2. 這透過您的路由器進行路由。
  3. 路由器內的 NAT 閘道將請求重寫為來自 207.40.123.45(它是靜態 IP 位址)
  4. 您的路由器回覆 ICMP Echo 請求
  5. 由於您的路由器不支援 ICMP 狀態,因此它永遠不會將 ECHO 回覆傳回給您。

HTTP協定

  1. 您從 192.168.0.5 傳送 TCP/80 連線請求到 207.40.123.45
  2. 這透過您的路由器進行路由
  3. 您的 NAT 閘道將資料包重寫為即將到來的資料包207.40.123.45:41345 至 207.40.123.45:80
  4. 您的 NAT 網關注意到存在連接埠轉發,因此將資料包轉發到 192.168.0.120:80
  5. 192.168.0.120 的伺服器回覆來自 207.40.123.45:41345 的連線嘗試
  6. 您的 NAT 閘道看到回覆並將回覆中的 To: 位址重寫為 192.168.0.5:36311,但 From: 保持不變 (192.168.0.120:80)
  7. 您位於 192.168.0.5 的電腦從 192.168.0.120 取得了一個它從未要求過的資料包,並將其丟棄在地板上。
  8. 你的連結會失效,永遠不會打開。

請注意,ping 失敗的原因可能與 HTTP 失敗的原因相同。這稱為「NAT 髮夾」。

您需要的是一個足夠聰明的 NAT 網關,在第 6 步它還會重寫來源地址。

答案2

雖然1138的答案是正確的,但我只是想詳細解釋一下「髮夾NAT」是什麼,它是如何運作的,以及為什麼在這種情況下有必要。如果您不關心 IP、NAT 和路由的具體細節,請隨意忽略我的其餘(相當冗長)答案。

如果沒有髮夾,以下是嘗試從本機 LAN 用戶端 (192.168.0.5) 透過外部 IP 位址 (207.40.123.45) 到 Web 伺服器的 HTTP 連線期間發生的情況:

  1. 192.168.0.5 將其 SYN 封包傳送至 207.40.123.45,連接埠 80。

  2. 設定為將 207.40.123.45:80 轉送至 192.168.0.120:80 的路由器將封包的目標位址重寫為 192.168.0.120,然後將封包傳送到 Web 伺服器。

  3. Web伺服器收到SYN封包,並向發送者的位址發送回覆SYN-ACK封包,即192.168.0.5。由於 192.168.0.5 位於同一網絡,因此網絡伺服器將資料包直接傳送到 192.168.0.5。

  4. SYN-ACK 封包來自192.168.0.120到達 192.168.0.5,但那裡的主機沒有期待來自 192.168.0.120 的 SYN-ACK,因此它被丟棄/拒絕。 192.168.0.5 的主機繼續等待來自 207.40.123.45 的答案 SYN-ACK,但當然,該封包永遠不會到達。連線嘗試最終會逾時,可能在重試幾次之後,最終客戶端和 Web 伺服器無法建立連線。

這個問題可以透過路由器在步驟 2 中套用「髮夾 NAT」來解決。簡而言之,解決方案是欺騙客戶端和網路伺服器透過路由器發送相互的流量。這是透過應用巧妙地完成的NAT的第二階段在步驟 2 中,除了通常應用於連接埠轉送的一階段。下面又是這個序列,這次加入了髮夾 NAT:

  1. 與之前一樣,192.168.0.5 將其發送到 207.40.123.45(連接埠 80)的 SYN 封包傳送到路由器。

  2. 和以前一樣,路由器收到 SYN 封包,並根據其配置的連接埠轉送規則,將目標位址重寫為 192.168.0.120。然而,這一次,路由器注意到它將把資料包「髮夾」回接收它的同一網絡,因此它也重寫了資料包的來源位址到路由器自己的 LAN 位址(例如:192.168.0.1)。然後路由器將封包傳送到位於 192.168.0.120 的網路伺服器。

  3. Web 伺服器接收 SYN 封包,並將其回應 SYN-ACK 封包發送回發送者的位址,這次是192.168.0.1。因此,答案返回到路由器。

  4. 路由器從網路伺服器接收 SYN-ACK,並識別出這是對最近 NAT(兩次)的封包的回應。因此,路由器盡職盡責地反轉兩個 NAT,並且回覆封包現在具有來源位址 207.40.123.45 和目標位址 192.168.0.5。因此,回覆被傳送到 192.168.0.5,TCP 連線握手繼續,客戶端和 Web 伺服器能夠成功通訊。

因此,透過路由器中的髮夾支持,192.168.0.5 上的主機認為它正在與207.40.123.45 上的Web 伺服器通信,而192.168.0.120 上的Web 伺服器認為它正在與路由器本身(192.168.0.1) 上的客戶端通訊。當髮夾時,兩台主機之間的所有流量都會經過路由器,即使兩台主機實際上位於同一網路上。這顯然是網路資源的次優利用,也是為什麼設定分割 DNS 通常優於依賴髮夾的主要原因。

答案3

您使用哪種防火牆?聽起來好像 NAT 髮夾沒有打開。

相關內容