Networking
Google Compute Engine:無法從沒有外部 IP 的實例訪問網際網路
我正在嘗試從一些在 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]
雖然
- 網關實例可以訪問它
- 內部實例可以訪問網關
我認為它可能仍然與作業系統級別的路由有關,因為當我
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 。