問題は、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
Instance1ルートテーブル:
$ 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
Instance2ルートテーブル:
$ 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
ICMPはTCP/UDPと同じように機能し、「仮想ルーター」(AWSハイパープレーン)によってVPC内にルーティングされます。AWSルートテーブルには、すべてのサブネットが相互に通信できるデフォルトのルートがあります。それを変更したい場合は、サブネットに関連付けられたルートテーブルを変更します。
おそらく、私自身の質問の答えを得ました。 AWSは、VPCカプセル化を使用して、インスタンス間でトラフィックをルーティングします。 VPCカプセル化には、宛先VPCとENIIDに関する情報が含まれています。 AWSでは、物理ホストが異なる顧客および異なるVPCからの複数のインスタンスをホストする可能性があるため、単一のホストに同じCIDRを持つ異なるVPC(異なる顧客からの)のインスタンスが含まれる可能性があります。この種のあいまいさを回避するために、AWSはこのカプセル化を追加することで環境固有の情報をスタンプします。マッピングサービスの貢献もあります。これには、VPC内のどのENIがどの物理ホストに存在するかに関する情報が含まれています。そのため、インスタンス間のパケットのルーティングは、従来のIPベースのルーティングとは異なる方法で管理され、当然のことながら、物理ネットワークの基盤となるIP層は仮想インスタンスからは見えません。
参照: