將網際網路流量路由至單一網路介面
您可以將目的地為大型公有 IP 位址集區的傳入網際網路流量,路由至 VPC 中的單一彈性網路介面 (ENI)。
以往,網際網路閘道僅接受目的地為 VPC 中網路介面直接關聯之公有 IP 位址的流量。執行個體類型會限制可與網路介面關聯的 IP 位址數量,這對電信與物聯網 (IoT) 等需處理超過該限制之 IP 集區流量的產業構成挑戰。
此路由功能可消除傳入網際網路連線時的複雜位址轉譯作業。您可以攜帶自有公有 IP 集區 (BYOIP),將 VPC 網際網路閘道設定為接受整個集區的流量並將其路由至單一網路介面。此功能特別適用於:
-
電信業者:可管理大型訂閱用戶 IP 集區,無需承擔位址轉譯開銷
-
IoT 應用程式:可彙整來自數千個裝置 IP 位址的流量
-
任何案例:可讓流量路由突破 ENI 關聯限制
您可以將此路由功能與 VPC 路由伺服器整合,在容錯移轉案例中實現動態路由更新。
主要優點
此路由機制具備以下優勢:
-
無需位址轉譯 – 直接路由可消除複雜的 NAT 工作
-
突破 ENI 限制 – 處理超過執行個體關聯限制數量的 IP 集區
-
產業最佳化 – 專為電信業與 IoT 需求打造
-
動態容錯移轉 – 與路由伺服器整合實現自動化更新
可用性
您可以在所有 AWS 商業區域、AWS 中國區域與 AWS GovCloud 區域使用此功能。
目錄
開始之前
在開始本教學課程之前,請確認已滿足以下條件:
-
BYOIP 集區:必須已將自有 IP 位址範圍導入 AWS。完成 Bring your own IP addresses (BYOIP) in Amazon EC2 中的步驟。
-
驗證 BYOIP 集區:執行如下命令確認集區已就緒:
aws ec2 describe-public-ipv4-pools --region us-east-1在輸出結果中查找集區,確認
PoolAddressRanges顯示Available位址。 -
適當的許可:確保 AWS 帳戶具有建立 VPC 資源與 EC2 執行個體及管理 BYOIP 集區的許可。
此功能的運作方式
本節將說明網際網路閘道輸入路由背後的技術概念,以及流量從網際網路傳輸至目標執行個體的路徑。
為何使用網際網路閘道輸入路由
以往,因 ENI 關聯數量限制,您需透過位址轉譯才能彙整大量 IP 位址的流量。此增強功能允許 BYOIP 集區直接路由至目標執行個體,從而消除了這種複雜工作。
路由的運作方式
此功能僅適用於透過 BYOIP 流程導入 AWS 的公有 IP CIDR。BYOIP 流程會確保您帳戶擁有該公有 IP CIDR。取得 BYOIP 公有 CIDR 後,執行如下步驟:
-
將此公有 IP 位址集區與網際網路閘道路由表建立關聯。該網際網路閘道必須已與 VPC 建立關聯。此關聯允許 VPC 接收目的地為該 IP CIDR 的流量。確保網際網路閘道擁有不與任何子網路共用的專用路由表。
-
完成 BYOIP 集區與網際網路閘道路由表的關聯後,即可在該網際網路閘道路由表中新增目的地為完整 IP CIDR 或其子網段的路由。此路由的目標設定為要接收流量的 ENI。
-
目的地為 BYOIP CIDR 的流量進入 AWS 後,AWS 會查詢網際網路閘道路由表,並據此將流量路由至對應的 VPC。
-
在 VPC 中,網際網路閘道會將流量路由至目標 ENI。
-
目標 (與您工作負載關聯的彈性網路介面) 會處理流量。
最佳實務
-
保持路由表分離:網際網路閘道路由表必須僅專用於網際網路閘道。切勿將此路由表與任何 VPC 子網路建立關聯。子網路路由應使用單獨的路由表。
-
勿直接指派 BYOIP IP:切勿將 BYOIP 集區的公有 IP 位址直接與 EC2 執行個體或網路介面關聯。網際網路閘道輸入路由功能無需直接關聯 IP,即可將流量路由至執行個體。
重要
如果使用了 VPC 封鎖公開存取 (BPA),啟用 BPA 後,即使已設定子網路層級 BPA 排除規則,也會封鎖透過輸入路由傳送至子網路的流量。子網路層級排除項目不適用於輸入路由。如要在啟用 BPA 的狀態下允許輸入路由流量:
請完全停用 BPA,或
採用 VPC 層級的排除項目
步驟 1:建立 VPC
完成此步驟,即可建立將託管目標執行個體與網際網路閘道的 VPC。
注意
確認尚未達到 VPC 配額限制。如需更多詳細資訊,請參閱 Amazon VPC 配額。
AWS 主控台
-
開啟 Amazon VPC 主控台
。 -
在 VPC 儀表板上,選擇 Create VPC (建立 VPC)。
-
在建立資源,選擇僅 VPC。
-
在名稱標籤欄位中,輸入 VPC 的名稱 (例如
IGW-Ingress-VPC)。 -
在 IPv4 CIDR 區塊欄位中,輸入一個 CIDR 區塊 (例如
10.0.0.0/16)。 -
選擇建立 VPC。
AWS CLI
aws ec2 create-vpc --cidr-block 10.0.0.0/16 --tag-specifications 'ResourceType=vpc,Tags=[{Key=Name,Value=IGW-Ingress-VPC}]' --region us-east-1
步驟 2:建立並連接網際網路閘道
完成此步驟,即可建立網際網路閘道並將其連接至 VPC,從而啟用網際網路連線。
AWS 主控台
-
開啟 Amazon VPC 主控台
。 -
在 VPC 主控台中,選擇網際網路閘道。
-
選擇建立網際網路閘道。
-
在名稱標籤欄位中,輸入網際網路閘道的名稱 (例如
IGW-Ingress-Gateway)。 -
選擇建立網際網路閘道。
-
選取您的網際網路閘道,然後選擇動作、連接至 VPC。
-
選取您的 VPC,然後選擇連接網際網路閘道。
AWS CLI
aws ec2 create-internet-gateway --tag-specifications 'ResourceType=internet-gateway,Tags=[{Key=Name,Value=IGW-Ingress-Gateway}]' --region us-east-1 aws ec2 attach-internet-gateway --internet-gateway-id igw-0123456789abcdef0 --vpc-id vpc-0123456789abcdef0 --region us-east-1
注意:將資源 ID 取代為上一個步驟中的實際 ID。
步驟 3:為目標執行個體建立子網路
完成此步驟,即可建立要部署目標執行個體的子網路。
AWS 主控台
-
在 VPC 主控台的導覽窗格中,選擇 Subnets (子網路)。
-
選擇 Create subnet (建立子網路)。
-
在 VPC ID 欄位中,選擇您的 VPC。
-
在子網路名稱欄位中,輸入一個名稱 (例如
Target-Subnet)。 -
對於 Availability Zone (可用區域),您可以選擇子網路的區域,或保留預設的 No Preference (無偏好設定),以便讓 AWS 為您選擇。
-
在 IPv4 CIDR 區塊欄位中,選取手動輸入,然後輸入 CIDR 區塊 (例如
10.0.1.0/24)。 -
選擇 Create subnet (建立子網路)。
AWS CLI
aws ec2 create-subnet \ --vpc-id vpc-0123456789abcdef0 \ --cidr-block 10.0.1.0/24 \ --tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=Target-Subnet}]' \ --region us-east-1
步驟 4:為子網路建立路由表
完成此步驟,即可為子網路建立路由表,並將路由表與子網路建立關聯。
AWS 主控台
-
在 VPC 主控台的導覽窗格中,選擇路由表。
-
選擇 Create route table (建立路由表)。
-
在名稱欄位中,輸入路由表的名稱 (例如
Target-Subnet-Route-Table)。 -
在 VPC 中,選擇您的 VPC。
-
選擇 Create route table (建立路由表)。
-
選取您的路由表,然後依次選擇動作、編輯子網路關聯。
-
選取您的子網路,然後選擇儲存關聯。
AWS CLI
aws ec2 create-route-table \ --vpc-id vpc-0123456789abcdef0 \ --tag-specifications 'ResourceType=route-table,Tags=[{Key=Name,Value=Target-Subnet-Route-Table}]' \ --region us-east-1 aws ec2 associate-route-table \ --route-table-id rtb-0987654321fedcba0 \ --subnet-id subnet-0123456789abcdef0 \ --region us-east-1
步驟 5:為目標執行個體建立安全群組
完成此步驟,即可建立一個安全群組,用於控制對目標執行個體的網路存取。
AWS 主控台
-
在 VPC 主控台的導覽窗格中,選擇安全群組。
-
選擇建立安全群組。
-
在安全群組名稱欄位中,輸入一個名稱 (例如
IGW-Target-SG)。 -
對於 Description (說明),輸入
Security group for IGW ingress routing target instance。 -
針對 VPC,選取您的 VPC。
-
若要新增傳入規則,請選擇傳入規則。針對每條規則,請選擇新增規則並指定以下參數:
-
類型:所有 ICMP – IPv4,來源:0.0.0.0/0 (用於 Ping 測試)。
-
類型:SSH,連接埠:22,來源:0.0.0.0/0 (用於 EC2 Instance Connect)。
-
注意
在本教學課程中,此安全群組會向所有網際網路流量開放 SSH 連接埠。本教學課程用於教育目的,切勿在生產環境中作此設定。在實際生產環境中,應將 SSH 存取限制於特定 IP 範圍。
-
選擇建立安全群組。
AWS CLI
aws ec2 create-security-group \ --group-name IGW-Target-SG \ --description "Security group for IGW ingress routing target instance" \ --vpc-id vpc-0123456789abcdef0 \ --region us-east-1 aws ec2 authorize-security-group-ingress \ --group-id sg-0123456789abcdef0 \ --protocol icmp \ --port -1 \ --cidr 0.0.0.0/0 \ --region us-east-1 aws ec2 authorize-security-group-ingress \ --group-id sg-0123456789abcdef0 \ --protocol tcp \ --port 22 \ --cidr 0.0.0.0/0 \ --region us-east-1
步驟 6:啟動目標 EC2 執行個體
完成此步驟,即可啟動將接收來自 BYOIP 集區流量的 EC2 執行個體。
AWS 主控台
-
開啟 Amazon EC2 主控台
。 -
選擇啟動執行個體。
-
在名稱欄位中,輸入執行個體的名稱 (例如
IGW-Target-Instance)。 -
在應用程式與作業系統映像 (Amazon Machine Image) 欄位中,選擇 Amazon Linux 2023 AMI。
-
在執行個體類型欄位中,選擇 t2.micro (符合免費方案資格)。
-
在金鑰對 (登入) 欄位中,選取現有的金鑰對或建立新的金鑰對。
-
在網路設定欄位中,選擇編輯並設定以下項目:
-
VPC:選取 VPC
-
子網路:選取子網路
-
自動指派公有 IP:啟用
-
防火牆 (安全群組):選取現有的安全群組並選擇您的安全群組
-
-
選擇啟動執行個體。
-
重要事項:啟動後,前往執行個體詳細資訊,記錄網路介面 ID (以 "eni-" 開頭),供步驟 10 使用。
AWS CLI
aws ec2 run-instances \ --image-id ami-0abcdef1234567890 \ --count 1 \ --instance-type t2.micro \ --key-name your-key-pair \ --security-group-ids sg-0123456789abcdef0 \ --subnet-id subnet-0123456789abcdef0 \ --associate-public-ip-address \ --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=IGW-Target-Instance}]' \ --region us-east-1
若要使用主控台查詢 ENI ID:
-
在 EC2 主控台中,選取執行個體。
-
前往聯網索引標籤。
-
記錄網路介面 ID (例如
eni-0abcdef1234567890)。
若要使用 AWS CLI 查詢 ENI ID:
aws ec2 describe-instances --instance-ids i-0123456789abcdef0 --query 'Reservations[0].Instances[0].NetworkInterfaces[0].NetworkInterfaceId' --output text --region us-east-1
步驟 7:網際網路閘道的路由表
完成此步驟,即可為處理輸入路由的網際網路閘道建立專用路由表。
AWS 主控台
-
在 VPC 主控台中選擇路由表。
-
選擇 Create route table (建立路由表)。
-
在名稱欄位中,輸入路由表的名稱 (例如
IGW-Ingress-Route-Table)。 -
在 VPC 中,選擇您的 VPC。
-
選擇 Create route table (建立路由表)。
-
選取您的路由表並選擇邊緣關聯索引標籤。
-
選擇編輯邊緣關聯。
-
選取網際網路閘道,然後選擇儲存變更。
AWS CLI
aws ec2 create-route-table \ --vpc-id vpc-0123456789abcdef0 \ --tag-specifications 'ResourceType=route-table,Tags=[{Key=Name,Value=IGW-Ingress-Route-Table}]' \ --region us-east-1
步驟 8:將路由表與網際網路閘道建立關聯
完成此步驟,即可將路由表與網際網路閘道建立關聯,從而啟用輸入路由功能。
AWS 主控台
-
在 VPC 主控台的導覽窗格中,選擇路由表,然後選取您建立的路由表。
-
從 Edge associations (邊緣關聯) 標籤,選擇 Edit edge associations (編輯邊緣關聯)。
-
勾選網際網路閘道的核取方塊。
-
選擇儲存變更。
AWS CLI
aws ec2 associate-route-table \ --route-table-id rtb-0123456789abcdef0 \ --gateway-id igw-0123456789abcdef0 \ --region us-east-1
步驟 9:將 BYOIP 集區與網際網路閘道建立關聯
完成此步驟,即可將 BYOIP 集區與網際網路閘道路由表建立關聯,使 VPC 能夠接收流向您 IP 範圍的流量。
AWS 主控台
-
在 VPC 主控台的導覽窗格中,選擇路由表,然後選取您建立的網際網路閘道路由表。
-
按一下 IPv4 集區關聯索引標籤。
-
按一下編輯關聯按鈕。
-
選取 BYOIP 集區 (例如
pool-12345678901234567)。 -
按一下儲存關聯按鈕。
AWS CLI
aws ec2 associate-route-table \ --route-table-id rtb-0123456789abcdef0 \ --public-ipv4-pool pool-12345678901234567 \ --region us-east-1
注意:將 rtb-0123456789abcdef0 取代為網際網路閘道路由表 ID,並將 pool-12345678901234567 取代為 BYOIP 集區 ID。
步驟 10:新增指向目標執行個體的靜態路由
完成此步驟,即可新增一條路由,將來自 BYOIP 範圍的流量導向目標執行個體的網路介面。
AWS 主控台
-
在 VPC 主控台的導覽窗格中,選擇路由表,然後選取您建立的網際網路閘道路由表。
-
選擇 Actions (動作)、Edit routes (編輯路由)。
-
選擇 Add route (新增路由)。
-
在目的地欄位中,輸入 BYOIP CIDR 或子網段 (例如
203.0.113.0/24)。字首必須介於 /23 至 /28 之間。 -
在目標欄位中,選取網路介面,然後輸入執行個體的 ENI ID (例如
eni-0abcdef1234567890)。 -
選擇儲存變更。
AWS CLI
aws ec2 create-route \ --route-table-id rtb-0123456789abcdef0 \ --destination-cidr-block 203.0.113.0/24 \ --network-interface-id eni-0abcdef1234567890 \ --region us-east-1
步驟 11:設定目標執行個體
完成此步驟,即可設定目標執行個體,從而正確處理目的地為 BYOIP 位址的流量。
重要事項:在測試連線之前完成此執行個體設定步驟 (步驟 12)。執行個體必須設定為回應 BYOIP 位址,輸入路由才能正常運作。
AWS 主控台
-
透過 EC2 Instance Connect 連線至 Linux 執行個體:
-
在 EC2 主控台中,選取執行個體。
-
選擇動作 > 連線。
-
選取 EC2 Instance Connect 索引標籤。
-
選擇連線。
-
-
將特定 BYOIP IP 位址新增至執行個體介面:
首先,查詢網路介面的名稱:
ip link show接著,新增 IP 位址 (將
203.0.113.10取代為 BYOIP 範圍內的 IP):sudo ip addr add 203.0.113.10/32 dev eth0注意:將
203.0.113.10取代為要測試的 BYOIP 範圍內的任一 IP 位址。網路介面名稱可能為eth0、ens5或類似名稱,具體取決於執行個體類型。 -
在 EC2 主控台中,停用來源/目的地檢查:
-
選取執行個體。
-
前往聯網索引標籤,按一下網路介面。
-
依次選擇動作、變更來源/目的地檢查、停用。
-
AWS CLI
aws ec2 modify-network-interface-attribute \ --network-interface-id eni-0abcdef1234567890 \ --no-source-dest-check \ --region us-east-1
步驟 12:設定執行個體流量處理功能
完成此步驟,即可將 BYOIP 位址新增至執行個體並停用來源/目的地檢查,從而啟用適當的流量處理功能。
AWS 主控台
-
透過 EC2 Instance Connect 連線至 Linux 執行個體:
-
在 EC2 主控台中,選取執行個體。
-
選擇動作 > 連線。
-
選取 EC2 Instance Connect 索引標籤。
-
選擇連線。
-
-
將特定 BYOIP IP 位址新增至執行個體介面:
首先,查詢網路介面的名稱:
ip link show接著,新增 IP 位址 (將
ens5取代為實際介面名稱):sudo ip addr add 203.0.113.10/32 dev ens5注意:將
203.0.113.10取代為要測試的 BYOIP 範圍內的任一 IP 位址。網路介面名稱可能為eth0、ens5或類似名稱,具體取決於執行個體類型。 -
在 EC2 主控台中,停用來源/目的地檢查:
-
選取執行個體。
-
前往聯網索引標籤,按一下網路介面。
-
依次選擇動作、變更來源/目的地檢查、停用。
-
AWS CLI
aws ec2 modify-network-interface-attribute \ --network-interface-id eni-0abcdef1234567890 \ --no-source-dest-check \ --region us-east-1
步驟 13:測試連線
完成此步驟,即可確認網際網路流量是否已透過 BYOIP 位址正確路由至目標執行個體。
-
在目標執行個體上,透過 tcpdump 監控傳入流量:
sudo tcpdump -i any icmp -
透過另一終端機或電腦,測試與 BYOIP IP 位址的連線:
ping 203.0.113.10 -
預期結果:
-
Ping 測試應該成功,並顯示 BYOIP IP 位址的回應。
-
tcpdump 應顯示來自 BYOIP 位址的傳入封包,類似於:
12:34:56.789012 IP 203.0.113.100 > 203.0.113.10: ICMP echo request, id 1234, seq 1, length 64 12:34:56.789123 IP 203.0.113.10 > 203.0.113.100: ICMP echo reply, id 1234, seq 1, length 64 -
流量應顯示來自外部 IP 位址,證明網際網路閘道輸入路由正在將網際網路流量傳送至您的執行個體。
-
疑難排解
依照本節內容解決設定網際網路閘道輸入路由時可能遇到的常見問題。
- 流量無法抵達執行個體
-
-
驗證路由表是否已將正確的 ENI ID 設定為目標。
-
確認 BYOIP 集區已與網際網路閘道路由表建立關聯。
-
檢查執行個體是否已停用來源/目的地檢查。
-
確保安全群組允許所測試的流量類型。
-
- 路由建立失敗
-
-
驗證 BYOIP 集區是否已正確與路由表建立關聯。
-
確認目的地 CIDR 是否處於 BYOIP 範圍內。
-
檢查目標 ENI 是否存在且已附加至執行中的執行個體。
-
確保 BYOIP 字首介於 /23 至 /28 之間 (不支援超出此範圍的字首)。
-
- Ping/連線失敗
-
-
驗證 IP 位址是否已新增至執行個體介面。
-
檢查安全群組是否允許 ICMP (用於 ping) 或相關連接埠。
-
確認執行個體是否處於執行中狀態。
-
在多個外部位置進行測試。
-
進階選項:整合路由伺服器實現動態路由
對於需要自動容錯移轉的環境,此功能可與 VPC 路由伺服器整合,實現以下效果:
-
執行個體故障時動態更新路由。
-
無需手動干預路由管理。
-
為關鍵工作負載提供企業級可用性。
這對於需要高可用性的電信業者與 IoT 使用案例尤其重要。
注意
需注意,搭配多個 BGP 對等使用路由伺服器時,單一路由表最多容許 32 個 BGP 對等公告相同字首。
對於需要動態路由、自動容錯移轉及跨多個執行個體分佈負載的環境,建議整合 AWS 路由伺服器。路由伺服器支援 BGP 型動態路由 (而非靜態路由),提供以下能力:
-
透過 BGP 從執行個體執行動態路由公告。
-
在多個目標執行個體間執行自動容錯移轉。
-
跨多個端點實現負載分佈。
-
透過 BGP 協定執行集中路由管理。
這是企業級部署的重要使用案例,能充分滿足高可用性與動態路由能力需求。如需有關路由伺服器設定的詳細說明,請參閱 AWS 路由伺服器文件。
清除
為避免持續產生費用,您應刪除在本教學課程中建立的資源:
步驟 1:終止 EC2 執行個體
完成此步驟,即可終止 EC2 執行個體,避免運算資源持續產生費用。
AWS 主控台
-
開啟 Amazon EC2 主控台
。 -
在 EC2 主控台的導覽窗格中,選擇執行個體。
-
選取您的執行個體,選擇執行個體狀態、終止執行個體。
-
選擇終止加以確認。
AWS CLI
aws ec2 terminate-instances --instance-ids i-0123456789abcdef0 --region us-east-1
步驟 2:從 VPC 分離網際網路閘道
完成此步驟,即可從 VPC 分離並刪除網際網路閘道。
AWS 主控台
-
開啟 Amazon VPC 主控台
。 -
在 VPC 主控台的導覽窗格中,選擇網際網路閘道。
-
選取您的網際網路閘道,然後選擇動作、從 VPC 分離。
-
選擇分離網際網路閘道。
-
完成分離後,選擇動作、刪除網際網路閘道。
-
選擇刪除網際網路閘道。
AWS CLI
aws ec2 detach-internet-gateway --internet-gateway-id igw-0123456789abcdef0 --vpc-id vpc-0123456789abcdef0 --region us-east-1 aws ec2 delete-internet-gateway --internet-gateway-id igw-0123456789abcdef0 --region us-east-1
步驟 3:刪除 VPC
完成此步驟,即可刪除 VPC 及所有相關資源,從而完成清理程序。
AWS 主控台
-
在 VPC 主控台中,選擇您的 VPC。
-
選取您的 VPC,然後選擇動作、刪除 VPC。
-
輸入
delete進行確認,然後選擇刪除。
AWS CLI
aws ec2 delete-vpc --vpc-id vpc-0123456789abcdef0 --region us-east-1
注意
刪除 VPC 也會隨之刪除關聯的子網路、路由表與安全群組。
注意
BYOIP 集區仍可供日後使用,不會在此清理程序中刪除。