Як керувати маршрутом IP через певний інтерфейс в OS X?


40

Я перебуваю на Mac і намагаюся прокласти певну адресу через певний шлюз на моєму Wi-Fi з'єднанні.

Я використовую:

route add -host 54.81.143.201 192.168.15.1

Іноді це спрацює, інше - звичайно. Я знайшов, що інтерфейс, який він вибирає, кожен раз відрізняється. Це потрібно en0працювати

netstat -nr вихід, коли він не працює:

54.81.143.201      192.168.15.1       UGHS            1       89     en5

Це коли це працює: (примітка en0)

54.81.143.201      192.168.15.1       UGHS            0        1     en

Чому я це роблю? Оскільки в нашій компанії є проксі, на якому HipChat не працює. Тому я маршрутизую трафік через хітхат через відкриту мережу Wi-Fi, поки все ще працюю в Ethernet своїх робіт.

Редагувати:

Я також спробував додати запис, використовуючи лише інтерфейс

route add -host 54.81.143.201 -interface en0

54.81.143.201      78:31:c1:c7:52:74  UHS             0        2     en0

HipChat не підключається.

EDIT 2: Хтось запитав всю мою таблицю маршрутизації, ось вона сьогодні. Зауважимо, що 54.81.143.201 тепер прив’язаний до en3, а не до en0

Internet:
Destination        Gateway            Flags        Refs      Use   Netif Expire
default            10.7.90.1          UGSc           31        6     en3
10.7.90/24         link#4             UCS             4        0     en3
10.7.90.1          0:23:ac:3d:db:c2   UHLWIir        16        0     en3   1200
10.7.90.44         40:6c:8f:19:4a:bb  UHLWI           0        3     en3    946
10.7.90.63         127.0.0.1          UHS             0        0     lo0
54.81.143.201      192.168.15.1       UGHS            0        0     en3
127                127.0.0.1          UCS             0        0     lo0
127.0.0.1          127.0.0.1          UH              3      209     lo0
169.254            link#4             UCS             1        0     en3
169.254.255.255    0:23:ac:3d:db:c2   UHLSW           0        0     en3

Опублікуйте повну таблицю маршрутизації для випадку, коли вона не працює. Чи доступно 192.168.15.1 через en5? Якщо так, то чому це не працює? Якщо ні, то важко зрозуміти, як додали цей маршрут.
Девід Шварц

@DavidSchwartz, ось що мені цікаво. 192.168.15.1 недоступний через en5. Ця річ працює, коли вона правильно присвоєна en0.
Sean256

Покажіть нам таблицю маршрутизації або конфігурацію en5. Має бути якась причина, через яку цей маршрут встановлюється, і це, мабуть, справжня проблема.
Девід Шварц

@DavidSchwartz Це не завжди en5, іноді це en3. Зараз я розміщую всю свою таблицю маршрутизації.
Sean256

У таблиці маршрутизації, яку ви показали, en3явно правильно. 192.168.15.1 недоступний через будь-який інший інтерфейс. Єдиний спосіб досягти 192.168.15.1 у цій таблиці маршрутів - це маршрут за замовчуванням, правда? (Безглуздо, це здається, що ти поняття не маєш, чим ти займаєшся. Ти, мабуть, здивований, що система не робить неможливе.)
David Schwartz

Відповіді:


34

Спробуйте:

route add -host 54.81.143.201 -interface en0

2
Це те, що я отримую, коли намагаюся: route: погана адреса: en0
Sean256

Вибачте, у мене немає Mac для перевірки цього. Схоже, синтаксис був неправильним. Я змінив відповідь. Будь ласка спробуйте ще раз.
drk.com.ar

1
те ж саме сумно -> маршрут: погана адреса: en0
Sean256

Спробуйте ще раз. Цього разу я зняв шлюз. Крім того, чи можете ви додати висновок ifconfig до свого запитання, щоб побачити, чи задіяна конфігурація IP?
drk.com.ar

Я просто спробував це (насправді я мав і раніше), і він додає запис до моєї таблиці, це не вирішує проблему. HipChat не підключається. Ось запис у таблиці маршрутизації, коли це робиться таким чином -> 54.81.143.2018 78: 31: c1: c7: 52: 74 UHS 0 2 en0
Sean256

3

