為額外的網路介面設定路由


本教學課程說明如何建立具有多個網路介面的虛擬機器 (VM) 執行個體,每個介面都會連結至不同的虛擬私有雲 (VPC) 網路。此外,本教學課程也提供範例,說明如何在 Linux VM 上設定路由,以便成功執行 nic1 介面的 ping 作業。

本教學課程中的轉送設定適用於兩種網路介面類型:vNIC 和動態網路介面 (NIC)。雖然本教學課程的範例使用的是含有多個 vNIC 的執行個體,但您可以為含有動態 NIC 的執行個體設定相同的範例。

具有多個網路介面的執行個體稱為多 NIC 執行個體

費用

在本文件中,您會使用 Google Cloud的下列計費元件:

您可以使用 Pricing Calculator 根據預測用量產生預估費用。 新 Google Cloud 使用者可能符合申請免費試用的資格。

事前準備

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Compute Engine API.

    Enable the API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Compute Engine API.

    Enable the API

範例設定

下圖顯示您在本教學課程中建立的虛擬私有雲網路、子網路和執行個體,以及可用於資源名稱和子網路 IP 位址範圍的範例值:

圖 1. 在本教學課程中,您會建立兩個 VPC 網路,每個網路各有兩個子網路。所有子網路都位於同一個地區。此外,您還會建立三個執行個體:一個多 NIC 執行個體連結至前兩個子網路,以及在其餘兩個子網路中各建立一個執行個體 (按一下可放大)。

建立兩個虛擬私有雲網路

如要建立多 NIC 執行個體,您連線的虛擬私有雲網路必須已存在。建立兩個虛擬私有雲網路。在本教學課程中,每個虛擬私有雲網路都有兩個子網路。

如要建立範例設定中的設定,請使用下列值建立網路和子網路:

  • 名為 network-1 的網路,包含下列項目:
    • 名為 subnet-1 的子網路,其主要 IPv4 位址範圍為 10.10.1.0/24
    • 名為 subnet-3 的子網路,其主要 IPv4 位址範圍為 10.10.3.0/24
  • 名為 network-2 的網路,其中包含下列項目:

    • 名為 subnet-2 的子網路,其主要 IPv4 位址範圍為 10.10.2.0/24
    • 名為 subnet-4 的子網路,其主要 IPv4 位址範圍為 10.10.4.0/24

主控台

  1. 在 Google Cloud 控制台中,前往「VPC Networks」(虛擬私有雲網路) 頁面。

    前往「VPC networks」(虛擬私有雲網路)

  2. 按一下「建立虛擬私有雲網路」

  3. 在「Name」欄位中,輸入 VPC 網路的名稱。

  4. 在「Subnet creation mode」(建立子網路模式) 選擇 [Custom] (自訂)

  5. 在「New subnet」(新的子網路) 區段中,指定下列項目:

    1. 提供這個子網路的 [Name] (名稱)
    2. 選取「區域」。請確認您建立的兩個 VPC 網路,至少有一個子網路使用相同的地區。在下一個章節中建立多 NIC 執行個體時,請使用這個區域。範例設定會為所有子網路使用相同的區域。
    3. 輸入 [IP address range] (IP 位址範圍)。這是子網路的主要 IPv4 範圍

      如果您選取的範圍不是 RFC 1918 位址,請確認該範圍不會與現有設定衝突。詳情請參閱「IPv4 子網路範圍」。

    4. 按一下 [完成]

  6. 按一下「Add subnet」建立第二個子網路。請使用這個第二個子網路,從執行個體網路介面的主子網路範圍以外測試 ping

  7. 在「Firewall rules」專區中,選取「allow-custom」規則,然後按一下「EDIT」。請按照下列方式設定規則,確保您可以測試從測試執行個體到 multi-nic-vm 的連線:

    1. 在「IPv4 範圍」下方,保留子網路 IPv4 位址範圍的核取方塊。
    2. 在「其他 IPv4 範圍」下方輸入 35.235.240.0/20,即可使用 SSH 連線至測試執行個體。加入這個範圍可允許使用 Identity-Aware Proxy (IAP) TCP 轉送的 SSH 連線。詳情請參閱「允許 VM 的 SSH 入站連線」。
    3. 在「Protocols and ports」(通訊協定與通訊埠) 下方,選取「specified protocols and ports」(指定的通訊協定與通訊埠)
      1. 選取「TCP」TCP,然後輸入 22, 3389 以允許遠端桌面協定和安全殼層。
      2. 選取「其他」,然後輸入 icmp 即可允許 ICMP。
  8. 按一下 [建立]。

  9. 重複執行這些步驟,建立第二個 VPC 網路。請確認子網路 IP 位址範圍不會與第一個網路的子網路重疊,例如範例設定中使用的 IP 位址範圍。

