本教學課程說明如何建立具有多個網路介面的虛擬機器 (VM) 執行個體,每個介面都會連結至不同的虛擬私有雲 (VPC) 網路。此外,本教學課程也提供範例,說明如何在 Linux VM 上設定路由,以便成功執行 nic1
介面的 ping 作業。
本教學課程中的轉送設定適用於兩種網路介面類型:vNIC 和動態網路介面 (NIC)。雖然本教學課程的範例使用的是含有多個 vNIC 的執行個體,但您可以為含有動態 NIC 的執行個體設定相同的範例。
具有多個網路介面的執行個體稱為多 NIC 執行個體。
費用
在本文件中,您會使用 Google Cloud的下列計費元件:
您可以使用 Pricing Calculator 根據預測用量產生預估費用。
事前準備
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine API.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine 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
。
- 名為
主控台
在 Google Cloud 控制台中,前往「VPC Networks」(虛擬私有雲網路) 頁面。
按一下「建立虛擬私有雲網路」。
在「Name」欄位中,輸入 VPC 網路的名稱。
在「Subnet creation mode」(建立子網路模式) 選擇 [Custom] (自訂)。
在「New subnet」(新的子網路) 區段中,指定下列項目:
- 提供這個子網路的 [Name] (名稱)。
- 選取「區域」。請確認您建立的兩個 VPC 網路,至少有一個子網路使用相同的地區。在下一個章節中建立多 NIC 執行個體時,請使用這個區域。範例設定會為所有子網路使用相同的區域。
輸入 [IP address range] (IP 位址範圍)。這是子網路的主要 IPv4 範圍。
如果您選取的範圍不是 RFC 1918 位址,請確認該範圍不會與現有設定衝突。詳情請參閱「IPv4 子網路範圍」。
按一下 [完成]。
按一下「Add subnet」建立第二個子網路。請使用這個第二個子網路,從執行個體網路介面的主子網路範圍以外測試
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
以允許遠端桌面協定和安全殼層。 - 選取「其他」,然後輸入
icmp
即可允許 ICMP。
- 選取「TCP」TCP,然後輸入
按一下 [建立]。
重複執行這些步驟,建立第二個 VPC 網路。請確認子網路 IP 位址範圍不會與第一個網路的子網路重疊,例如範例設定中使用的 IP 位址範圍。
gcloud
使用
networks create
指令建立 VPC 網路。gcloud compute networks create NETWORK --subnet-mode=custom
更改下列內容:
NETWORK
:虛擬私有雲網路的名稱。
使用
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 執行個體時,請使用這個區域。範例設定會為所有子網路使用相同的區域。
重複上述步驟,建立其他子網路。請使用這個第二個子網路,從執行個體網路介面的主子網路範圍以外測試
ping
。建立防火牆規則,允許 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-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
到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」,然後執行下列操作:
- 查看「Network interfaces」專區。 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
。如要完成新增網路介面,請按一下「完成」。
- 查看「Network interfaces」專區。 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」,然後執行下列操作:
- 查看「Network interfaces」部分。請確認子網路與多 NIC 執行個體的
nic0
介面所使用的子網路不同。
- 查看「Network interfaces」部分。請確認子網路與多 NIC 執行個體的
按一下 [建立]。
重複執行這些步驟,即可在第二個 VPC 網路中建立執行個體,且在與多個 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 位址。如果您只想指派任何有效的地址,請省略這項屬性。
重複執行前一個步驟,在第二個 VPC 網路中建立執行個體,並在與多 NIC 執行個體的
nic1
介面不同的子網路中建立執行個體。
測試連線至多 NIC 執行個體
請按照本節中的步驟操作,從您建立的其他執行個體測試 ping
,並測試具備多個網路介面的執行個體的每個介面。
下表列出在本教學課程的這個階段,您可以使用範例設定中的 IP 位址值成功執行 ping 的情況。
寄件者 | 收件者 | ping successful |
---|---|---|
與 multi-nic-vm 的 nic0 介面位於同一個網路 (test-vm-1 ),但子網路不同。 |
multi-nic-vm 的 nic0 介面內部 IP 位址 (10.10.1.3 ) |
|
與 multi-nic-vm 的 nic1 介面位於相同網路但不同子網路中的執行個體 (test-vm-2 ) |
multi-nic-vm 的 nic1 介面內部 IP 位址 (10.10.2.3 ) |
取得多 NIC 執行個體的 IP 位址
視需要取得多 NIC 執行個體的介面 IP 位址,以便在後續章節中對其進行連線偵測。
主控台
前往 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 的情況。重複執行步驟,ping 執行個體的 nic1 介面,確認您現在可以成功 ping 兩個 IP 位址。
寄件者 | 收件者 | ping successful |
---|---|---|
與 multi-nic-vm 的 nic0 介面位於同一個網路 (test-vm-1 ) 但不同子網路。 |
multi-nic-vm 的 nic0 介面內部 IP 位址 (10.10.1.3 ) |
|
與 multi-nic-vm 的 nic1 介面位於相同網路但不同子網路中的執行個體 (test-vm-2 ) |
multi-nic-vm 的 nic1 介面內部 IP 位址 (10.10.2.3 ) |
清除所用資源
如要避免系統向您的 Google Cloud 帳戶收取本教學課程中所用資源的相關費用,請刪除含有該項資源的專案,或者保留專案但刪除個別資源。
刪除專案
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
刪除個別資源
如果您不想刪除整個專案,請刪除為本教學課程建立的 VPC 網路和執行個體。
刪除網路前,您必須刪除子網路中的所有資源,以及所有參照該網路的資源。
刪除執行個體
如要刪除執行個體,請按照下列步驟操作:
主控台
前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。
勾選您要刪除的執行個體。
按一下 [Delete] (刪除) 按鈕。
gcloud
使用 gcloud compute instances delete
指令。以這種方式刪除執行個體時,執行個體將會關閉並從執行個體清單中移除,並且會釋出附加至執行個體的所有資源,例如永久磁碟和任何靜態 IP 位址。
請使用以下指令刪除執行個體:
gcloud compute instances delete example-instance [example-instance-2 example-instance-3..]
刪除虛擬私人雲端網路
如要刪除 VPC 網路:
主控台
在 Google Cloud 控制台中,前往「VPC Networks」(虛擬私有雲網路) 頁面。
按一下虛擬私有雲網路的名稱,顯示其「VPC network details」(虛擬私有雲網路詳細資料) 頁面。
按一下「刪除虛擬私有雲網路」。
在出現的訊息中,按一下 [Delete] (刪除) 完成確認。
gcloud
gcloud compute networks delete NETWORK
將 NETWORK
替換為要刪除的網路名稱。
後續步驟
- 請參閱多個網路介面的總覽。
- 參閱「建立具有多個網路介面的 VM」一文。