Як зазначали інші, це насправді 3 проблеми.

  1. Здається, ваш бездротовий інтерфейс змінюється між en0, en3 та en5.

    У моєму MacBook Air en0 завжди бездротовий; Thunderbolt-to-Ethernet завжди є en3, а USB-до-Ethernet - завжди en5. Але якщо ви підключите адаптер до іншого порту на вашому Mac, то його ім'я NIC змінюється. Вам потрібно вирішити це спочатку. Переконайтесь, що ваш бездротовий зв’язок завжди має одне ім’я. В іншому випадку, коли ви вводите команду статичного маршруту, якщо до en0локації немає підключеного NIC , команда (очевидно) не вдасться із "помилкою адреси" (фізична адреса не має посилання).

    Крім того, переконайтеся, що адаптер завжди підключається до одного SSID. Адреса шлюзу, очевидно, має бути дійсною для підмережі, і різні мережі WiFi матимуть різні підмережі. Це може спричинити помилку іншого типу.

    Ви не вказали, чи є бездротовим з'єднанням єдине мережеве з'єднання. З огляду на сказане, я думаю, ні ...? Ця та віртуальна мережа завдяки VMware або Parallels може спричинити додаткові труднощі. (Наприклад, якщо обидві підключені мережі використовують один і той же IP-простір ... Віртуальні машини часто мостові і мають власні IP-адреси / маршрути / посилання ...) Топологія розміщення мережі допоможе.

  2. Після цього спробуйте sudo route add -host 54.81.143.201 -iface en0або sudo ipfw. Якщо ви не впевнені в імені адаптера, можете вказати його MAC-адресу замість цього:sudo route add -host 54.81.143.201 -link 14:10:9f:e7:fd:0a

    Пов’язано: https://discussions.apple.com/thread/5049994?searchText=policy%20route

  3. Якщо ви перезавантажите це, можливо, не збережеться. Вам потрібно буде впоратися з цим окремо.



2

Мені вдалося додати маршрут через інтерфейс, скориставшись -linkопцією вказати MAC-адресу.

route add -host 54.81.143.201 -link [mac addr of 192.168.15.1 on en0]

Це направить трафік 54.81.143.201на відповідний інтерфейс.

У вас призначені дві окремі 192.168.15.*адреси хостів, по одному для кожного інтерфейсу, правда? В іншому випадку, ви можете відправляти трафік з будь-якого інтерфейсу, але трафік буде повертатися в будь-який джерело IP-пакету.


Тому я спробував те, що ви запропонували, використовуючи mac addr, і, як не дивно, моя таблиця маршрутизації показує запис для en3, а не en0 -> 54.81.143.201 00: 1d.88.4a.21.da UGHS 0 0 en3
Sean256

Коли ви робите "арп -ан", які записи у вас є ...?
Невін Вільямс

2

Це рішення працює на останньому MacOS 10.12 (Сьєрра). Ось істота .

#!/bin/bash

# NOTE: wifi network interface is: en1
wifi_router=192.168.200.1
wifi_address=en1:ec.35.86.4f.00.cc
TOADDR=`ifconfig en1 inet | sed -nl 's/\w*inet \([^ ]*\).*/\1/p'`
TO=`echo -n ${TOADDR//[[:space:]]}`

echo "ADDING ROUTE TO $1 VIA en1 (wi-fi): $TO"
route -n add -host $1 $wifi_router -ifp $wifi_address -ifa $TO -static

echo ""
echo "ROUTE ADDED:"
route get $1

Використовуйте так:

> sudo ./route_wifi.sh IP_ADDRESS

Він передбачає, що Wi-Fi інтерфейс: en1 .

Не забудьте поставити правильні значення для змінних wifi_router та wifi_address . Примітка wifi_address формат, який: мережеве ім'я інтерфейсу « : » інтерфейс MAC - адреса з ' . ' роздільники . Звичайно, більша частина потрібної інформації може бути розібрана з виводу команди ifconfig , але я просто лінивий для цього =)


Ласкаво просимо до Superuser. Будь ласка, спробуйте містити найбільш релевантну інформацію за посиланням у своїй публікації. Детальніше про це читайте тут .
стиропор летить

1

OS X routeкоманда описана тут . -ifscopeПараметр і його значення дозволяє вказати інтерфейс, пов'язаний маршрут.

Це, однак, не те, що ви хочете. Вам потрібно виправити ваші мережі, щоб їх діапазони IP були унікальними. Крім цього, метричні показники інтерфейсу (ака-пріоритети) впливають на те, який інтерфейс обраний із інакше однаково підходящого варіанту.


-1

Отже, сервер постачальників, з яким ви намагаєтесь поговорити, щодо послуги "HipChat", на яку ви заявляєте, становить 54.81.143.201? У цьому випадку я б зробив запис маршрутизації для 54.81.143.0 255.255.255.0, щоб надати йому більший діапазон. Можливо, використовуючи програмне забезпечення, ви не завжди розмовляєте з цим конкретним сервером, але кластер їх у тій самій підмережі 54.81.143.0/24. Крім того, переконайтесь, що показники маршруту правильні під час створення нового запису. Якщо ви створюєте маршрут до 54.81.143.0/24 192.168.15.1 метрики 20 En5, але також маєте маршрут до 0,0.0.0/0 10.7.90.1 метрики 10 En0. Комп'ютер проігнорує ваш новий запис та продовжить маршрутизацію трафіку за маршрутом за замовчуванням (через En0), оскільки він є більш кращим. Я просто проскочив це і хотів вказати на це. Ура!


-1

Спробуйте додати ім'я NIC:

route add -net 10.13.0.0 netmask 255.255.0.0 dev NicNameHere

Це працює для мене в CentOS.


Я отримую це -> маршрут: погана адреса: dev
Sean256
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.