NAT後面的Web伺服器,如何監聽公用IP位址

NAT後面的Web伺服器,如何監聽公用IP位址

我有一個使用 NAT 在防火牆後面運行的 Debian Web 伺服器 (nginx)。 Web 伺服器託管著多個需要 SSL 及其自己的 IP 位址的網站。我想讓 SSL 網站僅偵聽其特定 IP 位址,而共用網站僅偵聽共用 IP。

現在,我正在監聽所有網域的通配符 *,我認為這意味著它正在監聽單一 LAN 位址並根據主機名稱而不是 IP 位址提供網站內容。我想糾正這一點。

正確的做法是什麼?是為每個 IP 位址建立 1:1 NAT,並將 LAN IP 新增至網路介面進行偵聽,然後將 LAN IP 指派給特定網域嗎?或者,還有更好的方法?有沒有辦法傳遞公共IP並據此採取行動?謝謝。

答案1

不可以,做了NAT之後就不能再通過原來的目的IP位址了,至少不能直接通過。

我將使用 192.0.2.0/24 作為外部 IP 區塊,使用 198.51.100.0/24 作為內部 IP 區塊(請參閱 RFC5737)。

您可以做的一些事情包括:

  • 將每個外部 IP 上的目標連接埠 NAT 到內部 IP 上的一組不同連接埠。例如,NAT 192.0.2.1:80 和 192.0.2.1:443 到 198.51.100.1:80 和 198.51.100.1:443,然後 NAT 192.0.2.2:80 和 192.03. .51 .100.1:444。配置 Web 伺服器以偵聽不同的連接埠以取得適當的服務。請務必選擇未用於其他用途的端口,並檢查您的防火牆設定。
  • 為 Web 伺服器指派額外的內部 IP。例如,分配Web伺服器198.51.100.1和198.51.100.2。將適當的外部 IP/連接埠對轉換為對應的內部 IP/連接埠對(例如 192.0.2.1 到 198.51.100.1,以及 192.0.2.2 到 198.51.100.2)。指示 nginx 將適當的服務綁定到適當的內部 IP。

如果您採用後一種解決方案,您的環境將更簡單且更符合標準,因為您不會處理不尋常的連接埠號碼和連接埠轉換,但您需要為每個網路伺服器分配多個內部IP(我猜您有隻有一個)。另外,如果您使用後一種解決方案,則可以使用 1:1 NAT。

也就是說,如果您根本沒有任何理由將 Web 伺服器放在 NAT 後面(NAT 不是防火牆),只需偵聽外部 IP(這樣做也需要更改拓撲)。

答案2

聽起來您希望每個網站都有不同的公用 IP 位址。這意味著防火牆必須提供不同的公用 IP 位址。然後,防火牆可以將不同 IP 位址的請求轉送到 nginx 伺服器,也可以將這些請求轉送到同一 IP 位址上的不同連接埠。然後您可以讓 nginx 伺服器做出相應的回應。

具體如何設定取決於您的防火牆。例如,使用 iptables,您可以在腳本中執行以下操作:

KINCAID=192.168.1.112
EXTIPJMN=50.60.70.80
iptables -t nat -A PREROUTING -d $EXTIPJMN -p tcp -i $EXT --dport 8081 -j DNAT --to-destination $KINCAID:8080

這會將來自 IP 位址 EXTIPJMN (50.60.70.80) 和連接埠 8081 的請求路由到 IP 位址 KINCAID (192.168.1.112) 和連接埠 8080 的內部伺服器

即使透過 https,也可以從相同 IP 位址為不同的網站提供服務,大多數現代用戶端(但不是全部)都支援這一點。

相關內容