路由循环:TTL 在传输过程中过期

路由循环:TTL 在传输过程中过期

我尝试从主机 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。

如何处理它们取决于您的家庭设置。帖子中没有足够的信息来回答这个问题。

相关内容