我有下表
$ 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 对此的支持情况。