Amazon-Ec2

無法通過 NAT 將 aws VPC 私有實例連接到網際網路

  • February 15, 2017

嘗試

使用此處描述的場景 2 在 VPC 私有子網中的 aws 實例上安裝 LAMP 堆棧:http: //docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Scenario2.html

我已經設置了相關子網、安全組、網際網路網關和路由表。

通過我的設置,我可以成功:

  • ping NAT

  • ssh 到 NAT

  • 從 NAT ping 外部網站(例如ping ietf.org

  • 從 NAT ping 私有實例(例如ping 10.0.X.X

  • ssh 到私有實例

  • 從私有實例 ping NAT

但是,我無法從私有實例 ping 到 Internet(即ping ietf.org不起作用)

,當我從私有實例嘗試時sudo yum update,我收到以下錯誤:

Cannot find a valid baseurl for repo: amzn-main/latest

我認為這是路由或安全組錯誤…?

注意:

  • NAT 實例禁用源/目標檢查

  • NAT 實例分配了公共 IP 但沒有彈性 IP

  • 未實施 ACL(保留為預設值)

  • 公共子網的路由表:

10.0.X.X/XX local  
0.0.0.0/0 internet gateway
  • 私有子網的路由表:
10.0.X.X/XX local  
0.0.0.0/0 nat instance
  • 安全組如下:

私有實例入站

ALL Traffic =  vpc_private_sg    
SSH(22) = vps_nat_sg  
MySQL(3306) = vpc_public_sg  
ALL ICMP = 0.0.0.0/0  

私有實例出站

SSH(22) = vps_nat_sg  
HTTP(80) = 0.0.0.0/0  
HTTPS(443) = 0.0.0.0/0  
ALL ICMP = 0.0.0.0/0  

NAT 實例入站

ALL Traffic =  vpc_private_sg    
SSH(22) = vps_nat_sg  
SSH(22) = 10.0.X.X/XX  
HTTP(80) = 10.0.X.X/XX  
HTTPS(443) = 10.0.X.X/XX  
ALL ICMP = 0.0.0.0/0  

NAT 實例出站

SSH(22) = 10.0.X.X/XX  
HTTP(80) = 0.0.0.0/0  
HTTPS(443) = 0.0.0.0/0  
ALL ICMP = 0.0.0.0/0  

問題:

標準 AMI 實例無法作為 NAT 實例正常工作

如果您嘗試將標準 AMI 實例用作 NAT 實例,則會出現與上述問題中所述相同的症狀:

  • 與 NAT 的 SSH 連接 = OK
  • 與私有子網實例的 SSH 連接 = OK
  • ping 到/從私有子網實例 = OK
  • 私有子網實例出站呼叫 = FAIL(即使使用有效的路由表/安全組)

硬解:

要將標準 AMI 實例用作 NAT 實例,您需要對其進行自定義:

  • 修改 iptables,如下所示
  • 確保啟用 IPv4 轉發並禁用 ICMP 重定向,如此處所述

簡單的解決方案:

使用已配置為用作 NAT 實例 的社區amzn-ami-vpc-nat實例

對於大多數人(將 NAT 實例用於管理連接目的)來說,根本不需要自定義 NAT 實例。

AWS 提供為 NAT 使用(即如上所述修改)配置的標準實例作為社區 AMI 實例。

  • Launch Instance在 EC2 控制面板中點擊
  • Step 1: Choose an Amazon Machine Image (AMI)點擊Community AMIs左側的選擇器
  • 在搜尋輸入框中鍵入amzn-ami-vpc-nat 2017或更簡單(注意如下)nat 2017
  • 啟動您的 NAT 並確保您的路由表 + 安全組是正確的 - 請參見此處

注意:

您在社區 AMI 實例搜尋中包含年份的原因是 AWS 保留了所有舊的 NAT AMI 版本(撰寫本文時為 21 個,可追溯到 2013 年) - 其中大部分包含版本號中的年份

……最好/最簡單地選擇最新版本。

引用自:https://serverfault.com/questions/675420