Nat

是否可以綁定到 Google Compute VM 實例上的公共 IP 地址?

  • August 30, 2019

我正在 Google Compute 實例上執行一個伺服器應用程序,它需要使用公共 IP 地址,因為它不支持 NAT/兼容(如果您想知道它是一個 MRCP)。我試圖了解這樣的事情是否可能。

我已經為我的虛擬機分配了一個公共 IP 地址,但我只能在內部地址 (10.xyz) 上接收流量。

如果您想接收來自網際網路的流量,您需要允許來自您允許的 IP 地址範圍的流量。[ https://cloud.google.com/vpc/docs/firewalls]預設情況下,有隱含的防火牆規則允許所有 VPC 內部流量到您的 VM 實例。

對於分配給 VM 實例的外部 IP 地址,未配置或綁定到 VM 實例內的任何網路介面。因此,您無法通過執行“ip address”命令來檢索外部 IP 地址。GCP平台中有一個IP地址映射表,用於將外部IP地址映射到VM實例,因此通過檢查映射表,到外部IP地址的流量將轉發到VM實例。如果你的軟體需要獲取外部ip,那麼你需要手動配置。

我認為,如果您可以在啟動伺服器應用程序之前在配置文件中設置 Listen/BindIP 或 Interface,這可能是可能的。(如 IP/介面=xxxx 埠=xxxx)

可能有更好的方法,我有一個類似的問題,這對我來說適用於 TCP/UDP。我沒有測試過 MRCP/SIP

要測試它是否可能,您將:

1.創建一個新的虛擬機進行測試:(不確定您執行的是什麼作業系統,因此這些命令可能不准確)

2.然後創建一個虛擬網路介面,如:

ifconfig eth0:1 publicipaddress up

3.然後用命令檢查: ifconfig 應該是這樣的:

eth0:1: flags=4163 mtu 1460 inet xxxxxxx 網路遮罩 xxxxxxxxxx 廣播 xxxxxxxxx

  1. 然後在以下位置使用監聽/綁定啟動您的應用程序:publicipaddress 或介面 eth0:1
  2. 編輯防火牆以允許所有測試
  3. 啟動防火牆服務然後執行:
  4. 在下面執行此命令:

iptables -t nat -A PREROUTING -p tcp –dport portyourapplicationislisteningon -j DNAT –to-destination yourpublicipaddress

在 TCP 上接收到握手,該 TCP 路由到您創建的虛擬介面,它將向客戶端回復正確的公共 IP。

如果您設置在握手後使用 UDP,那麼您需要啟動伺服器應用程序的一個實例,並將您的配置文件設置為偵聽多個 IP,例如:(internalIP 和 ExternalIP) 或 (eth0 & eth0:1) 這樣 UDP 將起作用當它進入內部地址時正確(10.xyz)

如果您使用 UDP 並且只能設置 ONE Bind/Listen IP/Interface。您可以嘗試將 bind/listenIP as: 0.0.0.0 嘗試在所有介面上偵聽/綁定。否則這可能不起作用,出於我的目的,當我僅綁定到公共 IP 並為 UDP 添加預路由規則時,UDP 僅部分起作用,但我沒有使用 MRCP 或 SIP。

如果您只能綁定到一個 ip/介面,也許其他人知道如何正確地重新路由 UDP。

引用自:https://serverfault.com/questions/980514