问题是关于 VPC 子网内的路由。我知道,VPC 内部处理其内部子网之间的任何路由。但是,MTR 数据包 (ICMP) 如何在没有任何路由器的情况下到达另一个子网?
$ mtr -rwn -c 2 10.1.2.145
Start: 2020-03-06T06:19:10+0000
HOST: ip-10-1-1-172.ec2.internal Loss% Snt Last Avg Best Wrst StDev
1.|-- 10.1.2.145 0.0% 2 1.6 4.1 1.6 6.6 3.6
实例1路由表:
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.1.1.1 0.0.0.0 UG 0 0 0 eth0
10.1.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.169.254 0.0.0.0 255.255.255.255 UH 0 0 0 eth0
实例2路由表:
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.1.2.1 0.0.0.0 UG 0 0 0 eth0
10.1.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.169.254 0.0.0.0 255.255.255.255 UH 0 0 0 eth0
答案1
ICMP 的工作方式与 TCP/UDP 类似,它由“虚拟路由器”(AWS Hyperplane)在您的 VPC 内部路由。AWS 路由表有一个默认路由,所有子网都可以相互通信。如果您想更改它,请更改与子网关联的路由表。
答案2
可能,我已经得到了自己的问题的答案。AWS 使用 VPC 封装在实例之间路由流量。VPC 封装包含有关目标 VPC 和 ENI id 的信息。在 AWS 中,一个物理主机可能托管来自不同客户和不同 VPC 的多个实例,因此单个主机可能包含具有相同 CIDR 的不同 VPC(来自不同客户)的实例。为了避免这种歧义,AWS 通过添加此封装来标记其环境特定信息。映射服务也做出了贡献。它包含有关 VPC 中的哪个 ENI 位于哪个物理主机上的信息。因此,实例之间数据包的路由与传统的基于 IP 的路由管理不同,并且物理网络的底层 IP 层对虚拟实例不可见,这并不奇怪。
参考: