將網際網路流量路由到單一網路界面 - Amazon Virtual Private Cloud

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

將網際網路流量路由到單一網路界面

您可以將目的地為大型公有 IP 地址集區的傳入網際網路流量路由至 VPC 中的單一彈性網路界面 (ENI)。

以前,網際網路閘道只接受以與 VPC 中的網路介面直接關聯的公有 IP 地址為目的地的流量。執行個體類型會限制可與網路介面相關聯的 IP 地址數量,為電信和物聯網 (IoT) 等需要處理大於這些限制之 IP 集區流量的產業帶來挑戰。

此路由消除了傳入網際網路連線上的複雜地址轉譯。您可以攜帶自己的公有 IP 集區 (BYOIP),並將 VPC 網際網路閘道設定為接受整個集區的流量並將其路由至單一網路介面。此功能對下列項目特別有用:

  • 電信:管理大型訂閱者 IP 集區,無需地址翻譯開銷

  • IoT 應用程式:合併來自數千個裝置 IP 地址的流量

  • 任何案例:需要超過 ENI 關聯限制的流量路由

您可以將此路由與 VPC Route Server 整合,以便在容錯移轉案例期間進行動態路由更新。

主要優點

此路由方法提供下列優點:

  • 不需要地址轉譯 - 直接路由可消除 NAT 複雜性

  • 繞過 ENI 限制 - 處理大於執行個體關聯限制的 IP 集區

  • 產業最佳化 - 專為 Telco 和 IoT 需求而打造

  • 動態容錯移轉 - 與 Route Server 整合以進行自動更新

可用性

您可以在所有 AWS 商業區域、 AWS 中國區域和 AWS GovCloud 區域使用此功能。

開始之前

開始本教學課程之前,請確定您已:

  1. BYOIP 集區:您必須已將自己的 IP 地址範圍帶入其中 AWS。完成在 Amazon EC2 中使用您自己的 IP 地址 (BYOIP) 中的步驟。

  2. 驗證您的 BYOIP 集區:執行下列動作以確認集區已就緒:

    aws ec2 describe-public-ipv4-pools --region us-east-1

    在輸出中尋找集區,並確保 PoolAddressRanges顯示Available地址。

  3. 適當的許可:確保 AWS 您的帳戶具有建立 VPC 資源、EC2 執行個體和管理 BYOIP 集區的許可。

此功能的運作方式

本節說明網際網路閘道傳入路由背後的技術概念,以及流量如何從網際網路流向目標執行個體。

為什麼使用網際網路閘道輸入路由

先前,由於 ENI 關聯限制,您需要執行地址轉譯來合併大量 IP 地址的流量。此增強功能允許 BYOIP 集區直接路由至目標執行個體,以消除此複雜性。

路由的運作方式

此功能僅適用於您用於 AWS 遵循 BYOIP 程序的公有 IP CIDRs。BYOIP 程序可確保您的帳戶擁有公有 IP CIDR。一旦您擁有 BYOIP 公有 CIDR:

  1. 您可以將此公有 IP 地址集區與網際網路閘道路由表建立關聯。網際網路閘道必須已與 VPC 建立關聯。此關聯允許 VPC 接受目的地為 IP CIDR 的流量。確保網際網路閘道具有未與任何子網路共用的專用路由表。

  2. 現在您已將 BYOIP 集區與網際網路閘道路由表建立關聯,您可以在網際網路閘道路由表中輸入目的地等於 IP CIDR 或其子集的路由。此路由的目標將是您要路由流量的 ENI。

  3. 當您以 BYOIP CIDR 為目標的流量進入時 AWS, AWS 查看網際網路閘道路由表,並相應地將流量路由到相關的 VPC。

  4. 在 VPC 中,網際網路閘道會將流量路由到目標 ENI。

  5. 目標 (與您的工作負載相關聯的彈性網路界面) 會處理流量。

最佳實務

  • 將路由表分開:網際網路閘道路由表必須僅專用於網際網路閘道。請勿將此路由表與任何 VPC 子網路建立關聯。使用個別路由表進行子網路路由。

  • 請勿直接指派 BYOIP IPs:請勿將 BYOIP 集區的公有 IP 地址直接關聯至 EC2 執行個體或網路介面。網際網路閘道輸入路由功能會將流量路由至執行個體,而不需要直接 IP 關聯。

重要

如果您使用的是 VPC 封鎖公開存取 (BPA),則啟用 BPA 時,即使您已設定子網路層級 BPA 排除,也會使用輸入路由封鎖子網路的流量。子網路層級排除不適用於傳入路由。若要允許已啟用 BPA 的輸入路由流量:

  • 完全停用 BPA,或

  • 使用 VPC 層級排除

步驟 1:建立 VPC

完成此步驟,以建立將託管目標執行個體和網際網路閘道的 VPC。

注意

請確定您尚未達到 VPC 配額限制。如需詳細資訊,請參閱Amazon VPC 配額

