Заставить приложение использовать определенный сетевой интерфейс


48

Я использую несколько сетевых интерфейсов (LAN и Wireless), и я заметил, что есть способ изменить порядок предпочтительных интерфейсов. Как я могу использовать проводную сеть, чтобы работать, проверять электронную почту и т. Д. (Безопасно), и использовать беспроводную VLAN для доступа к другим вещам (в противном случае блокируется портами, а иногда и веб-зрением)?

Ответы:


22

Хитрость заключается в корректировке таблиц маршрутизации (которая не зависит от порта назначения или исходного приложения, но зависит от хоста назначения). Это предполагает, что вы работаете в Linux или OS X (как показывают теги).

Скажем, ваш шлюз по умолчанию - 1.2.3.4, и у вас есть vpn, который может маршрутизировать трафик на 6.7.8.9. Если вы хотите, чтобы ваш почтовый трафик проходил через 6.7.8.9, просто сделайте

sudo route add mail.myserver.com 6.7.8.9

В некоторых версиях маршрута может потребоваться ключевое слово "gw" между адресом и следующим прыжком. Если вы хотите создать весь сетевой маршрут для следующего перехода, просто добавьте маску сети в нотации CIDR для пункта назначения, например

sudo route add 192.168.0.0/24 6.7.8.9

Если вы хотите просмотреть существующую таблицу маршрутизации, используйте

netstat -nrl
or
ip route list

Если вы работаете в Windows, «сетевой маршрут» поможет вам в этом, но синтаксис совершенно другой.


17
Это не совсем ответ, не так ли? Вопрос в том, как заставить приложение, а не веб-сайт. Например, что я хотел, чтобы Safari использовал VPN (ppp0), а Firefox - en0 независимо от того, к какому сайту они обращаются? Вот в чем вопрос.
1913 года

2
@gman: Ничто в этом ответе не относится только к веб-сайтам.
Легкость гонки с Моникой

3
ОП хочет выбрать сетевой интерфейс на основе прикладной программы. Этот ответ показывает, как выбрать на основе хоста назначения.
Беннет МакЭлви

Я не собираюсь опровергать это (это хороший совет для другого вопроса), но я, конечно, не собираюсь опровергать и это (по причинам, указанным @gman и @ bennett-mcelwee).
ratskin

Как указано выше, это не дает ответа на вопрос о том, как заблокировать конкретное приложение для конкретного сетевого адаптера.
catchdave

6

Если вы просто хотите, чтобы одновременно были активны две сетевые карты, вы можете установить порядок обслуживания в Системных настройках / Сеть, выбрав механизм под списком сетевых устройств. Перетащите порядок, в котором вы хотите их.

Например, у меня всегда активны Ether и WiFi на моем MBP с установленным Ether выше Wi-Fi. Поскольку я использую Ether на работе, я настроил этот сетевой адаптер с настройками прокси-сервера и Wi-Fi без него. Когда я иду домой, нет необходимости настраивать какие-либо настройки. Вы также можете сделать это с помощью терминала /usr/bin/networksetup -ordernetworkservices.

Но для того, чтобы и активное приложение и приложение использовали нестандартный режим, мне повезло с немного более легким вращением по совету @ Andor. Если я хочу, чтобы приложение не использовало Ether в моем случае, я устанавливаю настройки прокси для приложения на IP-адрес моего адаптера Wi-Fi. Он будет использовать этот интерфейс для выхода и таким образом обходить прокси-серверы и серверы мониторинга компании. Так что, если Ether имеет адрес 1.2.3.4 и идет до Wi-Fi (5.6.7.8) в сервисном заказе, у меня есть прокси приложения до 5.6.7.8.


5

Для Mac есть простое решение, которое я использую. На самом деле это реализация решения @ Andor. Установите прокси и настройте приложения для его использования:

  1. Я установил SquidMan

  2. В конфигурации добавьте следующую строку. Вам необходимо указать IP-адрес, который вы будете использовать для своих личных приложений вместо x.x.x.x:

    tcp_outgoing_address x.x.x.x
    
  3. Запустите SquidMan и настройте ваше приложение на использование его в качестве прокси.

Я потратил час, чтобы найти эту информацию на разных страницах, поэтому надеюсь, что это поможет другим сделать это быстрее.


Должно работать так же на Windows и, кажется, единственное элегантное решение!
TJJ

1

Вам, вероятно, понадобится использовать низкоуровневые функции управления IO (ioctl). Особенно:

ioctl( socket, SIOCGIFADDR, ... ); // Get network interface address

а также

ioctl( socket, SIOCSIFADDR, ... ); // Set network interface address

Смотрите эту справочную страницу для более подробной информации.


1

Проблема в том, что у вас будет несколько шлюзов к вашему сетевому соединению, и это немного сложно для управления ...

У некоторых утилит unix и linux, связанных с сервером или сетью, обычно есть флаг под названием «interface», где вы можете указать, какой интерфейс вы хотите использовать, например, в tcpdump:

tcpdump -i eth0

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

В любом случае, я могу рассказать вам об этом ... Мой обычный способ решения этих проблем - использование прокси и наличие только одного шлюза. Практически любое программное обеспечение, которое использует Интернет в настоящее время, имеет опции для настройки прокси, так что вы можете сделать это любым из следующих способов:

1.- Настройка прокси на «незащищенной» (я имею в виду, где политики не применяются) части вашей сети и направление вашего программного обеспечения на этот прокси.

2. Установите SSH-сервер в другом «незащищенном» месте, скажем, у вас дома или на выделенном сервере в Интернете, и откройте соединение с помощью специальной функции SSH, которая создает прокси-сервер socks:

ssh -D 1234 user@host

Это создаст на вашем компьютере прокси-сервер socks на порту «1234», который будет подключаться к вашему «хосту», используя вашего «пользователя», и выходить в Интернет через соединение, которое имеет ваш «хост» ... Затем, в вашем локальном программном обеспечении вам нужно только открыть инструменты настройки прокси и указать localhost: 1234.

Хорошие трюки, чтобы избежать корпоративных интернет-политик: P

: D


1

Я запускаю свои бизнес-приложения на виртуальной машине. Я использовал приведенные выше инструкции, чтобы установить WiFi в качестве предпочтительного подключения, а затем настроил виртуальную машину для использования порта Ethernet в качестве адаптера «Bridged».

Все, что работает внутри виртуальной машины, теперь жестко связано с портом Ethernet. Wi-Fi - мое предпочтительное соединение для всех других приложений (за пределами виртуальной машины), если у меня подключено соединение WiFi.

Я считаю, что существуют утилиты, которые можно использовать для принудительного связывания приложения с конкретным портом Ethernet, но не исследовали его для MacOS.

Упомянутый ранее метод маршрутизации является несколько сложным для «непрофессионала», но также выглядит хорошим жизнеспособным подходом, особенно если вы постоянно получаете один и тот же IP-адрес в ваших соединениях.


0

Несмотря на то, что этот вопрос относится к OSX, я оставлю здесь следующее, которое работает на Windows 7 64-битной. Этот вопрос стал одним из главных результатов поиска приложений, заставляющих приложения проходить через определенный адаптер , поэтому следующее может быть полезным для других.

http://www.howtogeek.com/117890/how-to-force-an-application-to-use-a-specific-network-card/

В приведенном выше руководстве используется утилита ForceBindIp, которая рекламируется для работы, Windows NT/2000/XP/2003 но у меня не возникло проблем с тем, чтобы она работала в Windows 7 - 64-битной среде.

Также проблемы с ForceBindIP в Windows 7 (x64)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.