[英]Why traceroute ignores route table in AWS EC2 with VPC
這是我在帶有 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
我預計到互聯網的流量將 go 拋出 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
哪里指定? 為什么 go 不拋出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 錯誤消息正在被發回並記錄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.