gcloud

  1. 使用 networks create 指令建立 VPC 網路。

    gcloud compute networks create NETWORK --subnet-mode=custom
    

    更改下列內容:

    • NETWORK:虛擬私有雲網路的名稱。
  2. 使用 networks subnets create 指令為 VPC 網路建立子網路。

    gcloud compute networks subnets create NAME \
      --network=NETWORK \
      --range=RANGE \
      --region=REGION
    

    更改下列內容:

    • NAME:子網路名稱。
    • NETWORK:虛擬私有雲網路的名稱。
    • RANGE:IP 位址範圍。這是子網路的主要 IPv4 範圍

      如果您輸入的範圍不是 RFC 1918 位址,請確認範圍不會與現有設定衝突。詳情請參閱「IPv4 子網路範圍」。

    • REGION:區域。請確認您建立的兩個 VPC 網路,至少有一個子網路使用相同的地區。在下一個章節中建立多 NIC 執行個體時,請使用這個區域。範例設定會為所有子網路使用相同的區域。

  3. 重複上述步驟,建立其他子網路。請使用這個第二個子網路,從執行個體網路介面的主子網路範圍以外測試 ping

  4. 建立防火牆規則,允許 SSH、RDP 和 ICMP:

    gcloud compute firewall-rules create allow-ssh-rdp-icmp \
     --network NETWORK \
     --action=ALLOW \
     --direction=INGRESS \
     --rules=tcp:22,tcp:3389,icmp \
     --source-ranges=SOURCE_RANGE
    

    更改下列內容:

    • NETWORK:輸入與您建立的網路相對應的值:
      • 在第一個網路中輸入 network-1
      • 針對第二個網路重複本節中的步驟時,請輸入 network-2
    • SOURCE_RANGE:輸入與您建立的網路相對應的值:
      • 在第一個網路中輸入 10.10.3.0/24, 35.235.240.0/20。加入 10.10.3.0/24 可確保您能測試從 test-vm-1multi-nic-vmnic0 介面連線。加入 35.235.240.0/20 可允許使用 Identity-Aware Proxy (IAP) TCP 轉送的 SSH 連線。詳情請參閱「允許 VM 的 SSH 入站連線」。
      • 針對第二個網路重複本節中的步驟時,請輸入 10.10.4.0/24, 35.235.240.0/20。加入 10.10.4.0/24 可確保您能測試從 test-vm-2multi-nic-vmnic0 介面連線。加入 35.235.240.0/20 可允許使用 Identity-Aware Proxy (IAP) TCP 轉送的 SSH 連線。詳情請參閱「允許 VM 的 SSH 入站連線」。
  5. 重複執行這些步驟,建立第二個 VPC 網路。請確認子網路 IP 位址範圍不會與第一個網路的子網路重疊,例如範例設定中使用的 IP 位址範圍。

建立多 NIC 執行個體

為您在上一節中建立的每個 VPC 網路建立一個執行個體,每個執行個體各有一個介面。

如要建立多 NIC 執行個體,請按照下列步驟操作:

