本教學課程說明如何建立具有多個網路介面的虛擬機器 (VM) 執行個體,每個介面都連線至不同的虛擬私有雲 (VPC) 網路。此外,本教學課程也提供如何設定 Linux VM 上的路由,以便成功 Ping nic1 介面的範例。
本教學課程中的路由設定適用於兩種網路介面類型:vNIC 和動態網路介面 (NIC)。本教學課程的範例使用具備多個虛擬 NIC 的執行個體,但您也可以為具備動態 NIC 的執行個體設定相同範例。
具有多個網路介面的執行個體稱為多 NIC 執行個體。
費用
在本文件中,您會使用下列 Google Cloud的計費元件:
 
 
 
如要根據預測用量估算費用,請使用 Pricing Calculator。
範例設定
下圖顯示您在本教學課程中建立的 VPC 網路、子網路和執行個體,以及可做為資源名稱和子網路 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。
 
- 名為 
主控台
- 在 Google Cloud 控制台中,前往「VPC networks」(虛擬私有雲網路) 頁面。 
- 按一下「建立虛擬私有雲網路」。 
- 在「Name」(名稱) 欄位中,輸入 VPC 網路的名稱。 
- 在「Subnet creation mode」(建立子網路模式) 選擇 [Custom] (自訂)。 
- 在「New subnet」(新的子網路) 區段中,指定下列項目: - 提供這個子網路的 [Name] (名稱)。
- 選取「區域」。請確認您建立的兩個虛擬私有雲網路,至少有一個子網路使用相同區域。在下一節中建立多重 NIC 執行個體時,請使用這個區域。範例設定會為所有子網路使用相同區域。
- 輸入 [IP address range] (IP 位址範圍)。這是子網路的主要 IPv4 範圍。 - 如果選取的範圍不是 RFC 1918 位址,請確認該範圍與現有設定不衝突。詳情請參閱「IPv4 子網路範圍」。 
- 按一下 [完成]。 
 
- 按一下「新增子網路」,建立第二個子網路。使用這個第二個子網路,從執行個體網路介面的主要子網路範圍外部進行測試 - ping。
- 在「Firewall rules」(防火牆規則) 區段中,選取「allow-custom」規則,然後按一下「EDIT」(編輯)。請按照下列方式設定規則,確保您可以從測試執行個體測試與 - multi-nic-vm的連線:- 在「IPv4 範圍」下方,保留子網路 IPv4 位址範圍的核取方塊。
- 在「其他 IPv4 範圍」下方輸入 35.235.240.0/20,這樣您就能使用 SSH 連線至測試執行個體。加入這個範圍後,即可使用 Identity-Aware Proxy (IAP) TCP 轉送建立 SSH 連線。詳情請參閱「允許連入 VM 的 SSH 連線」。
- 在「Protocols and ports」(通訊協定與通訊埠) 下方,選取「specified protocols and ports」(指定的通訊協定與通訊埠)。
- 選取「TCP」TCP,然後輸入 22, 3389,允許遠端桌面協定和安全殼層。
- 選取「Other」(其他),然後輸入 icmp允許 ICMP。
 
- 選取「TCP」TCP,然後輸入 
 
- 點選「建立」。 
- 重複上述步驟,建立第二個 VPC 網路。 請確認子網路 IP 位址範圍與第一個網路的子網路沒有重疊,例如範例設定中使用的 IP 位址範圍。 
gcloud
- 使用 - networks create指令建立 VPC 網路。- gcloud compute networks create NETWORK --subnet-mode=custom - 更改下列內容: - NETWORK:虛擬私有雲網路的名稱。
 
- 使用 - 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 執行個體時,請使用這個區域。範例設定會為所有子網路使用相同區域。
 
- 重複上一個步驟,建立另一個子網路。使用這個第二個子網路,從執行個體網路介面的主要子網路範圍外部進行測試 - ping。
- 建立防火牆規則,允許 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-vm的nic0介面之間的連線。加入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-2與multi-nic-vm的nic0介面之間的連線。加入35.235.240.0/20可允許使用 Identity-Aware Proxy (IAP) TCP 轉送的 SSH 連線。詳情請參閱「允許連入 VM 的 SSH 連線」。
 
