为什么 traceroute 忽略带有 VPC 的 AWS EC2 中的路由 table
Why traceroute ignores route table in AWS EC2 with VPC
这是我在 AWS EC2 中使用 VPC 的路线 table
ubuntu@ip-10-10-47-44:~$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.10.32.1 0.0.0.0 UG 100 0 0 eth0
10.10.32.0 0.0.0.0 255.255.240.0 U 0 0 0 eth0
10.10.32.1 0.0.0.0 255.255.255.255 UH 100 0 0 eth0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
我预计互联网流量会抛出 10.10.32.1
ubuntu@ip-10-10-47-44:~$ traceroute 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
1 ec2-52-56-0-2.eu-west-2.compute.amazonaws.com (52.56.0.2) 20.219 ms ec2-52-56-0-0.eu-west-2.compute.amazonaws.com (52.56.0.0) 14.119 ms 14.127 ms
2 100.66.0.170 (100.66.0.170) 12.679 ms 100.66.0.130 (100.66.0.130) 18.149 ms 100.66.0.164 (100.66.0.164) 19.795 ms
3 100.66.0.49 (100.66.0.49) 16.561 ms 100.66.0.15 (100.66.0.15) 17.874 ms 100.66.0.29 (100.66.0.29) 17.863 ms
4 100.65.1.97 (100.65.1.97) 0.556 ms 100.65.1.193 (100.65.1.193) 0.273 ms 100.65.1.97 (100.65.1.97) 0.278 ms
5 52.94.33.3 (52.94.33.3) 0.956 ms 52.94.33.7 (52.94.33.7) 0.970 ms 1.037 ms
6 52.94.33.126 (52.94.33.126) 2.002 ms 52.94.33.116 (52.94.33.116) 2.753 ms 2.549 ms
7 52.95.61.97 (52.95.61.97) 1.461 ms 52.94.34.17 (52.94.34.17) 0.936 ms 54.239.101.109 (54.239.101.109) 1.355 ms
8 52.95.219.217 (52.95.219.217) 1.604 ms 52.95.219.127 (52.95.219.127) 0.833 ms 72.21.221.227 (72.21.221.227) 1.900 ms
9 74.125.242.65 (74.125.242.65) 1.305 ms 1.841 ms 74.125.242.97 (74.125.242.97) 3.129 ms
10 172.253.50.223 (172.253.50.223) 1.235 ms 172.253.68.23 (172.253.68.23) 1.280 ms 172.253.50.223 (172.253.50.223) 1.731 ms
11 dns.google (8.8.8.8) 0.732 ms 1.242 ms 1.056 ms
而是抛出 52.56.0.2
52.56.0.2
指定在哪里?为什么它不去 throw 10.10.32.1
首先我们可以看到两件事 - VPC 流量路由和 traceroute 的工作原理
VPC流量路由
当您创建一个子网时,该子网的五个 IP 被保留用于内部用途,其中第二个 IP x.x.x.1(您的子网为 10.10.32.1)用于 vpc网关(虚拟)和路由 table 您可以看到默认情况下所有流量都流向它,并且根据子网的路由 table 规则,它从网关路由到下一个目标。下一个目标可能是另一个网关(对于 public 子网),或者如果目标不在本地网络内,则它可能是 NAT(私有子网)。对于外部互联网流量,数据包从 vpc 互联网网关路由到 aws 互联网路由器之一,对于您的情况,它的 IP 是 52.56.0.2.
Traceroute 工作
简单地说,traceroute 在 ICMP 协议上工作,它最初发送 TTL 为 1 的数据包,当它从任何路由器收到 ICMP 超时错误时,它记录路由器 IP 并发送另一个具有最后一个 TTL + 1 的数据包,直到它达到目标。
现在问题是为什么 10.10.32.1 IP 没有记录在 traceroute 中是因为那些中间 VPC 网关没有递减 TTL 值,只是为了在数据包到达互联网路由器时将数据包转发到下一跳然后正常的递减过程开始发生,ICMP 错误消息被发回并记录。
这是我在 AWS EC2 中使用 VPC 的路线 table
ubuntu@ip-10-10-47-44:~$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.10.32.1 0.0.0.0 UG 100 0 0 eth0
10.10.32.0 0.0.0.0 255.255.240.0 U 0 0 0 eth0
10.10.32.1 0.0.0.0 255.255.255.255 UH 100 0 0 eth0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
我预计互联网流量会抛出 10.10.32.1
ubuntu@ip-10-10-47-44:~$ traceroute 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
1 ec2-52-56-0-2.eu-west-2.compute.amazonaws.com (52.56.0.2) 20.219 ms ec2-52-56-0-0.eu-west-2.compute.amazonaws.com (52.56.0.0) 14.119 ms 14.127 ms
2 100.66.0.170 (100.66.0.170) 12.679 ms 100.66.0.130 (100.66.0.130) 18.149 ms 100.66.0.164 (100.66.0.164) 19.795 ms
3 100.66.0.49 (100.66.0.49) 16.561 ms 100.66.0.15 (100.66.0.15) 17.874 ms 100.66.0.29 (100.66.0.29) 17.863 ms
4 100.65.1.97 (100.65.1.97) 0.556 ms 100.65.1.193 (100.65.1.193) 0.273 ms 100.65.1.97 (100.65.1.97) 0.278 ms
5 52.94.33.3 (52.94.33.3) 0.956 ms 52.94.33.7 (52.94.33.7) 0.970 ms 1.037 ms
6 52.94.33.126 (52.94.33.126) 2.002 ms 52.94.33.116 (52.94.33.116) 2.753 ms 2.549 ms
7 52.95.61.97 (52.95.61.97) 1.461 ms 52.94.34.17 (52.94.34.17) 0.936 ms 54.239.101.109 (54.239.101.109) 1.355 ms
8 52.95.219.217 (52.95.219.217) 1.604 ms 52.95.219.127 (52.95.219.127) 0.833 ms 72.21.221.227 (72.21.221.227) 1.900 ms
9 74.125.242.65 (74.125.242.65) 1.305 ms 1.841 ms 74.125.242.97 (74.125.242.97) 3.129 ms
10 172.253.50.223 (172.253.50.223) 1.235 ms 172.253.68.23 (172.253.68.23) 1.280 ms 172.253.50.223 (172.253.50.223) 1.731 ms
11 dns.google (8.8.8.8) 0.732 ms 1.242 ms 1.056 ms
而是抛出 52.56.0.2
52.56.0.2
指定在哪里?为什么它不去 throw 10.10.32.1
首先我们可以看到两件事 - VPC 流量路由和 traceroute 的工作原理
VPC流量路由
当您创建一个子网时,该子网的五个 IP 被保留用于内部用途,其中第二个 IP x.x.x.1(您的子网为 10.10.32.1)用于 vpc网关(虚拟)和路由 table 您可以看到默认情况下所有流量都流向它,并且根据子网的路由 table 规则,它从网关路由到下一个目标。下一个目标可能是另一个网关(对于 public 子网),或者如果目标不在本地网络内,则它可能是 NAT(私有子网)。对于外部互联网流量,数据包从 vpc 互联网网关路由到 aws 互联网路由器之一,对于您的情况,它的 IP 是 52.56.0.2.
Traceroute 工作
简单地说,traceroute 在 ICMP 协议上工作,它最初发送 TTL 为 1 的数据包,当它从任何路由器收到 ICMP 超时错误时,它记录路由器 IP 并发送另一个具有最后一个 TTL + 1 的数据包,直到它达到目标。
现在问题是为什么 10.10.32.1 IP 没有记录在 traceroute 中是因为那些中间 VPC 网关没有递减 TTL 值,只是为了在数据包到达互联网路由器时将数据包转发到下一跳然后正常的递减过程开始发生,ICMP 错误消息被发回并记录。