Google Cloud 上配有 2 个 NIC 的 CentOS 7

Google Cloud 上配有 2 个 NIC 的 CentOS 7

我有 2 个 VPC

  • VPC1-默认 Google 子网
  • VPC2 - 不在 VPC1 中的单个附加子网

服务器(安装)设置,nic0 来自 VPC1,nic1 来自 VPC2

两个网卡上都有静态公共 IP

  • 从外部 ping 公共 IP -> VPC1 正常运行
  • 从外部 ping 公共 IP -> VPC2 不起作用

设置另外 2 个实例 insta 和 instb,一个仅在 VPC1 上,另一个仅在 VPC2 上

  • 从外部 ping 公共 IP -> VPC1 工作 (insta)
  • 从外部 ping 公共 IP -> VPC2 正在工作 (instb)

  • 从 insta 我可以 ping instdual nic0

  • 从 instb 我可以 ping instdual nic1

  • 从 insta 我无法 ping nic1 的私有 IP

  • 从 instb 我无法 ping nic0 的私有 IP

VPC 是网络对等的 - 路由显示正确

防火墙设置默认允许所有规则来消除防火墙问题。

基本上,在 instdual 上我只能通过 nic0 公共 IP 访问它,而不能通过 nic1 公共 IP 访问它。

有什么想法吗?我现在落后了 12 杯咖啡,而且看到了双倍的量。

答案1

这是所缺少的(现在 100% 正常工作):

按照以下步骤为具有多个接口的基于 Linux 的实例配置策略路由:

  1. 连接到配置了多个网络接口的实例:

gcloud compute ssh multinic-vm

  1. 使用 ifconfig 为 nic1 配置策略路由。以下示例假设 GCP 已为 nic1 分配了内部 IP 地址 192.168.0.2,网关为 192.168.0.1。

sudo ifconfig eth1 192.168.0.2 网络掩码 255.255.255.255 广播 192.168.0.2 mtu 1430
sudo echo "1 rt1" | sudo tee -a /etc/iproute2/rt_tables #(sudo su - 如果权限被拒绝,则首先)
sudo ip route add 192.168.0.1 src 192.168.0.2 dev eth1
sudo ip route add default via 192.168.0.1 dev eth1 table rt1
sudo ip rule add from 192.168.0.2/32 table rt1
sudo ip rule add to 192.168.0.2/32 table rt1

  1. 对实例上的其他接口 (nic2、nic3.... nic7) 重复步骤 2 中的命令。

答案2

Google Cloud 在此处提供了一些有关如何执行此操作的文档:https://cloud.google.com/vpc/docs/create-use-multiple-interfaces 但这缺少有关如何确保附加接口在重启后也能再次工作的信息。

为了使附加的外部 IP 持久,您需要确保在重新启动后执行激活策略路由的命令,但仅在激活附加接口后才执行。这是由 dhcp-client 完成的。所以我能找到的最佳方法是将一个脚本放入 /etc/dhcp/dhclient-exit-hooks.d/ 中,其中包含以下内容:

#!/bin/sh
#

if [[ $reason == "REBOOT" || $reason == "BOUND" ]] ; then
    sudo ip route add 192.168.0.1 src 192.168.0.2 dev eth1
    sudo ip route add default via 192.168.0.1 dev eth1 table rt1
    sudo ip rule add from 192.168.0.2/32 table rt1
    sudo ip rule add to 192.168.0.2/32 table rt1
fi

(将 IP 更改为您的内部网络的 IP)

如果您还希望能够在启动时将服务器(如 nginx 或 httpd)绑定到其中一个 IP,那么您会注意到这会失败,因为服务器在 dhcp-client 完成其任务之前启动。解决此问题的一种方法是允许软件绑定到尚未实际激活的 IP。为此,

net.ipv4.ip_nonlocal_bind=1

进入 /etc/sysctl.d/10-policyrouting.conf

相关内容