34

Я на 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 не работает. Таким образом, я маршрутизирую трафик 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 не может подключиться.

РЕДАКТИРОВАТЬ 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

8 ответов8

30

Пытаться:

route add -host 54.81.143.201 -interface en0
3

Как указали другие, это на самом деле 3 проблемы.

  1. Ваш беспроводной интерфейс, кажется, меняется между en0, en3 и en5.

    На моем MacBook Air en0 всегда беспроводная; Thunderbolt-to-Ethernet всегда en3, а USB-to-Ethernet всегда en5. Но если вы подключите адаптер к другому порту на вашем Mac, то имя его сетевой карты изменится. Вы должны решить это в первую очередь. Убедитесь, что ваше беспроводное устройство всегда имеет одно и то же имя. В противном случае при вводе команды статического маршрута, если в расположение en0 не подключен сетевой адаптер , команда (очевидно) завершится с ошибкой адреса (физический адрес не имеет связи).

    Также убедитесь, что адаптер всегда подключается к одному и тому же 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

Это решение работает на последней версии MacOS 10.12 (Sierra). Вот суть.

#!/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 , но я просто слишком ленив для этого =)

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-адрес источника, который есть у пакетов.

1
sudo route -n add -net 54.81.143.201/32 192.168.15.1
1

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

Это, однако, не то, что вы хотите. Вы должны исправить свои сети так, чтобы их диапазоны IP были уникальными. Помимо этого, метрики интерфейса (или приоритеты) влияют на то, какой интерфейс выбирается из других в равной степени подходящих вариантов.

-1

Попробуйте добавить имя NIC:

route add -net 10.13.0.0 netmask 255.255.0.0 dev NicNameHere

Это работает для меня в CentOS.

-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 Metric 20 En5, но также есть маршрут к 0.0.0.0/0 10.7.90.1 Metric 10 En0. Компьютер проигнорирует вашу новую запись и продолжит маршрутизацию трафика по маршруту по умолчанию (через En0), потому что это более предпочтительно. Я просто просмотрел это и хотел указать на это. Ура!

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