尝试将其他路由添加到同一网络时,路由已在表中

尝试将其他路由添加到同一网络时,路由已在表中

我有下表

$ netstat -r -4 | grep 33.0
192.168.33.0/24    192.168.29.4       UGS      ovpns5

我想添加额外的路由到同一网络并得到

$ route add -net 192.168.33.0/24 192.168.27.2
add net 192.168.33.0: gateway 192.168.27.2 fib 0: route already in table

为什么?不是可以有两条路由到同一个网络吗?

我能做到route change并且有效。

答案1

当内核为出站数据包寻找路由时,它希望找到一个答案:如果有多个匹配项,它不知道该选择哪一个。

这个线程邮件列表上freebsd-questions涵盖了相同的问题,并建议通过“拆分”其中一条路由以创建两条更具体的路由来解决问题:

添加备份默认路由的技巧是将“默认”拆分为 2 个不同且更具体的子网:

# route add 0.0.0.0 PRIMARY_GW -netmask 127.0.0.0
# route add 127.0.0.0 PRIMARY_GW -netmask 127.0.0.0
# route add default SECONDARY_GW

现在,默认被分成 2 个不同的比“默认”更小的子网,它们将成为首选路由。如果连接 PRIMARY_GW 的接口出现故障,前 2 条路由将被删除,保留备用“默认”网关生效。

在您的情况下,如果您希望在可用时使用现有路由(通过 192.168.29.4),您可能需要如下所示:

route add -net 192.168.33.0/25 192.168.29.4
route add -net 192.168.33.128/25 192.168.29.4
route add -net 192.168.33.0/24 192.168.27.2

由于内核始终首选最具体的路由,因此只要接口ovpns5可用,就会使用 192.168.29.4 作为网关。如果该接口出现故障,路由将被删除,内核将开始使用网关192.168.27.2


如果您希望在两个连接之间实现负载平衡,那么您正在寻找等价多路径路由 (ecmp),而我不清楚 FreeBSD 对此的支持情况。

相关内容