尝试使用此处描述的方案 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 通互联网(即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
答案1
问题:
标准 AMI 实例无法作为 NAT 实例正常工作
如果您尝试使用标准 AMI 实例作为 NAT 实例,它将具有与上述问题中描述的相同的症状:
- SSH 连接到 NAT = OK
- SSH 连接到私有子网实例 = 正常
- 对私有子网实例执行 ping 操作 = 正常
- 私有子网实例出站调用 = 失败(即使有有效的路由表/安全组)
困难的解决方案:
要使标准 AMI 实例作为 NAT 实例运行,您需要对其进行自定义:
简单的解决方案:
使用社区amzn-ami-vpc-nat实例已配置为用作 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 年) - 其中大部分在版本号中包含年份
...最好/最简单的方法是选择最新版本。