我有一个计算实例,其中有 2 个 NIC(nic0 和 nic1),连接到两个不同的 VPC(vpc0 和 vpc1)。
nic0 连接到 vpc0 nic1 连接到 vpc1
vpc0 有子网 192.168.1.0/24 vpc1 有子网 172.16.0.1/12
vpc0 仅具有 192.168.1.0/24 的路由,vpc1 具有到互联网的默认路由 - 0.0.0.0/0(以及 172.16.0.0/12)
目的是仅通过 vpc1 上的实例的 nic1 进行公共访问。但是,当我使用此配置创建 ubuntu 实例时,我无法使用 SSH(或使用控制台或 ping)。路由混乱。我也无法通过 nic0 进入。
我了解 gcp 仅为 nic0 添加路由,此处的文档https://cloud.google.com/vpc/docs/create-use-multiple-interfaces说要调整到 nic1 的路由,但为此我需要能够 ssh。
在文档页面上,有一段话写着“我无法使用外部 IP 连接到辅助接口,DHCP 服务器仅在 VM 的主网络接口上编程默认路由。如果您想使用外部 IP 连接到辅助接口,则有两个选项。如果只需要在辅助网络接口上连接外网,则可以在该网络接口上设置默认路由。否则,您可以使用配置策略路由来在您的虚拟机中使用基于源的策略路由配置单独的路由表。”
如何在网络接口 nic1 上设置默认路由?在 vpc 上设置路由似乎没有帮助。
我通过同一网络上的另一个实例登录到该实例,并能够看到问题实例具有通过 nic0 (192.168.0.1) 到互联网的默认路由。我尝试通过启动脚本删除此路由,并从启动脚本中添加通过 nic1 的新路由,但这似乎也不起作用。通过 nic0 的路由被删除,但通过 nic1 的路由未被添加。
如果 ssh(或 ping 或控制台访问)不起作用,我不知道如何修复此问题。这是一个路由问题,我希望能够调整路由。最后,我希望能够实例化一个具有两个网卡的实例,并且互联网访问在 nic1 而不是 nic0 上,而不必 ssh 进入机器并修复路由。我希望启动脚本可以正常工作。
答案1
如果您创建的 VM 将 NIC0 连接到 VPC0,将 NIC1 连接到 VPC1,那么如果没有在 Linux 级别进行某些配置,它将无法工作(因为您的 VPC0 无法访问 Internet,而 VPC1 可以访问 Internet)。
我已测试过并能够复制您遇到的问题。
在我的案例中,解决方案是创建一个 VM,其中 NIC0 连接到具有 Internet 访问权限的网络(在您的情况下是 VPC1),NIC1 连接到 VPC0。这样,当 VM 启动并具有 Internet 访问权限时,NIC0 会自动配置 - 而 NIC1 则提供与 VPC0 的连接。
编辑 - 2019 年 11 月 13 日
您也可以通过在 .bashrc 中添加一行来在每次此 VM 启动时添加自定义路由;从另一个框登录到此 VM 并输入:
sudo nano .bashrc
并在文件末尾添加一行:
sudo route add default gw 172.16.0.1
我假设 172.16.0.1 是您在 VPC1 中的网关。
重新加载.bashrc文件:
source .bashrc
例如 ping google.com - 你应该看到响应时间:)
我已经在 Ubuntu 18.04 上测试过这一点,但我的方法也适用于旧版本。