主控台

  1. 前往 Google Cloud 控制台的「Create an instance」頁面。

    前往「Create an instance」

  2. 在「Name」欄位中輸入執行個體的名稱。這會對應至設定範例中的 multi-nic-vm

  3. 在「Region」欄位中,選取您在每個虛擬私人雲端網路中建立一個子網路時所用的地區。執行個體必須與其介面連線的子網路位於相同地區。範例設定會為所有子網路使用相同的區域。

  4. 在「Zone」(可用區) 欄位中,選取可用區。

  5. 在「Advanced options」部分展開「Networking」,然後執行下列操作:

    1. 查看「Network interfaces」專區。 Google Cloud 會自動在第一個網路介面中填入網路和子網路。這會對應至示例設定中的 network-1subnet-1
    2. 在「主要內部 IPv4 位址」中,選取下列任一選項:
      • 臨時:指派新的臨時 IPv4 位址
      • 清單中的已保留靜態內部 IPv4 位址
      • 預留靜態內部 IPv4 位址,以便預留及指派新的靜態內部 IPv4 位址。如果您使用的是範例設定,請保留 10.10.1.3
    3. 在「外部 IPv4 位址」部分,選取一個 None

    4. 如要新增其他介面,請按一下「新增網路介面」

    5. 在「Network」和「Subnetwork」 中,選取您建立的第二個網路和子網路。這會對應至示例設定中的 network-2subnet-2

    6. 在「IP 堆疊類型」中,選取「IPv4 (單一堆疊)」

    7. 在「主要內部 IPv4 位址」中,選取下列任一選項:

      • 臨時:指派新的臨時 IPv4 位址
      • 清單中的已保留靜態內部 IPv4 位址
      • 預留靜態內部 IPv4 位址,以便預留及指派新的靜態內部 IPv4 位址。如果您使用的是範例設定,請保留 10.10.2.3
    8. 在「外部 IPv4 位址」部分,選取一個 None

    9. 如要完成新增網路介面,請按一下「完成」

  6. 按一下 [建立]。

gcloud

如要在新執行個體上建立網路介面,請使用 instances create 指令

請針對每個介面分別加入 --network-interface 標記,並在後方接上任何適當的網路金鑰,例如 networksubnetprivate-network-ip。針對外部 IP 位址,下列指令會指定 no-address

gcloud compute instances create INSTANCE_NAME \
    --zone ZONE \
    --network-interface \
        network=NIC0_NETWORK,subnet=NIC0_SUBNET,private-network-ip=NIC0_INTERNAL_IPV4_ADDRESS,no-address \
    --network-interface \
        network=NIC1_NETWORK,subnet=NIC1_SUBNET,private-network-ip=NIC1_INTERNAL_IPV4_ADDRESS,no-address

更改下列內容:

  • INSTANCE_NAME:要建立的執行個體名稱。這會對應至設定範例中的 multi-nic-vm
  • ZONE:建立執行個體的區域。請輸入您在每個虛擬私有雲網路中建立一個子網路的相同區域。執行個體必須與其介面連線的子網路位於相同地區。範例設定會為所有子網路使用相同的區域。
  • 第一個介面的值:
    • NIC0_NETWORK:介面連結的網路。這會對應至設定範例中的 network-1
    • NIC0_SUBNET:介面連結的子網路。這會對應至設定範例中的 subnet-1
    • NIC0_INTERNAL_IPV4_ADDRESS:您希望介面在目標子網路中使用的內部 IPv4 位址。如果您使用的是範例設定,請輸入 10.10.1.3。如果您只想指派任何有效的地址,請省略這項屬性。
  • 第二個介面值
    • NIC1_NETWORK:介面連結的網路。這會對應至設定範例中的 network-2
    • NIC1_SUBNET:介面連結的子網路。這會對應至設定範例中的 subnet-2
    • NIC1_INTERNAL_IPV4_ADDRESS:您希望介面在目標子網路中使用的內部 IPv4 位址。如果您使用的是範例設定,請輸入 10.10.2.3。如果您只想指派任何有效的地址,請省略這項屬性。

