Заставить приложение использовать определенный сетевой интерфейс
48
Я использую несколько сетевых интерфейсов (LAN и Wireless), и я заметил, что есть способ изменить порядок предпочтительных интерфейсов. Как я могу использовать проводную сеть, чтобы работать, проверять электронную почту и т. Д. (Безопасно), и использовать беспроводную VLAN для доступа к другим вещам (в противном случае блокируется портами, а иногда и веб-зрением)?
Хитрость заключается в корректировке таблиц маршрутизации (которая не зависит от порта назначения или исходного приложения, но зависит от хоста назначения). Это предполагает, что вы работаете в 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, «сетевой маршрут» поможет вам в этом, но синтаксис совершенно другой.
Это не совсем ответ, не так ли? Вопрос в том, как заставить приложение, а не веб-сайт. Например, что я хотел, чтобы 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.
Для Mac есть простое решение, которое я использую. На самом деле это реализация решения @ Andor. Установите прокси и настройте приложения для его использования:
Проблема в том, что у вас будет несколько шлюзов к вашему сетевому соединению, и это немного сложно для управления ...
У некоторых утилит unix и linux, связанных с сервером или сетью, обычно есть флаг под названием «interface», где вы можете указать, какой интерфейс вы хотите использовать, например, в tcpdump:
tcpdump -i eth0
Но, как я думаю, вы спрашиваете о маршрутизации стандартного настольного программного обеспечения, это становится немного сложнее ...
В любом случае, я могу рассказать вам об этом ... Мой обычный способ решения этих проблем - использование прокси и наличие только одного шлюза. Практически любое программное обеспечение, которое использует Интернет в настоящее время, имеет опции для настройки прокси, так что вы можете сделать это любым из следующих способов:
1.- Настройка прокси на «незащищенной» (я имею в виду, где политики не применяются) части вашей сети и направление вашего программного обеспечения на этот прокси.
2. Установите SSH-сервер в другом «незащищенном» месте, скажем, у вас дома или на выделенном сервере в Интернете, и откройте соединение с помощью специальной функции SSH, которая создает прокси-сервер socks:
ssh -D 1234 user@host
Это создаст на вашем компьютере прокси-сервер socks на порту «1234», который будет подключаться к вашему «хосту», используя вашего «пользователя», и выходить в Интернет через соединение, которое имеет ваш «хост» ... Затем, в вашем локальном программном обеспечении вам нужно только открыть инструменты настройки прокси и указать localhost: 1234.
Хорошие трюки, чтобы избежать корпоративных интернет-политик: P
Я запускаю свои бизнес-приложения на виртуальной машине. Я использовал приведенные выше инструкции, чтобы установить WiFi в качестве предпочтительного подключения, а затем настроил виртуальную машину для использования порта Ethernet в качестве адаптера «Bridged».
Все, что работает внутри виртуальной машины, теперь жестко связано с портом Ethernet. Wi-Fi - мое предпочтительное соединение для всех других приложений (за пределами виртуальной машины), если у меня подключено соединение WiFi.
Я считаю, что существуют утилиты, которые можно использовать для принудительного связывания приложения с конкретным портом Ethernet, но не исследовали его для MacOS.
Упомянутый ранее метод маршрутизации является несколько сложным для «непрофессионала», но также выглядит хорошим жизнеспособным подходом, особенно если вы постоянно получаете один и тот же IP-адрес в ваших соединениях.
Несмотря на то, что этот вопрос относится к OSX, я оставлю здесь следующее, которое работает на Windows 7 64-битной. Этот вопрос стал одним из главных результатов поиска приложений, заставляющих приложения проходить через определенный адаптер , поэтому следующее может быть полезным для других.
В приведенном выше руководстве используется утилита ForceBindIp, которая рекламируется для работы, Windows NT/2000/XP/2003 но у меня не возникло проблем с тем, чтобы она работала в Windows 7 - 64-битной среде.
Если вы просто хотите, чтобы одновременно были активны две сетевые карты, вы можете установить порядок обслуживания в Системных настройках / Сеть, выбрав механизм под списком сетевых устройств. Перетащите порядок, в котором вы хотите их.
Например, у меня всегда активны 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.
источник
Для Mac есть простое решение, которое я использую. На самом деле это реализация решения @ Andor. Установите прокси и настройте приложения для его использования:
Я установил SquidMan
В конфигурации добавьте следующую строку. Вам необходимо указать IP-адрес, который вы будете использовать для своих личных приложений вместо
x.x.x.x
:Запустите SquidMan и настройте ваше приложение на использование его в качестве прокси.
Я потратил час, чтобы найти эту информацию на разных страницах, поэтому надеюсь, что это поможет другим сделать это быстрее.
источник
Вам, вероятно, понадобится использовать низкоуровневые функции управления IO (ioctl). Особенно:
а также
Смотрите эту справочную страницу для более подробной информации.
источник
Проблема в том, что у вас будет несколько шлюзов к вашему сетевому соединению, и это немного сложно для управления ...
У некоторых утилит unix и linux, связанных с сервером или сетью, обычно есть флаг под названием «interface», где вы можете указать, какой интерфейс вы хотите использовать, например, в tcpdump:
Но, как я думаю, вы спрашиваете о маршрутизации стандартного настольного программного обеспечения, это становится немного сложнее ...
В любом случае, я могу рассказать вам об этом ... Мой обычный способ решения этих проблем - использование прокси и наличие только одного шлюза. Практически любое программное обеспечение, которое использует Интернет в настоящее время, имеет опции для настройки прокси, так что вы можете сделать это любым из следующих способов:
1.- Настройка прокси на «незащищенной» (я имею в виду, где политики не применяются) части вашей сети и направление вашего программного обеспечения на этот прокси.
2. Установите SSH-сервер в другом «незащищенном» месте, скажем, у вас дома или на выделенном сервере в Интернете, и откройте соединение с помощью специальной функции SSH, которая создает прокси-сервер socks:
Это создаст на вашем компьютере прокси-сервер socks на порту «1234», который будет подключаться к вашему «хосту», используя вашего «пользователя», и выходить в Интернет через соединение, которое имеет ваш «хост» ... Затем, в вашем локальном программном обеспечении вам нужно только открыть инструменты настройки прокси и указать localhost: 1234.
Хорошие трюки, чтобы избежать корпоративных интернет-политик: P
: D
источник
Я запускаю свои бизнес-приложения на виртуальной машине. Я использовал приведенные выше инструкции, чтобы установить WiFi в качестве предпочтительного подключения, а затем настроил виртуальную машину для использования порта Ethernet в качестве адаптера «Bridged».
Все, что работает внутри виртуальной машины, теперь жестко связано с портом Ethernet. Wi-Fi - мое предпочтительное соединение для всех других приложений (за пределами виртуальной машины), если у меня подключено соединение WiFi.
Я считаю, что существуют утилиты, которые можно использовать для принудительного связывания приложения с конкретным портом Ethernet, но не исследовали его для MacOS.
Упомянутый ранее метод маршрутизации является несколько сложным для «непрофессионала», но также выглядит хорошим жизнеспособным подходом, особенно если вы постоянно получаете один и тот же IP-адрес в ваших соединениях.
источник
Несмотря на то, что этот вопрос относится к 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)
источник