我的大脑有点疲惫,试图弄清楚这一点,但我似乎无法让私有子网连接到互联网以获取更新。基本上我想要的只是这些服务器的网络访问。我尝试过在其他帖子中找到的解决方案,但很容易遗漏了一些东西,因为我已经研究这个问题很长时间了。
到目前为止我已经完成以下设置:
- 禁用 NAT 实例上的源/目标检查
- 为公共子网创建路由表并将其源设置为 IGW(已验证此方法有效)
- 为私有子网创建路由表并将其源设置为 NAT 实例
- 为 NAT 实例创建安全组,并为 80/443 和 ssh 设置入站和出站规则
- 为私有实例创建安全组,入站和出站为 80/443 和 ssh
我能够通过 SSH 跳转到 NAT 实例,然后转到私有服务器,所以我知道大部分工作正常。我已通过 ping 内部地址验证了我的规则,但当我离开本地网络时,问题就开始出现了。
我需要查看哪里或排除哪些故障来帮助缩小范围?我是否忽略了 NAT 实例上需要进行的某些配置?
编辑:配置更新
- VPC:172.16.0.0./16
- 私有子网:172.16.1.0/24
- 公有子网:172.16.0.0/24
私有子网路由表:
指向公共子网中的 NAT 实例。无法访问互联网,将 EIP 附加到面向公共互联网的接口。
公有子网路由表:
将公共子网指向 IGW,我已验证互联网访问。
想法:
我开始认为需要在位于公共子网中的 NAT 实例上设置或创建一些东西来转发来自私有实例的流量,但我不确定需要添加什么。我发现这个帖子这解释了在 iptables 中添加伪装规则,这适用于我的情况吗?
答案1
是的,您必须在 nat 主机上设置 iptables 伪装。
iptables -A POSTROUTING -t nat -s (private-subnet/cidr) -j MASQUERADE
我们有相同的设置,您已正确完成其他所有操作(禁用源检查,将私有子网指向 nat 实例的接口,将公共子网指向 igw)。
答案2
刚刚偶然发现有类似的问题。假设您使用向导创建了 NAT 实例,那么上面提到的伪装规则就已经存在了 - 如果您要“自己动手”创建 NAT 实例,则只需添加这个规则。(我通常会这样做,这样我就可以加倍努力,并将其作为 OpenSWAN L2TP/IPSec 远程用户 VPN 服务器)。
自从上次创建这些规则以来,我忘记添加的是允许所有流量(或至少您想要允许的流量)来自所有私有安全组或子网的规则,这些子网将通过 NAT 实例路由流量。如果没有允许的规则,NAT 实例将不会接受此类出站流量 - 不要只考虑从互联网进入的内容。不确定这是否是您的问题,因为您确实提到将 22/80/443 添加到您的 NAT 安全组,但我想建议其他可能遇到类似问题的人这样做。
答案3
我为此奋斗了一段时间,直到我发现了这个:
然后,从已配置为作为 NAT 实例运行的 AMI 启动实例到您的公有子网中。Amazon 提供配置为作为 NAT 实例运行的 Amazon Linux AMI。这些 AMI 的名称中包含字符串 amzn-ami-vpc-nat,因此您可以在 Amazon EC2 控制台中搜索它们。
http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html#NATInstance
我已将 NAT 服务器设置为我自己的标准(Ubuntu)实例,一旦我使用 Amazon Linux AMI 并更新我的路由表,它就开始工作了。