无法通过NAT将aws VPC私有实例连接到Internet

试图在VPC私有子网的aws实例上安装LAMP堆栈
使用这里描述的scheme2: 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.XX
– 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.XX/XX local 0.0.0.0/0 internet gateway 

– 专用子网的路由表:

 10.0.XX/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.XX/XX HTTP(80) = 10.0.XX/XX HTTPS(443) = 10.0.XX/XX ALL ICMP = 0.0.0.0/0 

NAT实例出站

 SSH(22) = 10.0.XX/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连接=确定
  • 到私有子网实例的SSH连接=确定
  • ping私人子网实例=确定
  • 私人子网实例出站呼叫=失败(即使有有效的路由表/安全组)

硬解:

要获得标准AMI实例作为NAT实例工作,您需要对其进行自定义:

  • 修改iptables,如下所示
  • 确保启用IPv4转发,并禁用ICMPredirect

简单的解决scheme:

使用已经configuration用作NAT实例的Community amzn-ami-vpc-nat实例

对于大多数(使用NAT实例进行pipe理连接的用户)来说,自定义的NAT实例是不必要的。

AWS提供了为NAT使用而configuration的标准实例(即如上所述进行了修改)作为社区AMI实例。

  • 点击EC2控制面板上的Launch Instance
  • Step 1: Choose an Amazon Machine Image (AMI)单击左侧的Community AMIsselect器
  • 请在searchinput框中inputamzn-ami-vpc-nat 2017或更简单的nat 2017 (注意以下)
  • 启动您的NAT,并确保您的路由表+安全组是正确的 – 请参阅此处

注意:
您在社区AMI实例search中包含年份的原因是,AWS保留了所有旧的NAT AMI版本(在撰写本文时为21,回到2013年) – 其中主要包括版本号中的一年
…最好/最简单的select最新版本。