本教學課程說明如何建立具有多個網路介面的虛擬機器 (VM) 執行個體,每個介面都連線至不同的虛擬私有雲 (VPC) 網路。此外,本教學課程也提供如何設定 Linux VM 上的路由範例,方便您順利 Ping nic1
介面。
本教學課程中的轉送設定適用於兩種網路介面類型:vNIC 和動態網路介面 (NIC)。本教學課程的範例使用具有多個虛擬 NIC 的執行個體,但您也可以為具有動態 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. 在本教學課程中,您會建立兩個虛擬私有雲端網路,每個網路都有兩個子網路。所有子網路都位於同一個區域。 此外,您還會建立三個執行個體:一個附加至前兩個子網路的多重 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] (名稱)。
- 選取「Region」(區域)。請確認您建立的兩個虛擬私有雲網路,至少有一個子網路使用相同區域。在下一節中建立多重 NIC 執行個體時,請使用這個區域。範例設定會為所有子網路使用相同區域。
輸入 [IP address range] (IP 位址範圍)。這是子網路的主要 IPv4 範圍。
如果選取的範圍不是 RFC 1918 位址,請確認該範圍與現有設定沒有衝突。詳情請參閱「IPv4 子網路範圍」。
按一下 [完成]。
按一下「新增子網路」,建立第二個子網路。使用這個第二個子網路,從執行個體網路介面的主要子網路範圍外部進行測試
ping
。在「防火牆規則」部分,選取「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 執行個體
點選「建立」。
重複上述步驟,在第二個 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 |
---|---|---|
執行個體 (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 ) |
清除所用資源
如要避免系統向您的 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」。