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

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

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

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

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

任何关于如何进一步调试的指示都将非常感激!

答案1

正如其他评论中提到的,您需要使用云 NAT这样没有 IP 地址的实例就可以连接到互联网。您可以按照分步说明设置 Cloud NAT这里

答案2

对于这个特殊的问题,我最终按照这里的说明设置了一个基于实例的 NAT:https://cloud.google.com/vpc/docs/special-configurations- 将实例配置为 NAT 网关。我缺少的步骤是 IPTables 配置;添加该配置后,我的问题就解决了。

然而,正如其他人所建议的那样,对于典型用例,使用 Cloud NAT 可能是目前在 GCP 上执行此操作的最佳/惯用方法。

相关内容