特别说明:
本文部分内容在aws官方也没有明确说法,是通过和aws同学的沟通&交流一起达成的阶段性认知。
1.当你通过公有子网下EC2的公网IP去访问这台机器时,实际是先通过这个IP访问到IGW,然后由IGW将请求转发给公网IP绑定的EC2(官方关于此处无明确说明,实际现象是这样,并且和aws同学沟通从理论和现象推测如此),然后返回结构通过IGW返回公网。
原因:
1.1.这个是我在配置22端口开放时发现的问题,当我没有开放22端口,并且启用了ICMP(支持ping)的协议后,通过EC2的公网IP去ping是无法通的。如果公网IP和EC2是直接绑定的,那么通过IP是必然可以直达这台EC2而不需要走IGW,但实际并非如此。
aws的同学提供的一个理论说法(我也认同):理论上来说,公网进VPC也是走IGW进来的,只不过寻址是通过公有IP,不需要路由表特别指定;
私有子网的机器因为没有公有IP,所以需要NAT做地址转换。
1.2.基于1.1我的推测是:这个公有IP虽然是和EC2绑定的,但其实他是指向IGW的,而IGW来控制是否通过,IGW里边有这个公有IP和EC2的映射关系,如果放行通过这个映射将流量打到对应的EC2上(aws的同学赞同我的推测)。
1.3.我的另一个推测(工程角度说得通,无证据,纯从云平台的高HA角度推测):方便流量/带宽的统一计算以及HA。如果不过网关直接通过公有IP打到EC2,做这个的代价就太大了,而且数据丢的厉害也不准,很难搞的,怎么做?agent是pull还是push,起独立端口?这个端口要是例外?感觉太复杂了。
2.aws上的SSH链接返回的时候是走1024-65535之间的随机端口,所以你的公有子网的出口ACL的出站配置需要开放所有端口。
这个是确定性的,aws同学在aws文档中有找到,但我估计应该是内部文档,因为我要文档链接没给。
3.安全组的出站规则限制的是机器的主动出站;而ACL是管理所有的进出,对于出既包含限制主动出站又包含限制被动出站。