У меня вопрос: как я могу надежно настроить статический маршрут в OS X, чтобы 2 конечные точки проходили через шлюз, где все машины находятся в одной подсети? Я предоставляю контекст ниже:

В целях тестирования мне нужно иметь возможность настроить конкретный маршрут между двумя конечными точками в одной локальной подсети - MacBook OS X (10.9) и «приемник» на основе Linux.

Поведение должно быть таким, чтобы следующим прыжком для трафика, покидающего MacBook, был компьютер QoS на основе FreeBSD, а не стандартный шлюз по умолчанию. Машина BSD также может находиться в той же подсети и выполняет SNAT для маскировки нового трафика и повторного преобразования по возвращении.

Упрощенно, моя среда похожа на следующее:

Локальная подсеть = 10.160.0.0/16
MacBook = 10.160.2.100
Linux Receiver = 10.160.2.200
Шлюз по умолчанию для стандартных устройств = 10.160.0.1


Пример конфигурации шлюза BSD:

en0 10.160.2.160
en1 10.160.3.170
маска сети 255.255.0.0
шлюз 10.160.0.1


Пример желаемого потока:

ЗАПРОС: MacBook -> BSD -> DefaultGateway -> Приемник
ОТВЕТ: Приемник -> DefaultGateway -> BSD -> MacBook


Я вижу 3 проблемы:

  1. Если я устанавливаю шлюз по умолчанию для en0 (единственный активный интерфейс) в OS X, чтобы он был машиной BSD, скажем, 10.160.2.160, это работает некоторое время, пока этот маршрут по умолчанию автоматически не перезаписывается OS X, чтобы быть стандартным значением по умолчанию 10.160 .0.1

  2. Я также сталкиваюсь с проблемами при настройке статических маршрутов в OS X с помощью:

    route add 10.160.2.200 10.160.2.160
    

    .. в этом случае происходит одно из двух: либо маршрут работает некоторое время, отображая флаги UGHS netstat, а затем перезаписывается OS X, после чего netstat включает флаг M, чтобы указать, что он был перезаписан перенаправлением.

  3. ..или маршрут вообще не работает, так как должен быть какой-то другой маршрут, имеющий приоритет. Traceroute подтверждает это.


Выход Netstat после начальной настройки:

jiosxserver:~ julianivory$ netstat -nr
Routing tables

Internet:
Destination        Gateway            Flags        Refs      Use   Netif Expire
default            10.160.2.160       UGSc           17        0     en0
10.140.1.31        10.160.2.160       UGHS            0        0     en0
10.140.1.35        10.160.1.1         UGHS            0        0     en0
10.160/16          link#4             UCS             5        0     en0
10.160.0.1         0:14:22:20:1c:d9   UHLWIir        14        0     en0   1191
10.160.1.37        0:50:56:8a:87:e9   UHLWIi          0        0     en0   1138
10.160.2.160       8e:af:b2:47:7f:91  UHLWIir         4        0     en0   1144
10.160.3.75        127.0.0.1          UHS             0        0     lo0
10.160.3.79        a8:20:66:27:72:2e  UHLWIi          0        1     en0   1184
10.160.255.255     ff:ff:ff:ff:ff:ff  UHLWbI          0       44     en0
127                127.0.0.1          UCS             0        0     lo0
127.0.0.1          127.0.0.1          UH              9    20602     lo0
169.254            link#4             UCS             0        0     en0

... и вывод Traceroute показывает, что маршрут по умолчанию не используется:

traceroute to 8.8.8.8 (8.8.8.8), 64 hops max, 52 byte packets
 1  10.160.0.1 (10.160.0.1)  0.504 ms  0.237 ms  0.217 ms
 2  192.168.2.1 (192.168.2.1)  1.065 ms  1.020 ms  0.973 ms
 3  name-removed (xx.1xx.xxx.1)  14.250 ms  13.688 ms  14.046 ms
 4  xxx.xxx.178.141 (xxx.xxx.178.141)  14.196 ms  14.121 ms  13.967 ms


... через некоторое время шлюз по умолчанию будет автоматически изменен на 10.160.0.1 ...

Любые мысли или предложения будут высоко оценены.

2 ответа2

1

Эта ссылка содержит ответ для статических маршрутов macOS, которые сохраняются при перезагрузке, с одним дополнительным фрагментом информации для ситуации в этом вопросе, полученной из информации об использовании команды networksetup.

Из настройки сети (командная строка - используйте Терминал):

Usage: networksetup -setadditionalroutes <networkservice> [ <dest> <mask> 
<gateway> ]*
   Set additional IPv4 routes associated with <networkservice>
   by specifying one or more [ <dest> <mask> <gateway> ] tuples.
   Remove additional routes by specifying no arguments.
   If <gateway> is "", the route is direct to the interface

так что если вы используете несколько сетей, которые доступны на одном уровне 2 (и да, вы можете сделать это без маршрутизаторов!) синтаксис

networksetup -setadditionalroutes Ethernet Ethernet dest mask ""

Обратите внимание, что вы должны определить, к какому сетевому сервису применяются маршруты (проводной, Wi-Fi и т.д.). И, конечно же, соглашения об именах НЕ СООТВЕТСТВУЮТ выводу из ifconfig!

networksetup -listallnetworkservices

вам может потребоваться заключить в кавычки значение, если у вас более одного типа интерфейса (скажем, несколько проводных интерфейсов). Также обратите внимание, что networksetup требует, чтобы вы определили все маршруты в одной команде !!! Итак, если у вас есть несколько статических маршрутов, которые вы используете:

networksetup -setadditionalroutes <networkservice> dest1 mask1 "" dest2 mask2 ""

и так далее.

0

Для тех, кто может извлечь из этого пользу - моя основная проблема заключалась в том, что другие устройства отправляли перенаправления ICMP. После отключения этого на моем локальном (OS X) компьютере мои статические маршруты были надежными.

В OS X это может быть достигнуто на лету с помощью sysctl:

/usr/sbin/sysctl -w net.inet.icmp.drop_redirect=1
/usr/sbin/sysctl -w net.inet.ip.redirect=0

Это также может быть установлено постоянно в /etc/sysctl.conf

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