Google Cloud 上有 2 個 NIC 的 CentOS 7

Google Cloud 上有 2 個 NIC 的 CentOS 7

我有 2 個 VPC

  • VPC1 - 預設 google 子網
  • VPC2 - 不在 VPC1 中的單一附加子網

伺服器(instdual)設置,帶有來自 VPC1 的 nic0 和來自 VPC2 的 nic1

兩個網路卡上的靜態公用 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 計算 ssh multinic-vm

  1. 使用 ifconfig 為 nic1 設定策略路由。以下範例假設 GCP 已將內部 IP 位址 192.168.0.2 指派給 nic1,閘道為 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 src 192.168.0.2 dev eth1
sudo ip route def. add從 192.168.0.2/32 表 rt1
sudo ip 規則加入到 192.168.0.2/32 表 rt1

  1. 對實例上的其他介面(nic2、nic3...nic7)重複步驟 2 中的指令。

答案2

谷歌雲端有一些關於如何執行此操作的文件:https://cloud.google.com/vpc/docs/create-use-multiple-interfaces 但這缺乏有關如何確保其他介面在重新啟動後也能再次工作的資訊。

為了使其他外部 IP 持久存在,您需要確保在重新啟動後執行啟動策略路由的命令,但僅在啟動其他介面後才執行。這是由 dhcp 客戶端完成的。所以我能找到的最好方法是將腳本放入 /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

相關內容