amazon-web-services - 为什么 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
解决方案
首先我们可以看到两件事——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 错误消息正在被发回并记录。
推荐阅读
- amazon - API - PII 个人身份信息访问问题 sell-partner-api
- javascript - 如何将 iframe src 更改为变量
- vue.js - 即使与方法处于同一级别,创建和挂载的 Vuejs 也无法正常工作
- kotlin - 调用接口函数不会调用 onSuccess lambda for suspendCoroutine with Mock
- python - 使用 python 和 REST API 查询 Tableau Server 以导出视图
- sql-server - MSSQL 创建动态列
- java - 如何在 Spring Boot 的 main 方法中创建存储库实例?
- javascript - 重新格式化数据以以特定方式显示
- r - 图例中的空白,同时(使用中断参数)在 R 中使用 plot() 绘制 rasterLayer
- javascript - 如何通过忽略每次按键上的无效字符来使文本类型的输入元素只接受一个数值(十进制、正数和负数)?