AWS 主控台

  1. 開啟 Amazon VPC 主控台

  2. 在 VPC 儀表板上,選擇 Create VPC (建立 VPC)

  3. 建立資源,選擇僅 VPC

  4. 針對名稱標籤,輸入 VPC 的名稱 (例如 IGW-Ingress-VPC)。

  5. 針對 IPv4 CIDR 區塊,輸入 CIDR 區塊 (例如 10.0.0.0/16)。

  6. 選擇建立 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 主控台

  1. 開啟 Amazon VPC 主控台

  2. 在 VPC 主控台中,選擇網際網路閘道

  3. 選擇建立網際網路閘道

  4. 針對名稱標籤,輸入網際網路閘道的名稱 (例如 IGW-Ingress-Gateway)。

  5. 選擇建立網際網路閘道

  6. 選取您的網際網路閘道,然後選擇動作連接至 VPC

  7. 選取您的 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

注意:將資源 IDs取代為上一個步驟的實際 IDs。

步驟 3:為您的目標執行個體建立子網路

完成此步驟以建立要部署目標執行個體的子網路。

AWS 主控台

  1. 在 VPC 主控台的導覽窗格中,選擇 Subnets (子網路)。

  2. 選擇 Create subnet (建立子網路)

  3. VPC ID 下,選擇您的 VPC。

  4. 針對子網路名稱,輸入名稱 (例如 Target-Subnet)。

  5. 對於可用區域,您可以選擇子網路的區域,或保留預設的無偏好設定,讓 為您 AWS 選擇。

  6. 對於 IPv4 CIDR 區塊,選取手動輸入並輸入 CIDR 區塊 (例如,10.0.1.0/24)。

  7. 選擇 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 主控台

  1. 在 VPC 主控台導覽窗格中,選擇路由表

  2. 選擇 Create route table (建立路由表)。

  3. 針對名稱,輸入路由表的名稱 (例如 Target-Subnet-Route-Table)。

  4. VPC 中,選擇您的 VPC。

  5. 選擇 Create route table (建立路由表)。

  6. 選取您的路由表,然後選擇動作編輯子網路關聯

  7. 選取您的子網路,然後選擇儲存關聯

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 主控台

  1. 在 VPC 主控台導覽窗格中,選擇安全群組

  2. 選擇建立安全群組

  3. 針對安全群組名稱,輸入名稱 (例如 IGW-Target-SG)。

  4. 對於 Description (說明),輸入 Security group for IGW ingress routing target instance

  5. 針對 VPC,選取您的 VPC。

  6. 若要新增傳入規則,請選擇傳入規則。針對每個規則,選擇新增規則並指定下列項目:

    • 類型:所有 ICMP - IPv4,來源:0.0.0.0/0 (用於 ping 測試)。

    • 類型:SSH、連接埠:22、來源: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 主控台

  1. 開啟 Amazon EC2 主控台

  2. 選擇啟動執行個體

  3. 針對名稱,輸入執行個體的名稱 (例如 IGW-Target-Instance)。

  4. 針對應用程式和作業系統映像 (Amazon Machine Image),選擇 Amazon Linux 2023 AMI

  5. 針對執行個體類型,選擇 t2.micro (符合免費方案的資格)。

  6. 針對金鑰對 (登入),選取現有的金鑰對或建立新的金鑰對。

  7. 針對網路設定,選擇編輯並設定:

    • VPC:選取您的 VPC

    • 子網路:選取您的子網路

    • 自動指派公有 IP:啟用

    • 防火牆 (安全群組):選取現有的安全群組,然後選擇您的安全群組

  8. 選擇啟動執行個體

  9. 重要:啟動後,前往執行個體詳細資訊並記下網路介面 ID (以 "eni-" 開頭) - 步驟 10 將需要此 ID。

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:

  1. 在 EC2 主控台中,選取您的執行個體。

  2. 前往聯網索引標籤。

  3. 請注意網路界面 ID (例如 eni-0abcdef1234567890)。

若要使用 尋找 ENI ID AWS CLI:

aws ec2 describe-instances --instance-ids i-0123456789abcdef0 --query 'Reservations[0].Instances[0].NetworkInterfaces[0].NetworkInterfaceId' --output text --region us-east-1

步驟 7:建立網際網路閘道路由表

完成此步驟,為將處理輸入路由的網際網路閘道建立專用路由表。

