Mac OSX 在路由时如何对网络接口进行优先排序?

Mac OSX 在路由时如何对网络接口进行优先排序?

举一个具体的例子,OSX 如何选择从这些默认条目中netstat -nr路由到哪一个?

Destination        Gateway            Flags        Refs      Use   Netif Expire
0/1                10.10.99.100       UGSc            0        0    ppp0
default            192.168.1.1        UGSc            5        0     en0
default            192.168.1.1        UGScI           1        0     en1
default            192.0.2.1          UGScI         157        2    ppp0 

据我所知,OSX 使用接口上的指标,而不是路由表条目上的指标。但默认情况下,所有这些接口指标都是 0,那么它如何选择?最后创建的接口?

我看到一些人建议按照网络偏好设置中的顺序来排序,但就我而言,ppp0 接口(来自 SonicWall NetExtender)并未列出。

这里面有一些讨论线,但我没有看到答案。

答案1

大多数系统在选择使用哪条路线时都遵循以下规则:

  • 寻找最具体的那些(即具有最长匹配前缀的那些)。
  • 选择最高的优先事项

在 Linux 上(我认为在 Windows 上也是如此),优先级由以下因素决定:度量,但正如你正确指出的那样,在 macOS 上情况并非如此。macOS 不会为各个路由分配指标,而是分配接口优先级。您可以使用networksetup -listnetworkserviceorder查看此订单并networksetup -ordernetworkservices进行更改。

现在,从您的输出来看,这条路线让我认为在您的情况下,特异性也发挥了它的作用:

Destination        Gateway            Flags        Refs      Use   Netif Expire
0/1                10.10.99.100       UGSc            0        0    ppp0

该路线覆盖了地址空间的下半部分,因此我希望还能找到:

128.0/1            10.10.99.100       UGSc            0        0    ppp0

在您的路由表中。这是 VPN 软件用来确定其路由优先级的标准技巧default:它添加两条路由,它们一起覆盖所有 IP 地址,但每条路由都比默认路由更具体,因此它们获胜。

答案2

任何具有多个具有相同度量的默认路由的路由表都会进行负载平衡。但对于 Mac 来说,它会选择接口列表中的第一个接口。如果您想查看和更改列表,请转到“打开网络首选项”,在这里您将看到以太网、机场、通过移动设备或 3g 的 ppp 等网络接口列表。在列表下方,您将看到一个带有向下箭头的星号形选项。单击它并设置“设置服务顺序”。在这里您可以更改特定接口的首选项。

http://www.sustworks.com/site/prod_ipnrx_help/html/AlternateRouteHelp.html

相关内容