- 第一個網路請輸入 
 
- 重複上述步驟,建立第二個 VPC 網路。 請確認子網路 IP 位址範圍與第一個網路的子網路沒有重疊,例如範例設定中使用的 IP 位址範圍。 
建立多 NIC 執行個體
為您在前一節中建立的每個 VPC 網路建立一個介面的執行個體。
如要建立多重 NIC 執行個體,請按照下列指示操作:
主控台
- 前往 Google Cloud 控制台的「Create an instance」(建立執行個體) 頁面。 
- 在「Name」(名稱) 欄位中,輸入執行個體的名稱。 這對應於範例設定中的 - multi-nic-vm。
- 在「Region」(地區) 欄位中,選取您在每個虛擬私有雲網路中建立一個子網路的相同地區。執行個體必須與介面連線的子網路位於相同地區。範例設定會為所有子網路使用相同區域。 
- 在「Zone」(可用區) 欄位中,選取可用區。 
- 在「Advanced options」(進階選項) 專區中,展開「Networking」(網路),然後執行下列操作: - 查看「網路介面」部分。 Google Cloud 系統會自動填入第一個網路介面,並提供網路和子網路。這對應於範例設定中的 network-1和subnet-1。
- 在「主要內部 IPv4 位址」部分,選取下列其中一個選項:
- 臨時:指派新的臨時 IPv4 位址
- 清單中保留的靜態內部 IPv4 位址
- 預留靜態內部 IPv4 位址:預留及指派新的靜態內部 IPv4 位址。
如果您使用範例設定,請預留 10.10.1.3。
 
- 在「外部 IPv4 位址」部分,選取一個 - None。
- 如要新增其他介面,請按一下「新增網路介面」。 
- 在「Network」(網路) 和「Subnetwork」(子網路) 中,選取您建立的第二個網路和子網路。這對應於範例設定中的 - network-2和- subnet-2。
- 在「IP 堆疊類型」部分,選取「IPv4 (單一堆疊)」。 
- 在「主要內部 IPv4 位址」部分,選取下列其中一個選項: - 臨時:指派新的臨時 IPv4 位址
- 清單中保留的靜態內部 IPv4 位址
- 預留靜態內部 IPv4 位址:預留及指派新的靜態內部 IPv4 位址。
如果您使用範例設定,請預留 10.10.2.3。
 
- 在「外部 IPv4 位址」部分,選取一個 - None。
- 按一下「完成」,即可完成新增網路介面。 
 
- 查看「網路介面」部分。 Google Cloud 系統會自動填入第一個網路介面,並提供網路和子網路。這對應於範例設定中的 
- 點選「建立」。 
gcloud
如要在新執行個體上建立網路介面,請使用 instances create 指令。
請針對每個介面分別加入 --network-interface 旗標,並在後方接上任何適當的網路金鑰,例如 network、subnet、private-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
更改下列內容:
建立兩個測試執行個體
建立另外兩個執行個體:
- 一個與您建立的多重 NIC 執行個體nic0介面位於相同網路,但子網路不同。這對應於範例設定中的subnet-3內的test-vm-1。
- 一個與您建立的多重 NIC 執行個體nic1介面位於相同網路,但子網路不同。這對應於範例設定中的subnet-4內的test-vm-2。
您可以使用這些執行個體,從執行個體主要子網路範圍以外的子網路測試 ping,該執行個體有多個網路介面。
如要建立執行個體,請按照下列步驟操作:
主控台
- 前往 Google Cloud 控制台的「Create an instance」(建立執行個體) 頁面。 
- 在「Name」(名稱) 欄位中,輸入執行個體的名稱。 
- 在「Region」(地區) 欄位中,選取您在第一個虛擬私有雲網路中放置額外子網路的地區。 
- 在「Zone」(可用區) 欄位中,選取可用區。 
- 在「Advanced options」(進階選項) 專區中,展開「Networking」(網路),然後執行下列操作: - 查看「網路介面」部分。請確保子網路與多重 NIC 執行個體 nic0介面使用的子網路不同。
 
