我正在尝试从 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]
虽然
- 网关实例可以访问它
- 内部实例可以访问网关
我认为它可能仍然与操作系统级别的路由有关,因为当我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
答案2
对于这个特殊的问题,我最终按照这里的说明设置了一个基于实例的 NAT:https://cloud.google.com/vpc/docs/special-configurations- 将实例配置为 NAT 网关。我缺少的步骤是 IPTables 配置;添加该配置后,我的问题就解决了。
然而,正如其他人所建议的那样,对于典型用例,使用 Cloud NAT 可能是目前在 GCP 上执行此操作的最佳/惯用方法。