Как определить статический маршрут в MacOS X, который сохраняется после перезагрузки? Единственное предложение, которое я нашел в Google, состоит в том, чтобы настроить запуск службы запуска при загрузке, что кажется ужасным взломом (например, выдержит ли он перезагрузку сети без перезагрузки?)
Чтобы настроить маршрут, который мне нужен временно, я могу запустить следующее:
route add -net ${network} ${gateway} ${netmask}
Как мне сделать так, чтобы это продолжалось?
Три подхода в порядке возрастания доброты:
За исключением того, что демон запуска (как и элемент запуска до него) страдает в этом отношении двумя важными проблемами:
Если конфигурация системы повторит конфигурацию сети, ваш маршрут будет уничтожен. Вы можете бороться с этим, заставляя launchd периодически запускать ваш Launch Daemon, но вам все равно, возможно, придется ждать в течение этого времени для восстановления вашего маршрута.
И демоны запуска, и элементы запуска могут работать до того, как некоторые сетевые интерфейсы будут полностью настроены. В этом случае вы не сможете проложить маршрут в это время и, возможно, придется вернуться к ожиданию периодического вызова вашего Launch Daemon (или, в случае элемента запуска, возможно, для задания cron).
Я только что разместил на своем сайте то, что, надеюсь, будет лучшим (то есть более надежным) решением. Я построил установочный пакет (скачать) для этого; есть также некоторый исходный код, но я не могу опубликовать ссылку на Server Fault, поскольку у меня еще нет достаточно высокой репутации, чтобы размещать более одной гиперссылки на сообщение.
Чтобы использовать его, установите пакет (пока тестировался только на моем ноутбуке, но, похоже, работает). Он должен установить Launch Daemon, который запускает серверный процесс "staticrouted" (вы можете проверить это вверху; если он не запущен, это, вероятно, означает, что я ошибся в установщике, но вы сможете запустить его с помощью launchctl как обычный).
Для создания статических маршрутов вы используете программу staticroute (которую вы найдете в / usr / local / sbin). например
staticroute add 10.128.4.0/24 "Main Network Interface"
staticroute delete 10.192.0.0/16 "Other Interface"
Вы также можете увидеть список настроенных статических маршрутов с помощью
staticroute list
и список имен интерфейсов с
staticroute list-interfaces
Настроенные статические маршруты выдерживают перезапуск и будут автоматически добавляться и удаляться по мере увеличения или уменьшения сетевых интерфейсов.
Также есть справочные страницы; они установлены в / usr / local / share / man / man8, поэтому вы также можете добавить / usr / local / share / man в свой MANPATH, если его там еще нет.
Я должен подчеркнуть, что сегодня я написал этот код, чтобы исправить проблему, вызванную тем, что мне пришлось использовать задание cron для сохранения статических маршрутов. Кажется, это работает для меня, но YMMV. Код и двоичные файлы лицензированы MIT.
Я должен не согласиться с порядком совершенства - если OP использует launchd (либо с созданным вручную списком, либо с lingon), они могут запустить его при загрузке. Если они используют решение на основе AppleScript, такое как RouteSplit, они не смогут запустить его без входа пользователя в систему.
Чарльз, мне любопытно, почему использование санкционированного производителем ОС инструмента, такого как launchd, кажется вам хакерским?