建立兩個測試執行個體

建立另外兩個執行個體:

  • 一個位於相同網路但不同子網路的網路介面,做為您建立的多 NIC 執行個體的 nic0 介面。這會對應至設定範例subnet-3test-vm-1
  • 一個位於相同網路但不同子網路的網路介面,做為您建立的多 NIC 執行個體的 nic1 介面。這會對應至設定範例subnet-4test-vm-2

您可以使用這些例項,從具有多個網路介面的執行個體主要子網路範圍以外的子網路測試 ping

如要建立執行個體,請按照下列步驟操作:

主控台

  1. 前往 Google Cloud 控制台的「Create an instance」頁面。

    前往「Create an instance」

  2. 在「Name」欄位中輸入執行個體的名稱。

  3. 在「Region」欄位中,選取在第一個虛擬私有雲網路中放置額外子網路的地區。

  4. 在「Zone」(可用區) 欄位中,選取可用區。

  5. 在「Advanced options」部分展開「Networking」,然後執行下列操作:

    1. 查看「Network interfaces」部分。請確認子網路與多 NIC 執行個體的 nic0 介面所使用的子網路不同。
  6. 按一下 [建立]。

  7. 重複執行這些步驟,即可在第二個 VPC 網路中建立執行個體,且在與多個 NIC 執行個體的 nic1 介面不同的子網路中建立。

gcloud

  1. 請執行 instances create 指令,並為每個介面加入 --network-interface 標記,接著加入任何適當的網路金鑰,例如 networksubnetprivate-network-ipaddress

    gcloud compute instances create INSTANCE_NAME \
      --zone ZONE \
      --network-interface \
           network=NIC0_NETWORK,subnet=NIC0_SUBNET, private-network-ip=NIC0_INTERNAL_IPV4_ADDRESS
    

    更改下列內容:

    • INSTANCE_NAME:要建立的執行個體名稱。
    • ZONE:建立執行個體的區域。請輸入在第一個虛擬私有雲網路中放置額外子網路的區域,也就是多 NIC 執行個體未使用的子網路。
    • NIC0_NETWORK:介面連結的網路。
    • NIC0_SUBNET:介面連結的子網路。
    • NIC0_INTERNAL_IPV4_ADDRESS:您希望介面在目標子網路中擁有的內部 IPv4 位址。如果您只想指派任何有效的地址,請省略這項屬性。
  2. 重複執行前一個步驟,在第二個 VPC 網路中建立執行個體,並在與多 NIC 執行個體的 nic1 介面不同的子網路中建立執行個體。

測試連線至多 NIC 執行個體

請按照本節中的步驟操作,從您建立的其他執行個體測試 ping,並測試具備多個網路介面的執行個體的每個介面。

下表列出在本教學課程的這個階段,您可以使用範例設定中的 IP 位址值成功執行 ping 的情況。

寄件者 收件者 ping successful
multi-nic-vmnic0 介面位於同一個網路 (test-vm-1),但子網路不同。 multi-nic-vmnic0 介面內部 IP 位址 (10.10.1.3)
multi-nic-vmnic1 介面位於相同網路但不同子網路中的執行個體 (test-vm-2) multi-nic-vmnic1 介面內部 IP 位址 (10.10.2.3)

取得多 NIC 執行個體的 IP 位址

視需要取得多 NIC 執行個體的介面 IP 位址,以便在後續章節中對其進行連線偵測。

主控台

  1. 前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面

    前往 VM 執行個體

  2. 在執行個體清單中,找出您建立的多 NIC 執行個體,並記錄這些值,以便在後續步驟中對其執行 ping 作業:

    • nic0nic1 介面的內部 IP 位址

gcloud

  1. 執行 instances list 指令

    gcloud compute instances list
    
  2. 找出多 NIC 執行個體,並從輸出內容記錄下列資訊:

    • INTERNAL_IP:第一和第二個位址分別對應至 nic0nic1 網路介面。

