無法通過 NAT 將 aws VPC 私有實例連接到網際網路
嘗試
使用此處描述的場景 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 實例,您需要對其進行自定義:
簡單的解決方案:
使用已配置為用作 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 年) - 其中大部分包含版本號中的年份
……最好/最簡單地選擇最新版本。