举一个具体的例子,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