對執行個體的 nic0 介面執行連線偵測 (ping)

  1. 在執行個體清單中,找出您在相同網路 (但不同的子網路) 中建立的執行個體,做為多個 NIC 執行個體的 nic0 介面。

    1. 在執行個體的資料列中,按一下「SSH」SSH
  2. 執行下列指令,對多 NIC 執行個體的 nic0 介面「內部 IP」位址執行 ping 作業:

    ping INTERNAL_IP_NIC0
    

    INTERNAL_IP_NIC0 替換為您先前記錄的相應地址。如果您使用的是示例設定,請輸入 10.10.1.3

    請注意,連線偵測 (ping) 已成功。

  3. 執行 exit 關閉終端機視窗。

對執行個體的 nic1 介面執行連線偵測 (ping)

  1. 在執行個體清單中,找出您在同一個網路 (但不同子網路) 中建立的執行個體,做為多 NIC 執行個體的 nic1 介面。

    1. 在執行個體的資料列中,按一下「SSH」SSH
  2. 執行下列指令,對多 NIC 執行個體的第二個介面進行 內部 IP 位址 ping 作業:

    ping INTERNAL_IP_NIC1
    

    INTERNAL_IP_NIC1 替換為您先前記錄的相應地址。如果您使用的是示例設定,請輸入 10.10.2.3

    請注意,ping 作業失敗。

  3. 執行 exit 關閉終端機視窗。

設定政策路由

由於不對稱路由,先前章節中的 ping 測試失敗,因為流量會傳送至 multi-nic-vmnic1 介面,但執行個體的預設路由會導致回覆從 nic0 傳送。詳情請參閱「多個網路介面」總覽中的「規格」

請按照本節的步驟設定政策路由,確保封包會透過正確的介面離開。

本教學課程使用 Linux VM。Windows 作業系統不支援基於來源的政策路由。

找出執行個體的 nic1 介面預設閘道

您可以查詢中繼資料伺服器,找出執行個體介面的預設閘道。如果您使用範例設定,則值為 10.10.2.1

如要找出 nic1 介面 IPv4 位址的預設閘道,請透過多 NIC 執行個體提出以下要求:

curl http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/1/gateway -H "Metadata-Flavor: Google"

如要尋找其他網路介面的預設閘道,請指定適當的介面編號。如要查看已指派給介面的名稱,請參閱「取得多 NIC 執行個體的 IP 位址」。 Google Cloud 這與作業系統指派的介面名稱不同。介面的格式為 nicNUMBER。在您向中繼資料伺服器提出的要求中,請只輸入數字。例如,針對 nic2,請指定 2

在多 NIC 執行個體上設定新的路由表

