我尝试从主机 PC (Windows 7) ping 到 Ubuntu 13.04 (VirtualBox)。但是,我收到错误:
Pinging 10.0.2.15 with 32 bytes of data:
Reply from 78.87.2.210: TTL expired in transit.
Reply from 78.87.2.210: TTL expired in transit.
Reply from 78.87.2.210: TTL expired in transit.
Reply from 78.87.2.210: TTL expired in transit.
Ping statistics for 10.0.2.15:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
tracert 10.0.2.15显示存在路由环路。
Tracing route to 10.0.2.15 over a maximum of 30 hops
1 1 ms <1 ms <1 ms 192.168.1.1
2 42 ms 43 ms 42 ms b5.met.cyta.gr [46.103.127.5]
3 * 41 ms * 178-103-193.brsl3.cyta.gr [178.59.10
4 45 ms 42 ms 46 ms 78-2-210.itr.cyta.gr [78.87.2.210]
5 * * * Request timed out.
6 46 ms 47 ms 44 ms 78-2-210.itr.cyta.gr [78.87.2.210]
7 * 42 ms 42 ms e2-med-t7-4.itr.cyta.gr [78.87.2.199
8 43 ms 44 ms 43 ms 78-2-210.itr.cyta.gr [78.87.2.210]
9 * 43 ms 42 ms e2-med-t7-4.itr.cyta.gr [78.87.2.199
10 46 ms 42 ms 44 ms 78-2-210.itr.cyta.gr [78.87.2.210]
11 * * * Request timed out.
12 42 ms 43 ms 43 ms 78-2-210.itr.cyta.gr [78.87.2.210]
13 * * * Request timed out.
14 45 ms 44 ms 42 ms 78-2-210.itr.cyta.gr [78.87.2.210]
15 * * 43 ms e2-med-t7-4.itr.cyta.gr [78.87.2.199
16 46 ms 47 ms 47 ms 78-2-210.itr.cyta.gr [78.87.2.210]
17 * * * Request timed out.
18 46 ms 45 ms 45 ms 78-2-210.itr.cyta.gr [78.87.2.210]
19 * * * Request timed out.
20 44 ms 43 ms 43 ms 78-2-210.itr.cyta.gr [78.87.2.210]
21 * * 43 ms e2-med-t7-4.itr.cyta.gr [78.87.2.199
22 44 ms 44 ms 46 ms 78-2-210.itr.cyta.gr [78.87.2.210]
23 42 ms * 43 ms e2-med-t7-4.itr.cyta.gr [78.87.2.199
24 45 ms 43 ms 43 ms 78-2-210.itr.cyta.gr [78.87.2.210]
25 43 ms * 45 ms e2-med-t7-4.itr.cyta.gr [78.87.2.199
26 54 ms 47 ms 44 ms 78-2-210.itr.cyta.gr [78.87.2.210]
27 43 ms * * e2-med-t7-4.itr.cyta.gr [78.87.2.199
28 43 ms 42 ms 46 ms 78-2-210.itr.cyta.gr [78.87.2.210]
29 * * 42 ms e2-med-t7-4.itr.cyta.gr [78.87.2.199
30 43 ms 43 ms 44 ms 78-2-210.itr.cyta.gr [78.87.2.210]
有什么办法可以解决这个问题吗?
VirtualBox 网络设置:
主机专用适配器
混杂模式:拒绝
电缆已连接
答案1
TL:DR;
您错误配置了路由,导致私有 IP 地址泄露到互联网。请修复您的路由。这可能有帮助。
较长的版本:
IP 号码是唯一的。我们只有 2 32 个IP,这些 IP 经过精心分配,以便我们知道如何将 IP 数据包从一个位置路由到另一个位置。如果您连接到互联网,您必须使用这些正式分配的 IP 或 IP 范围之一。
如果您拥有的计算机数量多于 IP 地址,那么这种方法并不总是可行的(并且作为家庭用户,您通常只能获得一个 IP)。我们使用 RFC 1918 来解决这个问题。RFC 1918描述了一些不应在互联网上公开使用的 IP 范围。这意味着:
- 你可以在家里自由使用它们,而且
- 你绝不应该把这些泄露到互联网上。而且
- 如果您想从具有 RFC1918 IP 的主机进行通信,那么您必须使用一些特殊技巧(例如隧道、VPN 或 NATting)。
就您而言,您直接从 10.0.2.15 向互联网发送数据包。您可以看到数据包从 10.0.2.15 开始,然后路由到 192.168.1.1(可能是您的默认网关),然后从那里路由到 5.met.cyta.gr。5.met.cyta.gr 永远看不到您的数据包。它应该被丢弃在您的家庭网络边缘。
然而由于配置错误,5.met.cyta.gr 确实收到了数据包。出于某种原因,它将其发送到 e2-med-t7-4.itr.cyta.gr。这可能是因为他们从未预料到会看到这种错误的数据包,而且这是 e2-med-t7-4.itr.cyta.gr 的默认网关,或者是因为 cyta.gr 也在内部使用 10.0.0.0/8 范围。e2-med-t7-4.itr.cyta.gr 也不知道如何处理它,并将其发送到 5.met.cyta.gr,循环再次开始。
如果不仔细考虑,这将导致这两台机器之间的网络阻塞,因为它们会不断向对方转发数据包。最终这两台机器将变得非常繁忙,无法做其他任何事情。
为了防止此类问题,IP 数据报有一个字段,称为 TTL(生存时间)。每次数据包/数据报通过路由器时,此字段都会减一。如果它达到零,它将被丢弃,并向原始发送者发送警告。这会导致您的计算机上显示 TTL 传输已过期消息。
解决方法是正确配置你自己的边界路由器(可能为 192.168.1.1)。它应该不是将任何 RFC1918 IP(192.168.0.0/16、10.0.0.0/8 或 172.16.0.0/16)的数据包转发到 Internet。
如何处理它们取决于您的家庭设置。帖子中没有足够的信息来回答这个问题。