Mac OSX 如何在路由时优先考虑网络接口?

stu*_*eek 22 networking ifconfig netstat macos

举一个具体的例子,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 
Run Code Online (Sandbox Code Playgroud)

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

我已经看到有些人建议它在网络首选项中的顺序,但在我的情况下,ppp0 接口(来自 SonicWall NetExtender)没有在那里列出。

这个帖子中有一些讨论,但我没有看到答案。

Sam*_*gay 16

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

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

  • 是否有任何来源可以证实这一点?如果您可以引用一个网站,该网站将使您的回答更有价值,并且人们会对其进行投票。 (3认同)

kir*_*gin 13

大多数系统在选择要使用的路由时遵循以下规则:

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

在 Linux(以及我认为在 Windows 上)上,优先级由metric决定,但正如您正确指出的那样,在 macOS 上并非如此。macOS 不是为单个路由分配指标,而是为接口分配优先级。您可以使用networksetup -listnetworkserviceorder查看此顺序并networksetup -ordernetworkservices更改它。

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

Destination        Gateway            Flags        Refs      Use   Netif Expire
0/1                10.10.99.100       UGSc            0        0    ppp0
Run Code Online (Sandbox Code Playgroud)

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

128.0/1            10.10.99.100       UGSc            0        0    ppp0
Run Code Online (Sandbox Code Playgroud)

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