- 查看「網路介面」部分。請確保子網路與多重 NIC 執行個體 
- 點選「建立」。 
- 重複上述步驟,在第二個虛擬私有雲網路中建立執行個體,並在與多重 NIC 執行個體 - nic1介面不同的子網路中建立執行個體。
gcloud
- 執行 - instances create指令,並針對每個介面加入- --network-interface旗標,後方接上任何適當的網路金鑰,例如- network、- subnet、- private-network-ip或- address。- 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 位址。如果只想指派任何有效地址,請省略這個欄位。
 
- 重複上一個步驟,在第二個虛擬私有雲網路中建立執行個體,並使用與多重 NIC 執行個體 - nic1介面不同的子網路。
測試與多重 NIC 執行個體的連線
請按照本節中的步驟操作,從您建立的其他執行個體,測試連線至具備多個網路介面的執行個體中各個介面的 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-vm的nic1介面位於相同網路,但子網路不同 | multi-nic-vm介面的nic1內部 IP 位址 (10.10.2.3) | 
取得多重 NIC 執行個體的 IP 位址
如有需要,請取得多重 NIC 執行個體的介面 IP 位址,以便在後續章節中對這些位址執行連線偵測 (ping)。
主控台
- 前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。 
- 在執行個體清單中,找到您建立的多重 NIC 執行個體,並記錄下列值,以便在後續步驟中 Ping 這些值: - 其 nic0和nic1介面的內部 IP 位址
 
- 其 
gcloud
- 
gcloud compute instances list 
- 找出多 NIC 執行個體,並從輸出內容記錄下列項目: - INTERNAL_IP:第一個和第二個位址分別對應至- nic0和- nic1網路介面。
 
對執行個體的 nic0 介面執行連線偵測 (ping)
- 在執行個體清單中,找出您在相同網路中建立的執行個體,但子網路與多重 NIC 執行個體的 - nic0介面不同。- 在執行個體的資料列中,按一下「SSH」SSH。
 
- 執行下列指令,對多重 NIC 執行個體的 - nic0介面內部 IP 位址執行 ping:- ping INTERNAL_IP_NIC0 - 將 - INTERNAL_IP_NIC0換成您先前記錄的對應地址。如果您使用範例設定,請輸入- 10.10.1.3。- 請注意,連線偵測 (ping) 成功。 
- 執行 - exit關閉終端機視窗。
對執行個體的 nic1 介面執行連線偵測 (ping)
- 在執行個體清單中,找出您在相同網路中建立的執行個體,但子網路與多重 NIC 執行個體的 - nic1介面不同。- 在執行個體的資料列中,按一下「SSH」SSH。
 
- 執行下列指令,對多重 NIC 執行個體第二個介面的內部 IP 位址執行 ping: - ping INTERNAL_IP_NIC1 - 將 - INTERNAL_IP_NIC1換成您先前記錄的對應地址。如果您使用範例設定,請輸入- 10.10.2.3。- 請注意,Ping 失敗。 
- 執行 - exit關閉終端機視窗。
設定政策路由
由於非對稱式路由,上一節中的 Ping 測試失敗:流量會傳送至 multi-nic-vm 的 nic1 介面,但執行個體的預設路由會導致回覆從 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 執行個體上設定新的路由表。
- 按照「針對 VM 執行個體啟用存取權」一文中的步驟啟用序列主控台。 
- 如要在變更預設路徑時避免中斷與執行個體的連線,請連線至序列埠。 
- 執行 - ip link list列出執行個體的網路介面,然後記錄- nic1介面的名稱,例如- ens5。
- 執行下列指令,確保 - 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介面名稱。
 
- 為 - nic1網路介面建立自訂路由表。- echo "1 ROUTE_TABLE_NAME" | sudo tee -a /etc/iproute2/rt_tables - 將 - ROUTE_TABLE_NAME替換為路由表名稱,例如- route-nic1。
- 在適用於 - 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 - 更改下列內容: 
- 建立轉送規則,指示執行個體針對來源或目的地與指派給 - 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:路徑資料表的名稱。
 
- 執行下列指令,從快取路由表移除所有項目。如果您使用現有執行個體,且先前已設定路由表,可能就需要這麼做。 - 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-vm的nic1介面位於相同網路,但子網路不同 | multi-nic-vm介面nic1的內部 IP 位址 (10.10.2.3) |