Як пов’язати маршрут з інтерфейсом? [дублікат]


0

На це питання вже є відповідь тут:

У мене Mac з двома мережевими інтерфейсами, підключеними до різних мереж. На думку аргументів, скажімо, один підключений до приватної мережі, а інший до Інтернету.

Я розумію, що я можу скористатися панеллю налаштувань мережі Networks, щоб розмістити Інтернет-інтерфейс вище в "порядку замовлення", ніж приватна мережа, і, зробивши це, його "Маршрутизатор" стане шлюзом системи за замовчуванням (а іншого інтерфейсу " Маршрутизатор "ігнорується).

Однак це, очевидно, призводить до того, що весь трафік направляється через Інтернет (крім конкретної підмережі приватної мережі, до якої безпосередньо підключений апарат). Я хочу змінити цю поведінку для всієї приватної мережі, спрямувавши весь приватний трафік через відповідний інтерфейс.

Який "Apple Шлях" цього досягти? Просто виконання sudo route add ...маршруту створює лише тимчасово, тоді як я хочу пов’язати його з інтерфейсом деяким постійним способом (тобто, це переживе стан зміни інтерфейсу або перезавантаження системи).

Я припускаю, що рішення передбачає запущений виклик сценарію після появи інтерфейсу… але як ?!


Будь ласка, додайте інформацію про "всю приватну мережу" та як вона відрізняється від "конкретної приватної мережі підмережі".
кланомат

@klanomath: Для аргументу припустимо, що "вся приватна мережа" дорівнює 10/8, а "конкретна підмережа" - 10.11.12 / 24.
eggyal

Я просто запитую, оскільки НІ трафік до приватних мереж ніколи не успішно направляється через Інтернет (за винятком випадків, коли VPN задіяний), будь ласка, перевірте . Тож деякі дійсно основні відомості про вашу мережеву інфраструктуру відсутні.
кланомат

@klanomath: Саме тому мені потрібен статичний маршрут для забезпечення маршрутизації приватного мережевого трафіку через інтерфейс приватної мережі.
eggyal

Ви це перевірили: staticroute
klanomath

Відповіді:


0

1 - Ось скопійоване рішення, але застаріле:

Перш за все, ви повинні бути локальним адміністратором.

Відкрийте термінал і перейдіть до каталогу StartupItems

cd /Library/StartupItems

Потім створіть новий каталог з привілеями root, наприклад AddRoutes та змініть його

sudo mkdir ./AddRoutes
cd ./AddRoutes

Тепер ви повинні створити та відредагувати скрипт bash

sudo touch ./AddRoutes
sudo nano ./AddRoutes

Вставте наступні рядки в скрипт bash і адаптуйте його до вашої мережі

#!/bin/sh

# Set static routing tables

. /etc/rc.common

StartService ()
{
sleep 10
ConsoleMessage "Adding Static Routing Table"
sudo /sbin/route add -net 10.0.0.0 -netmask 255.0.0.0 -gateway w.x.y.z
}

StopService ()
{
return 0
}

StopService ()
{
return 0
}

RestartService ()
{
return 0
}

RunService "$1"

Закінчивши сценарій, збережіть його.

Потім створіть відповідний список.

sudo touch StartupParameters.plist
sudo nano StartupParameters.plist

Коли ви створили файл plist, вставте до нього наступні рядки.

{
Description = "Add static routing tables";
Provides = ("AddRoutes");
Requires = ("Network");
OrderPreference = "None";
}

Закінчивши файл plist, збережіть його.

Нарешті, ви повинні встановити права доступу

sudo chmod 755 /Library/StartupItems/AddRoutes/*

Наприкінці вам доведеться перезавантажити і тепер встановлені ваші постійні статичні маршрути.

Ви можете підтвердити наступне

netstat -nr

2 - Тут ви можете знайти більш сучасне рішення, що включає невелику програму:

staticroute

Налаштовані статичні маршрути переживають перезапуск, і вони автоматично додаватимуться та видаляються, коли мережеві інтерфейси піднімаються вгору та вниз.


Дякую. Я бачив це рішення раніше. Однак StartipItemsна деякий час його застаріли на користь launchd. Чи є поточна рекомендація?
eggyal

Це працює аналогічно. Можливо, вам все ще потрібен той самий скрипт оболонки Дозвольте мені подивитися ...
klanomath

Наступна проблема полягає в тому, що сценарій потрібно буде запускати щоразу, коли з’являється інтерфейс, а не лише коли машина перезавантажується.
eggyal
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.