Google Compute Engine:无法从没有外部 IP 的实例访问互联网

xdl*_*xdl 2 networking firewall google-compute-engine google-cloud-platform

我正在尝试从 VPC 网络上没有外部 IP 地址的某些实例安装一些库。该网络上有一个实例确实具有外部 IP 地址,因此我尝试将其用作 IP 转发网关的 Internet 访问。

我目前正在尝试验证我是否已正确设置:

  • (防火墙规则)所有实例都允许在 VPC 网络上使用 UDP、TCP、ICMP。通过确认每个实例可以相互ping通来验证这一点,并且可以执行nc -l <port>nc -v <ip> <port>恶作剧来检查它们可以通过tcp打开隧道。
  • (VM 创建、OS)网关实例已在创建时设置为允许 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]
Run Code Online (Sandbox Code Playgroud)

虽然

  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
Run Code Online (Sandbox Code Playgroud)

任何有关如何进一步调试的指示将不胜感激!

小智 5

正如其他评论中所述,您将需要使用Cloud NAT,以便没有 IP 地址的实例可以连接到 Internet。您可以按照此处的分步说明设置 Cloud NAT 。