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


本教學課程說明如何建立具有多個網路介面的虛擬機器 (VM) 執行個體,每個介面都連線至不同的虛擬私有雲 (VPC) 網路。此外,本教學課程也提供如何設定 Linux VM 上的路由範例,方便您順利 Ping nic1 介面。

本教學課程中的轉送設定適用於兩種網路介面類型:vNIC 和動態網路介面 (NIC)。本教學課程的範例使用具有多個虛擬 NIC 的執行個體,但您也可以為具有動態 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. 在本教學課程中,您會建立兩個虛擬私有雲端網路,每個網路都有兩個子網路。所有子網路都位於同一個區域。 此外,您還會建立三個執行個體:一個附加至前兩個子網路的多重 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. 選取「Region」(區域)。請確認您建立的兩個虛擬私有雲網路,至少有一個子網路使用相同區域。在下一節中建立多重 NIC 執行個體時,請使用這個區域。範例設定會為所有子網路使用相同區域。
    3. 輸入 [IP address range] (IP 位址範圍)。這是子網路的主要 IPv4 範圍

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

    4. 按一下 [完成]

  6. 按一下「新增子網路」,建立第二個子網路。使用這個第二個子網路,從執行個體網路介面的主要子網路範圍外部進行測試 ping

  7. 在「防火牆規則」部分,選取「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. 選取「Other」(其他),然後輸入 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 指令為虛擬私有雲網路建立子網路。

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

    更改下列內容:

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

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

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

  3. 重複上一個步驟,建立另一個子網路。使用這個第二個子網路,從執行個體網路介面的主要子網路範圍外部進行測試 ping

  4. 建立防火牆規則,允許 SSH、遠端桌面協定和 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-1 測試與 multi-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-2 測試 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」(建立執行個體) 頁面。

    前往「建立執行個體」

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

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

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

  5. 在「Advanced options」(進階選項) 專區中,展開「Networking」(網路),然後執行下列操作:

    1. 查看「網路介面」部分。 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」(建立執行個體) 頁面。

    前往「建立執行個體」

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

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

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

  5. 在「Advanced options」(進階選項) 專區中,展開「Networking」(網路),然後執行下列操作:

    1. 查看「網路介面」部分。請確保子網路與多重 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
執行個體 (test-vm-1) 與 multi-nic-vmnic0 介面位於相同網路,但子網路不同。 multi-nic-vm 介面的 nic0 內部 IP 位址 (10.10.1.3)
執行個體 (test-vm-2) 與 multi-nic-vmnic1 介面位於相同網路,但子網路不同 multi-nic-vm 介面的 nic1 內部 IP 位址 (10.10.2.3)

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

如有需要,請取得多重 NIC 執行個體的介面 IP 位址,以便在後續章節中對這些位址執行連線偵測 (ping)。

主控台

  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 的情境。重複執行相關步驟,對執行個體的 nic1 介面執行 ping 指令,確認現在可以順利對兩個 IP 位址執行 ping 指令。

寄件者 收件者 ping successful
執行個體 (test-vm-1) 與 multi-nic-vm 的介面位於相同網路,但子網路不同。nic0 multi-nic-vm 介面的 nic0 內部 IP 位址 (10.10.1.3)
執行個體 (test-vm-2) 與 multi-nic-vmnic1 介面位於相同網路,但子網路不同 multi-nic-vm 介面 nic1 的內部 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 替換為要刪除的網路名稱。

後續步驟