首页 > 解决方案 > 为什么 traceroute 使用 VPC 忽略 AWS EC2 中的路由表

问题描述

这是我在带有 VPC 的 AWS EC2 中的路由表

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指定的?为什么它不扔10.10.32.1

标签: amazon-web-servicesamazon-ec2amazon-vpc

解决方案


首先我们可以看到两件事——VPC 流量路由和 traceroute 是如何工作的

  • VPC 流量路由

    当您创建子网时,子网的五个 IP 被保留用于内部目的,其中第二个 ip xxx1(对于您的子网是 10.10.32.1)用于 vpc 网关(虚拟),从路由表中您可以看到默认情况下,所有流量都流向它,并从网关根据子网的路由表规则将其路由到下一个目标。下一个目标可能是另一个网关(用于公共子网),或者如果目标不在本地网络内,它可能是 NAT(私有子网)。对于外部互联网流量,数据包从 vpc 互联网网关路由到其中一个 aws 互联网路由器,对于您的情况,其 IP 为 52.56.0.2。

  • 跟踪路由工作

    简单地说,traceroute 在 ICMP 协议上工作,它最初发送 TTL 为 1 的数据包,当它从任何路由器收到 ICMP 超时错误时,它会记录路由器 IP 并发送另一个最后一个 TTL + 1 的数据包,直到它到达目标。

现在谈到为什么 10.10.32.1 IP 没有记录在 traceroute 中的问题是因为那些中间 VPC 网关没有递减 TTL 值,只是为了将数据包转发到下一跳,当数据包到达互联网路由器时,正常的递减过程开始正在发生并且 ICMP 错误消息正在被发回并记录。


推荐阅读