Networking

Google Compute Engine:無法從沒有外部 IP 的實例訪問網際網路

  • January 10, 2019

我正在嘗試從一些在 VPC 網路上沒有外部 IP 地址的實例中安裝一些庫。該網路上有一個實例具有外部 IP 地址,因此我嘗試將其用作 IP 轉發網關的 Internet 訪問。

我目前正在嘗試驗證我是否已正確設置:

  • (防火牆規則)所有實例都允許在 VPC 網路上使用 UDP、TCP、ICMP。已經通過確認每個實例可以互相 ping 來驗證這一點,並且可以做一些nc -l <port>惡作劇nc -v <ip> <port>來檢查他們是否可以通過 tcp 打開隧道。
  • (VM 創建,作業系統)網關實例已在創建時設置為允許 IP 轉發。它也已在作業系統級別啟用sudo sysctl -w net.ipv4.ip_forward=1.
  • (路由)已創建新路由來路由“allow-internet-access”標籤的目標 IP,以指定下一躍點是網關實例。VPC 網路上的非網關實例已應用該標籤。

但是,我仍然無法訪問網際網路 IP,例如命令sudo apt-get install default-jdk失敗並顯示:

E: Failed to fetch http://europe-west1.gce.archive.ubuntu.com/ubuntu/pool/main/libx/libxt/libxt-dev_1.1.5-0ubuntu1_amd64.deb  Unable to connect to europe-west1.gce.archive.ubuntu.com:http: [IP: 35.205.79.146 80]

雖然

  1. 網關實例可以訪問它
  2. 內部實例可以訪問網關

我認為它可能仍然與作業系統級別的路由有關,因為當我ip route get對網際網路地址執行操作時,它為我提供了預設網關(10.0.0.1),我不確定是否添加新的路線應該改變這個?(網關實例的IP是10.0.0.5,內部實例是10.0.0.3)。

ip route get 35.205.79.146
35.195.141.26 via 10.0.0.1 dev ens4  src 10.0.0.3
   cache

任何有關如何進一步調試的指針將不勝感激!

對於這個特定問題,我最終按照此處的說明設置基於實例的 NAT:https ://cloud.google.com/vpc/docs/special-configurations - 將實例配置為 NAT 網關。我缺少的步驟是 IPTables 配置;添加後,它解決了我的問題。

正如其他人所建議的那樣,對於典型的案例,現在在 GCP 上使用 Cloud NAT 可能是最好的/慣用的方法。

如其他評論中所述,您將需要使用Cloud NAT,以便您的沒有 IP 地址的實例可以連接到網際網路。您可以按照此處的分步說明設置 Cloud NAT 。

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