AWS 主控台

  1. 在 VPC 主控台中,選擇路由表

  2. 選擇 Create route table (建立路由表)。

  3. 針對名稱,輸入路由表的名稱 (例如,IGW-Ingress-Route-Table)。

  4. VPC 中,選擇您的 VPC。

  5. 選擇 Create route table (建立路由表)。

  6. 選取您的路由表,然後選擇 Edge 關聯索引標籤。

  7. 選擇編輯邊緣關聯

  8. 選取您的網際網路閘道,然後選擇儲存變更

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 主控台

  1. 在 VPC 主控台導覽窗格中,選擇路由表,然後選取您建立的路由表。

  2. Edge associations (邊緣關聯) 標籤,選擇 Edit edge associations (編輯邊緣關聯)。

  3. 選取網際網路閘道的核取方塊。

  4. 選擇儲存變更

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 主控台

  1. 在 VPC 主控台導覽窗格中,選擇路由表,然後選取您建立的網際網路閘道路由表。

  2. 按一下 IPv4 集區關聯索引標籤。

  3. 按一下編輯關聯按鈕。

  4. 選取 BYOIP 集區 (例如 pool-12345678901234567)。

  5. 按一下儲存關聯按鈕。

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 主控台

  1. 在 VPC 主控台導覽窗格中,選擇路由表,然後選取您建立的網際網路閘道路由表。

  2. 選擇 Actions (動作)、Edit routes (編輯路由)。

  3. 選擇 Add route (新增路由)

  4. 針對目的地,輸入您的 BYOIP CIDR 或子集 (例如 203.0.113.0/24)。字首必須介於 /23 和 /28 之間。

  5. 針對目標,選取網路界面,然後輸入執行個體的 ENI ID (例如 eni-0abcdef1234567890)。

  6. 選擇儲存變更

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 主控台

  1. 使用 EC2 Instance Connect 連線至目標執行個體:

    • 在 EC2 主控台中,選取您的執行個體。

    • 選擇動作 > 連線

    • 選取 EC2 Instance Connect 標籤。

    • 選擇連線

  2. 將特定 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、 或類似。

  3. 在 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 主控台

  1. 使用 EC2 Instance Connect 連線至目標執行個體:

    • 在 EC2 主控台中,選取您的執行個體。

    • 選擇動作 > 連線

    • 選取 EC2 Instance Connect 索引標籤。

    • 選擇連線

  2. 將特定 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、 或類似。

  3. 在 EC2 主控台中,停用來源/目的地檢查:

    • 選取執行個體。

    • 前往聯網索引標籤,按一下網路界面。

    • 選擇動作變更來源/目的地檢查停用

AWS CLI

aws ec2 modify-network-interface-attribute \ --network-interface-id eni-0abcdef1234567890 \ --no-source-dest-check \ --region us-east-1

步驟 13:測試連線

完成此步驟,以確認網際網路流量已透過 BYOIP 地址正確路由至目標執行個體。

  1. 在目標執行個體上,使用 tcpdump 監控傳入流量:

    sudo tcpdump -i any icmp
  2. 從另一個終端機或電腦,測試與 BYOIP IP 地址的連線:

    ping 203.0.113.10
  3. 預期結果:

    • 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 Route Server 整合,以:

  • 在執行個體失敗期間動態更新路由

  • 消除路由管理的手動介入

  • 為關鍵工作負載提供企業級可用性

這對於需要高可用性的 Telco 和 IoT 使用案例特別重要。

注意

搭配多個 BGP 對等使用 Route Server 時,請注意,最多 32 個 BGP 對等可以使用路由伺服器將相同的字首公告至相同的路由表。

對於需要動態路由、自動容錯移轉和跨多個執行個體負載分佈的環境,請考慮與 AWS Route Server 整合。Route Server 啟用 BGP 型動態路由,而不是靜態路由,提供:

  • 透過 BGP 從執行個體進行動態路由公告

  • 多個目標執行個體之間的自動容錯移轉

  • 跨多個端點的負載分佈

  • 透過 BGP 通訊協定進行集中式路由管理

這是企業部署的重要使用案例,其中需要高可用性和動態路由功能。如需詳細的 Route Server 設定說明,請參閱 AWS Route Server 文件

清除

若要避免持續收費,請刪除您在本教學課程中建立的資源:

步驟 1:終止 EC2 執行個體

完成此步驟以終止 EC2 執行個體並停止計算資源的費用。

AWS 主控台

  1. 開啟 Amazon EC2 主控台

  2. 在 EC2 主控台導覽窗格中,選擇執行個體

  3. 選取您的執行個體,然後選擇執行個體狀態終止執行個體

  4. 選擇終止以確認。

AWS CLI

aws ec2 terminate-instances --instance-ids i-0123456789abcdef0 --region us-east-1

步驟 2:從 VPC 分離網際網路閘道

完成此步驟,從 VPC 分離和刪除網際網路閘道。

AWS 主控台

  1. 開啟 Amazon VPC 主控台

  2. 在 VPC 主控台導覽窗格中,選擇網際網路閘道

  3. 選取您的網際網路閘道,然後選擇動作從 VPC 分離

  4. 選擇分離網際網路閘道

  5. 分離後,選擇動作刪除網際網路閘道

  6. 選擇刪除網際網路閘道

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 主控台

  1. 在 VPC 主控台中,選擇您的 VPCs

  2. 選取您的 VPC,然後選擇動作刪除 VPC

  3. 輸入 delete 以確認並選擇刪除

AWS CLI

aws ec2 delete-vpc --vpc-id vpc-0123456789abcdef0 --region us-east-1
注意

刪除 VPC 也會刪除相關聯的子網路、路由表和安全群組。

注意

您的 BYOIP 集區仍然可供日後使用,不會在此清除程序中刪除。