Примушуйте програму використовувати певний мережевий інтерфейс


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 незалежно від того, на який веб-сайт вони мають доступ? Це питання.
gman

2
@gman: Нічого щодо цієї відповіді не стосується веб-сайтів.
Гонки легкості з Монікою

3
ОП хоче вибрати мережевий інтерфейс на основі прикладної програми. Ця відповідь показує, як вибрати, залежно від хоста призначення.
Bennett McElwee

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

Згадане вище, це не відповідає на питання, як заблокувати певний додаток до певного NIC.
catchdave

6

Якщо ви хочете одночасно активувати два NIC, ви можете встановити Порядок обслуговування в системних налаштуваннях / Мережі, вибравши передачу нижче списку мережевих пристроїв. Перетягніть замовлення, яке вам потрібно.

Наприклад, у мене в ефірі MBP завжди активні Ether і WiFi з набором Ether вище Wi-Fi. Оскільки я використовую Ether на роботі, я встановив цей NIC з налаштуваннями проксі та без 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 є просте рішення, яке я використовую. Це фактично реалізація рішення @ Андора. Встановіть проксі і налаштуйте ваші програми для його використання:

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

  2. У конфігурації додайте наступний рядок. Вам потрібно вказати ip, який ви будете використовувати для своїх приватних додатків замість x.x.x.x:

    tcp_outgoing_address x.x.x.x
    
  3. Запустіть SquidMan і налаштуйте додаток, щоб використовувати його як проксі.

Я витратив годину, щоб знайти цю інформацію на різних сторінках, тож сподіваюся, що це допомагає іншим робити це швидше.


Має працювати так само в Windows і, здається, це єдине елегантне рішення!
TJJ

1

Ймовірно, вам потрібно буде використовувати низькорівневі функції керування вводу-виводу (ioctl). Зокрема:

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

і

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

Докладнішу інформацію див. На цій довільній сторінці .


1

Проблема полягає в тому, що у вас буде декілька шлюзів до вашого мережевого з'єднання, і це трохи важко керувати ...

У деяких інструментах Unix та Linux, пов’язаних із сервером або мережею, зазвичай є прапор під назвою "інтерфейс", де ви можете вказати, який інтерфейс ви хочете використовувати, як, наприклад, у tcpdump:

tcpdump -i eth0

Але, як я думаю, ви запитуєте про маршрутизацію стандартного програмного забезпечення для настільних ПК, це стає трохи складніше ...

Я можу вам сказати хитрість для цього в будь-якому випадку ... Моє звичайне виправлення для вирішення цих проблем - це використання проксі-сервера та наявність лише одного шлюзу. Практично в будь-якому програмному забезпеченні, яке сьогодні використовує Інтернет, є варіанти налаштування проксі, тому ви можете це зробити будь-яким із цих способів:

1. - Налаштування проксі-сервера на "незахищеній" (я маю на увазі, коли поліси не застосовуються) частини вашої мережі та вказівку вашого програмного забезпечення на цей проксі.

2. - Встановлення SSH-сервера в іншому "незахищеному" місці, скажімо, вашому домі або виділеному сервері, який ви маєте в Інтернеті, і відкриття з'єднання через спеціальну функцію, яку має SSH, що створює проксі-сервер шкарпетки:

ssh -D 1234 user@host

Це створило б на вашому комп'ютері проксі-сервер шкарпеток на порту "1234", який би з'єднався з вашим "хостом", використовуючи ваш "користувач", і перейшов до Інтернету через з'єднання, яке має ваш "хост" ... Потім, у вашому локальному програмному забезпеченні потрібно лише відкрити інструменти конфігурації проксі-сервера та вказати на localhost: 1234.

Приємні прийоми уникнення корпоративної політики в Інтернеті: P

: D


1

Я запускаю свої бізнес-програми всередині віртуальної машини. Я використовував вищезазначені інструкції, щоб встановити WiFi як моє бажане з'єднання, а потім налаштував віртуальну машину на використання порта Ethernet як адаптер для мосту.

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

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

Згаданий раніше метод маршрутизації є дещо складним для "непрофесійної людини", але здається, що також хорошим життєздатним підходом, особливо якщо ви неодноразово отримуєте ту саму IP-адресу на своїх з'єднаннях.


0

Незважаючи на те, що це питання стосується OSX, я залишу наступне, що працює на Windows 7 64-розрядному. Це запитання постало як один із найкращих результатів, коли Google змушував програми проходити конкретний адаптер , тому наступне може бути корисним для інших.

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.