LAN 之间的路由

LAN 之间的路由

我有以下拓扑:

+--------------------------------------------------+
|                Segment 192.168/24                |
|                                                  |
|       Machine A               Network Router R   |
|  +-----------------+        +-----------------+  |
|  |  192.168.0.110  |        |  192.168.0.1    |  |
|  |                 |        |                 |  |
|  +-----------------+        +-----------------+  |
|           +-------------------------+            |
|           |        Machine B        |            |
|           |   +-----------------+   |            |
|           |   |  192.168.0.112  |   |            |
|           |   |  172.20.1.1     |   |            |
|           |   +-----------------+   |            |
+--------------------------------------------------+
            |        Machine C        |
            |   +-----------------+   |
            |   |                 |   |
            |   |  172.20.1.100   |   |
            |   +-----------------+   |
            |                         |
            |    Segment 172.20/16    |
            +-------------------------+

网段 192.168/24 是物理 LAN,网段 172.20/16 是 VPN。我想使用机器 B 作为两个网段之间的路由器。B 是一台启用了 IP 转发和 NAT 的 Linux 机器。

当我在机器 A 中创建到 172.20/16 网络的路由(通过 192.168.0.112)时,我可以正确到达机器 C。

但是,当我在 192.168/24 网段的默认网关(网络路由器 R)中创建一条通过 192.168.0.112 到 172.20/16 的路由时,对于尝试到达机器 C,以下情况属实:

  • 从路由器本身(192.168.0.1)发出的 Ping 能够正确收到答复;
  • 从 A 发出的 Ping 先到达 R,然后到达 B,但不是转发给C;
  • 没有生成 ICMP 重定向。

我已经在每个节点上捕获了数据包,并且:

  1. 当上述路由在A时,到达B的帧的以太网目的地址被设置为B的MAC(即A直接发送给B);
  2. 当上述路由在 R 中时,到达 B 的帧的以太网目标地址被设置为 R 的 MAC(即 A 发送给 R,R“发送”给 B,但是eth.dst是从 A 到 R 的原始 MAC)。

这是设置之间的唯一区别。显然,B 正在丢弃具有错误 MAC 地址的帧。

有趣的是,我完全相同的设置在另一个基础设施(主要是不同的硬件)中工作。

我该怎么做才能修复这个设置?

答案1

您应该收到 ICMP 重定向消息,而不是您期望的 ICMP 回显答复。

主机 192.168.0.110 向其默认网关 192.168.0.1 发送 ICMP 回显请求,然后该网关应将数据包重定向到 192.168.0.112 以到达子网 172.20.0.0/16。在这种情况下,网关将使用 ICMP 重定向进行响应(因为将 ping 消息直接发送到 192.168.0.112 更短)。

以下是相关内容serverfault 帖子

为了在 Linux 机器上修复这个问题,我在发送机器 192.168.0.110 上添加了一条静态路由,如下所示:

$ sudo route add -net 172.20.0.0/16 gw 192.168.0.112

添加此静态路由后,此机器在尝试到达 172.20.0.0/16 子网时将不会联系默认网关。

相关内容