本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
本節說明如何建立和使用 NAT 執行個體,以啟用私有子網路中的資源,以在虛擬私有雲端外部進行通訊。
任務
1. 為 NAT 執行個體建立 VPC
按照以下程序建立包含公有子網路和私有子網路的 VPC。
若要建立 VPC
-
在 https://console.aws.amazon.com/vpc/
開啟 Amazon VPC 主控台。 -
選擇建立 VPC。
-
針對 Resources to create (建立資源),選擇 VPC and more (VPC 等)。
-
針對自動產生名稱標籤,輸入 VPC 的名稱。
-
若要設定子網路,請執行下列動作:
-
對於 Number of Availability Zones (可用區域數量),請根據您的需求選擇 1 或 2。
-
針對 Number of public subnets (公用子網路數量),請確定每個可用區域有一個公用子網路。
-
針對 Number of private subnets (私有子網路數量),請確定每個可用區域有一個私有子網路。
-
-
選擇建立 VPC。
2. 為 NAT 執行個體建立安全群組
按照下表所述的規則建立安全群組。這些規則可讓 NAT 執行個體接收從私有子網路中執行個體流向網際網路的流量,以及來自您網路的 SSH 流量。NAT 執行個體也可以傳送流量到網際網路,讓私有子網路中的執行個體能取得軟體更新。
下列是建議的傳入規則。
來源 | 通訊協定 | 連接埠範圍 | 評論 |
---|---|---|---|
私有子網路 CIDR |
TCP | 80 | 允許來自私有子網路伺服器的傳入 HTTP 流量 |
私有子網路 CIDR |
TCP | 443 | 允許來自私有子網路伺服器的傳入 HTTPS 流量 |
您網路的公有 IP 地址範圍 |
TCP | 22 | 允許傳入 SSH 從您的網路存取 NAT 執行個體 (透過網際網路閘道) |
下列是建議的傳出規則。
目的地 | 通訊協定 | 連接埠範圍 | 評論 |
---|---|---|---|
0.0.0.0/0 | TCP | 80 | 允許傳出 HTTP 存取網際網路。 |
0.0.0.0/0 | TCP | 443 | 允許傳出 HTTPS 存取網際網路。 |
建立安全群組
-
在 https://console.aws.amazon.com/vpc/
開啟 Amazon VPC 主控台。 -
在導覽窗格中,選擇安全群組。
-
選擇 Create Security Group (建立安全群組)。
-
輸入安全群組的名稱和說明。
-
在 VPC 欄位中選取 NAT 執行個體的 VPC ID。
-
在傳入規則下新增傳入流量的規則,如下所示:
-
選擇新增規則。在類型欄位中選擇 HTTP,然後在來源欄位中輸入私有子網路的 IP 地址範圍。
-
選擇新增規則。在類型欄位中選擇 HTTPS,然後在來源欄位中輸入私有子網路的 IP 地址範圍。
-
選擇新增規則。在類型欄位中選擇 SSH,然後在來源欄位中輸入網路的 IP 地址範圍。
-
-
在傳出規則下新增傳出流量的規則,如下所示:
-
選擇新增規則。在類型欄位中選擇 HTTP,然後在目的地欄位中輸入 0.0.0.0/0。
-
選擇新增規則。在類型欄位中選擇 HTTPS,然後在目的地欄位中輸入 0.0.0.0/0。
-
-
選擇 Create Security Group (建立安全群組)。
如需詳細資訊,請參閱安全群組。
3. 建立 NAT AMI
將 NAT AMI 設定為在 EC2 執行個體上執行 NAT。您必須先建立 NAT AMI,然後才能使用 NAT AMI 啟動 NAT 執行個體。
如果您計劃將 Amazon Linux 以外的作業系統用於 NAT AMI,則請參閱相應作業系統的說明文件,從中了解如何設定 NAT。請務必儲存這些設定,以便這些設定在執行個體重新啟動後仍然存在。
為 Amazon Linux 建立一個 NAT AMI
-
啟動執行 AL2023 或 Amazon Linux 2 的 EC2 執行個體。請務必指定您為 NAT 執行個體建立的安全群組。
-
連線到執行個體,並在執行個體上執行下列命令以啟用 iptables。
sudo yum install iptables-services -y sudo systemctl enable iptables sudo systemctl start iptables
-
在執行個體上執行下列操作以啟用 IP 轉送,以便在重新開機後持續進行:
使用 nano 或 vim 等文字編輯器,建立以下組態檔案:
/etc/sysctl.d/custom-ip-forwarding.conf
。-
將以下行新增至組態檔案。
net.ipv4.ip_forward=1
儲存組態檔案並關閉文字編輯器。
-
執行以下命令,套用組態檔案。
sudo sysctl -p /etc/sysctl.d/custom-ip-forwarding.conf
-
在執行個體上執行以下命令,並記下主要網路介面的名稱。下一個步驟您將需要這項資訊。
netstat -i
在下面的範例輸出中,
docker0
是由 Docker 建立的網絡介面,eth0
是主要網路介面,lo
是迴路介面。Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg docker0 1500 0 0 0 0 0 0 0 0 BMU eth0 9001 7276052 0 0 0 5364991 0 0 0 BMRU lo 65536 538857 0 0 0 538857 0 0 0 LRU
在下列範例輸出中,主要網路介面為
enX0
。Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg enX0 9001 1076 0 0 0 1247 0 0 0 BMRU lo 65536 24 0 0 0 24 0 0 0 LRU
在下列範例輸出中,主要網路介面為
ens5
。Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg ens5 9001 14036 0 0 0 2116 0 0 0 BMRU lo 65536 12 0 0 0 12 0 0 0 LRU
-
在執行個體上執行下列命令以設定 NAT。如果主要網路介面不是
eth0
,則使用您在上一個步驟中記下的主要網路介面來取代eth0
。sudo /sbin/iptables -t nat -A POSTROUTING -o
eth0
-j MASQUERADE sudo /sbin/iptables -F FORWARD sudo service iptables save -
從 EC2 執行個體建立 NAT AMI。如需詳細資訊,請參閱《Amazon EC2 使用者指南》中的從執行個體建立 Linux AMI。
4. 啟動 NAT 執行個體
按照下列步驟操作,透過您建立的 VPC、安全群組和 NAT AMI 來啟動 NAT 執行個體。
啟動 NAT 執行個體
在 https://console.aws.amazon.com/ec2/
開啟 Amazon EC2 主控台。 -
在儀表板上,選擇啟動執行個體。
-
在名稱欄位中輸入 NAT 執行個體名稱。
-
在應用程式和作業系統映像欄位中,選取 NAT AMI (依序選擇瀏覽更多 AMI、我的 AMI)。
-
在執行個體類型欄位中,選擇提供 NAT 執行個體所需運算、記憶體和儲存資源的執行個體類型。
-
對於金鑰對,請選取現有的金鑰對或選擇建立新的金鑰對。
-
針對 Network settings (網路設定),執行下列操作:
-
選擇編輯。
-
在 VPC 欄位選擇您建立的 VPC。
-
對於子網路,請選擇先前建立的公有子網路。
-
在 Auto-assign public IP (自動指派公有 IP) 中,選擇 Enable (啟用)。此外,也可在啟動 NAT 執行個體之後,配置彈性 IP 地址並將其指派給 NAT 執行個體。
-
對於防火牆,請選擇選取現有的安全群組,然後選擇先前建立的安全群組。
-
-
選擇啟動執行個體。選擇執行個體 ID 以開啟執行個體詳細資訊頁面。等待執行個體狀態變更為執行中,並等待狀態檢查成功。
-
停用 NAT 執行個體的來源/目的地檢查 (請參閱 5. 停用來源/目標檢查)。
-
更新路由表以將流量傳送至 NAT 執行個體 (請參閱 6. 更新路由表)。
5. 停用來源/目標檢查
每個 EC2 執行個體預設都會執行來源/目標檢查。這表示執行個體必須是其傳送或接收流量的來源或目標。但當它本身不是來源或目標時,NAT 執行個體必須能夠傳送並接收流量。因此,您必須停用 NAT 執行個體的來源/目標檢查。
停用來源/目的地檢查
-
在 https://console.aws.amazon.com/ec2/
開啟 Amazon EC2 主控台。 -
在導覽窗格中,選擇 Instances (執行個體)。
-
選取 NAT 執行個體。
-
選擇動作、聯網、變更來源/目的地檢查。
-
在來源/目的地檢查欄位中選取停止。
-
選擇 Save (儲存)。
-
如果 NAT 執行個體具有次要網路介面,請從 Networking (聯網) 索引標籤的 Network interfaces (網路介面) 對其進行選擇。選擇界面 ID 以移至網路界面頁面。選擇 Actions (動作)、Change source/dest. check (變更來源/目標檢查),清除 Enable (啟用),選擇 Save (儲存)。
6. 更新路由表
私有子網路的路由表必須具有路由,能將網際網路的流量傳送至 NAT 執行個體。
更新路由表
-
在 https://console.aws.amazon.com/vpc/
開啟 Amazon VPC 主控台。 -
在導覽窗格中,選擇 Route tables (路由表)。
-
選取私有子網路的路由表。
-
在路由標籤上,選擇編輯路由,然後選擇新增路由。
-
在目的地欄位中輸入 0.0.0.0/0,在目標欄位中輸入 NAT 執行個體的執行個體 ID。
-
選擇 Save changes (儲存變更)。
如需詳細資訊,請參閱設定路由表。
7. 測試 NAT 執行個體
在啟動 NAT 執行個體並完成上述設定步驟後,您就可以執行測試,檢查私有子網路中的執行個體是否可以將 NAT 執行個體作為堡壘伺服器使用,透過 NAT 執行個體存取網際網路。
步驟 1:更新 NAT 執行個體安全群組
若要允許私有子網路中的執行個體傳送 ping 流量至 NAT 執行個體,請新增規則以允許傳入和傳出 ICMP 流量。若要允許 NAT 執行個體做為堡壘伺服器,請新增規則以允許傳出 SSH 流量至私有子網路。
更新您的 NAT 執行個體安全群組
在 https://console.aws.amazon.com/vpc/
開啟 Amazon VPC 主控台。 在導覽窗格中,選擇安全群組。
選取與 NAT 執行個體關聯之安全群組的核取方塊。
在傳入規則索引標籤上,選擇編輯傳入規則。
選擇 Add rule (新增規則)。選擇 Type (類型) 的 All ICMP - IPv4 (所有 ICMP - IPv4)。在來源欄位中選擇自訂,然後輸入私有子網路的 IP 地址範圍。選擇儲存規則。
-
在傳出規則標籤上,選擇編輯傳出規則。
-
選擇 Add rule (新增規則)。選擇 Type (類型) 的 SSH。在目的地欄位中選擇自訂,然後輸入私有子網路的 IP 地址範圍。
-
選擇 Add rule (新增規則)。選擇 Type (類型) 的 All ICMP - IPv4 (所有 ICMP - IPv4)。對於 Destination (目的地) 選擇 Anywhere - IPv4 (隨處 - IPv4)。選擇儲存規則。
步驟 2:在私有子網路中啟動測試執行個體
在您的私有子網路中啟動執行個體。您必須允許來自 NAT 執行個體的 SSH 存取,而且必須使用您用於 NAT 執行個體的相同金鑰對。
在私有子網路中啟動測試執行個體
在 https://console.aws.amazon.com/ec2/
開啟 Amazon EC2 主控台。 -
在儀表板上,選擇啟動執行個體。
-
選取您的私有子網路。
-
請勿將公有 IP 地址指派給此執行個體。
-
務必確保此執行個體的安全群組允許來自 NAT 執行個體或公有子網路 IP 地址範圍的傳入 SSH 存取,以及傳出 ICMP 流量。
-
選取用於 NAT 執行個體的相同金鑰對。
步驟 3:Ping 到啟用 ICMP 的網站
若要確認私有子網路中的執行個體是否可以使用 NAT 執行個體與網際網路通訊,請執行 ping 命令。
測試來自私有執行個體的網際網路連線
-
從您的本機電腦設定 SSH 代理程式轉送,讓您可以使用 NAT 執行個體作為堡壘伺服器。
ssh-add
key
.pem -
從本機電腦連線到 NAT 執行個體。
ssh -A ec2-user@
nat-instance-public-ip-address
-
在 NAT 執行個體中,執行 ping 命令,並指定啟用 ICMP 的網站。
[ec2-user@ip-10-0-4-184]$
pingietf.org
若要確認您的 NAT 執行個體可以存取網際網路,請確認您收到如下的輸出,然後按 Ctrl+C 以取消 ping 命令。否則,請確認 NAT 執行個體位於公有子網路中 (其路由表具有通往網際網路閘道的路由)。
PING ietf.org (104.16.45.99) 56(84) bytes of data. 64 bytes from 104.16.45.99 (104.16.45.99): icmp_seq=1 ttl=33 time=7.88 ms 64 bytes from 104.16.45.99 (104.16.45.99): icmp_seq=2 ttl=33 time=8.09 ms 64 bytes from 104.16.45.99 (104.16.45.99): icmp_seq=3 ttl=33 time=7.97 ms ...
-
從您的 NAT 執行個體,使用其私有 IP 地址連線到您私有子網路中的執行個體。
[ec2-user@ip-10-0-4-184]$
ssh ec2-user@private-server-private-ip-address
-
從您的私有執行個體執行 ping 命令,測試能否連線到網際網路。
[ec2-user@ip-10-0-135-25]$
pingietf.org
若要確認您的私有執行個體可以透過 NAT 執行個體存取網際網路,請確認您收到如下的輸出,然後按 Ctrl+C 以取消 ping 命令。
PING ietf.org (104.16.45.99) 56(84) bytes of data. 64 bytes from 104.16.45.99 (104.16.45.99): icmp_seq=1 ttl=33 time=8.76 ms 64 bytes from 104.16.45.99 (104.16.45.99): icmp_seq=2 ttl=33 time=8.26 ms 64 bytes from 104.16.45.99 (104.16.45.99): icmp_seq=3 ttl=33 time=8.27 ms ...
故障診斷
如果從私有子網路中的伺服器執行 ping 命令失敗,請使用下列步驟對問題進行故障診斷:
-
確認您是否已對啟用了 ICMP 的網站執行 Ping 動作。若未執行,伺服器則無法接收回覆封包。若要測試此作業,請從您電腦的命令列終端機執行相同的 ping 命令。
-
確認 NAT 執行個體的安全群組是否允許來自您私有子網路的傳入 ICMP 流量。如不允許,您的 NAT 執行個體無法接收私有執行個體的 ping 命令。
-
確認您是否已停用 NAT 執行個體的來源/目的地檢查。如需詳細資訊,請參閱5. 停用來源/目標檢查。
-
確認您是否已正確設定路由表。如需詳細資訊,請參閱6. 更新路由表。
步驟 4:清理
如果私有子網路中不再需要測試伺服器,請終止該執行個體,這樣您就不再需要支付該執行個體的費用。如需詳細資訊,請參閱《Amazon EC2 使用者指南》中的終止您的執行個體。
如果您不再需要 NAT 執行個體,您可以停止或終止該執行個體,這樣您就不再需要支付該執行個體的費用。如果您已建立 NAT AMI,則可以在需要時建立新的 NAT 執行個體。