本節說明如何在多 NIC 執行個體上設定新的路由表。

  1. 如要啟用序列主控台,請按照「針對 VM 執行個體啟用存取權」中的步驟操作。

  2. 為避免在變更預設路徑時中斷與執行個體的連線,請連線至序列主控台

  3. 執行 ip link list 來列出執行個體的網路介面,然後記錄 nic1 介面的名稱,例如 ens5

  4. 執行下列指令,確認 nic1 介面已設定 IP 位址。

    ip addr show NIC
    

    NIC 替換為上一步中的 nic1 介面名稱。

    如果 nic1 介面尚未自動指派 IP 位址,您可以執行下列指令手動指派 IP 位址:

    sudo ip addr add IP_ADDRESS dev NIC
    

    更改下列內容:

    • IP_ADDRESS:要在介面上設定的內部 IP 位址。這會對應至設定範例中的 10.10.2.3
    • NIC:上一個步驟中的 nic1 介面名稱。
  5. nic1 網路介面建立自訂路由表。

    echo "1 ROUTE_TABLE_NAME" | sudo tee -a /etc/iproute2/rt_tables
    

    ROUTE_TABLE_NAME 替換為路由表的名稱,例如 route-nic1

  6. 在自訂路由表中建立預設路由,用於 nic1 網路介面,以及路由,其中包含傳送至閘道的封包來源提示。

    sudo ip route add default via GATEWAY dev NIC table ROUTE_TABLE_NAME
    sudo ip route add GATEWAY src IP_ADDRESS dev NIC table ROUTE_TABLE_NAME
    

    更改下列內容:

    • GATEWAY:介面的預設閘道 IP 位址。這會對應至設定範例中的 10.10.2.1
    • NIC:您要為其新增路徑的介面。例如:ens5
    • ROUTE_TABLE_NAME:路徑資料表的名稱。
    • IP_ADDRESS:在介面上設定的內部 IP 位址。這會對應至設定範例中的 10.10.2.3
  7. 建立轉送規則,指示執行個體針對來源或目的地與指派給 nic1 介面的主內部 IPv4 位址相符的封包,使用自訂路由表:

    sudo ip rule add from IP_ADDRESS/PREFIX_LENGTH table ROUTE_TABLE_NAME
    sudo ip rule add to IP_ADDRESS/PREFIX_LENGTH table ROUTE_TABLE_NAME
    

    更改下列內容:

    • IP_ADDRESS:在介面上設定的內部 IP 位址。這會對應至設定範例中的 10.10.2.3
    • PREFIX_LENGTH:已設定 IP 位址的前置字串長度。
    • ROUTE_TABLE_NAME:路徑資料表的名稱。
  8. 執行下列指令,從快取路徑表中移除所有項目。如果您使用的是含有先前設定路由表的現有執行個體,可能就需要執行這項操作。

    sudo ip route flush cache
    

重新測試與多 NIC 執行個體的連線情形

下表列出在設定政策路由後,您可以成功執行 ping 的情況。重複執行步驟,ping 執行個體的 nic1 介面,確認您現在可以成功 ping 兩個 IP 位址。

寄件者 收件者 ping successful
multi-nic-vmnic0 介面位於同一個網路 (test-vm-1) 但不同子網路。 multi-nic-vmnic0 介面內部 IP 位址 (10.10.1.3)
multi-nic-vmnic1 介面位於相同網路但不同子網路中的執行個體 (test-vm-2) multi-nic-vmnic1 介面內部 IP 位址 (10.10.2.3)

清除所用資源

如要避免系統向您的 Google Cloud 帳戶收取本教學課程中所用資源的相關費用,請刪除含有該項資源的專案,或者保留專案但刪除個別資源。

刪除專案

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

刪除個別資源

如果您不想刪除整個專案,請刪除為本教學課程建立的 VPC 網路和執行個體。

刪除網路前,您必須刪除子網路中的所有資源,以及所有參照該網路的資源。

刪除執行個體

如要刪除執行個體,請按照下列步驟操作:

主控台

  1. 前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面

    前往 VM 執行個體

  2. 勾選您要刪除的執行個體。

  3. 按一下 [Delete] (刪除) 按鈕。

gcloud

使用 gcloud compute instances delete 指令。以這種方式刪除執行個體時,執行個體將會關閉並從執行個體清單中移除,並且會釋出附加至執行個體的所有資源,例如永久磁碟和任何靜態 IP 位址。

請使用以下指令刪除執行個體:

gcloud compute instances delete example-instance [example-instance-2 example-instance-3..]

刪除虛擬私人雲端網路

如要刪除 VPC 網路:

主控台

  1. 在 Google Cloud 控制台中,前往「VPC Networks」(虛擬私有雲網路) 頁面。

    前往「VPC networks」(虛擬私有雲網路)

  2. 按一下虛擬私有雲網路的名稱,顯示其「VPC network details」(虛擬私有雲網路詳細資料) 頁面。

  3. 按一下「刪除虛擬私有雲網路」

  4. 在出現的訊息中,按一下 [Delete] (刪除) 完成確認。

gcloud

使用 networks delete 指令

gcloud compute networks delete NETWORK

NETWORK 替換為要刪除的網路名稱。

後續步驟