17

Чтобы привести конкретный пример, как 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) там не указан.

В этой теме есть некоторые обсуждения, но я не вижу ответа.

2 ответа2

14

Любая таблица маршрутизации, которая имеет несколько маршрутов по умолчанию с одинаковыми метриками, выполняет балансировку нагрузки. В случае с Mac, тем не менее, он выберет первый интерфейс, который находится в списке интерфейсов. Если вы хотите просмотреть и изменить список, перейдите в "Открыть настройки сети", здесь вы увидите список сетевых интерфейсов, таких как Ethernet, Аэропорт, PPP через мобильный или 3G и т.д. Ниже списка вы увидите звездочку в форме вариант со стрелкой вниз. Нажмите на это и установите "установить сервисный заказ". Здесь вы можете изменить настройки вашего конкретного интерфейса.

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

4

Большинство систем следует этим правилам при выборе того, какой маршрут использовать:

  • Найдите наиболее конкретные из них (т.е. те, которые имеют самый длинный совпадающий префикс).
  • Выберите тот, который имеет самый высокий приоритет.

В 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-адреса, но каждый из них более конкретен, чем по умолчанию, поэтому они выигрывают.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .