Wymuś na aplikacji użycie określonego interfejsu sieciowego


48

Korzystam z wielu interfejsów sieciowych (LAN i Wireless) i zauważyłem, że istnieje sposób na zmianę kolejności preferowanych interfejsów. Jak mogę korzystać z sieci przewodowej do pracy, sprawdzania poczty e-mail itd. (Bezpiecznie) i korzystania z bezprzewodowej sieci VLAN w celu uzyskiwania dostępu do innych rzeczy (w przeciwnym razie blokowane przez porty i czasami websense)?

Odpowiedzi:


22

Sztuką jest dostosowanie tabel routingu (które nie zależą od docelowego portu lub aplikacji źródłowej, ale zależą od docelowego hosta). Zakłada się, że korzystasz z systemu Linux lub OS X (jak pokazują tagi).

Załóżmy, że twoją domyślną bramą jest 1.2.3.4 i masz VPN, który może kierować ruchem na 6.7.8.9. Jeśli chcesz, aby Twój ruch pocztowy przekraczał 6.7.8.9, po prostu zrób

sudo route add mail.myserver.com 6.7.8.9

Niektóre wersje trasy mogą wymagać słowa kluczowego „gw” między adresem a następnym przeskokiem. Jeśli chcesz wykonać całą trasę netto po tym następnym przeskoku, po prostu dodaj maskę sieci w notacji CIDR dla miejsca docelowego, na przykład

sudo route add 192.168.0.0/24 6.7.8.9

Jeśli chcesz wyświetlić istniejącą tabelę routingu, użyj

netstat -nrl
or
ip route list

Jeśli korzystasz z systemu Windows, „net route” zapewni ci większość możliwości, ale składnia jest zupełnie inna.


17
To naprawdę nie jest odpowiedź, prawda? Pytanie brzmi, jak wymusić aplikację, a nie stronę internetową. Na przykład, co chciałem, aby Safari korzystało z VPN (ppp0), a Firefox korzystał z en0 bez względu na to, do której strony ma dostęp? Oto jest pytanie.
gman

2
@gman: Nic w tej odpowiedzi nie dotyczy stron internetowych.
Lekkość ściga się z Moniką

3
OP chce wybrać interfejs sieciowy na podstawie aplikacji. Ta odpowiedź pokazuje, jak wybrać na podstawie docelowego hosta.
Bennett McElwee,

Nie zamierzam głosować za tym (jest to dobra rada na inne pytanie), ale z pewnością nie zamierzam też głosować za tym (z powodów podanych przez @gman i @ bennett-mcelwee).
ratskin

Powyżej powyższe nie odpowiada na pytanie, jak zablokować określoną aplikację do określonej karty sieciowej.
catchdave

6

Jeśli chcesz mieć jednocześnie aktywne dwie karty sieciowe, możesz ustawić Zlecenie serwisowe w Preferencjach systemowych / Sieci, wybierając koło zębate poniżej listy urządzeń sieciowych. Przeciągnij i upuść kolejność, w jakiej chcesz.

Na przykład mam Ethernet i WiFi zawsze aktywne na moim MBP z Etherem ustawionym powyżej Wi-Fi. Ponieważ korzystam z Etheru w pracy, skonfigurowałem tę kartę sieciową z ustawieniami proxy i bez Wi-Fi. Kiedy wracam do domu, nie muszę zmieniać żadnych ustawień. Możesz to również zrobić z terminala za pomocą /usr/bin/networksetup -ordernetworkservices.

Ale ponieważ zarówno aktywna, jak i aplikacja korzysta z domyślnej opcji, miałem szczęście z nieco łatwiejszym skorzystaniem z porady @ Andora. Jeśli chcę, aby aplikacja nie używała Etheru w moim przypadku, ustawiam ustawienia proxy dla aplikacji na adres IP mojego adaptera Wi-Fi. Użyje tego interfejsu, aby wyjść i w ten sposób ominąć firmowe serwery proxy i monitorowania. Więc jeśli Ether ma adres 1.2.3.4 i pojawia się przed Wi-Fi (5.6.7.8) w zleceniu serwisowym, mam moją aplikację proxy do 5.6.7.8.


5

W przypadku komputerów Mac istnieje proste rozwiązanie, którego używam. W rzeczywistości jest to implementacja rozwiązania @ Andor. Zainstaluj serwer proxy i skonfiguruj aplikacje, aby z niego korzystały:

  1. Zainstalowałem SquidMan

  2. W konfiguracji dodaj następujący wiersz. Musisz podać adres IP, którego będziesz używać w swoich prywatnych aplikacjach zamiast x.x.x.x:

    tcp_outgoing_address x.x.x.x
    
  3. Uruchom SquidMan i skonfiguruj aplikację, aby używała jej jako serwera proxy.

Spędziłem godzinę, aby znaleźć te informacje na różnych stronach, więc mam nadzieję, że pomoże to innym szybciej.


Powinien działać tak samo w systemie Windows i wydaje się być jedynym eleganckim rozwiązaniem!
TJJ

1

Prawdopodobnie będziesz musiał użyć niskopoziomowych funkcji sterowania IO (ioctl). W szczególności:

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

i

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

Zobacz tę stronę podręcznika, aby uzyskać więcej szczegółów.


1

Problem polega na tym, że będziesz mieć wiele bram do połączenia sieciowego, a to jest trochę trudne do zarządzania ...

Niektóre narzędzia uniksowe i linuksowe związane z serwerem lub siecią zwykle mają flagę o nazwie „interfejs”, w której możesz określić, którego interfejsu chcesz użyć, na przykład w tcpdump:

tcpdump -i eth0

Ale myślę, że pytasz o routing standardowego oprogramowania komputerowego, co staje się nieco trudniejsze ...

W każdym razie mogę ci w tym podpowiedzieć ... Moją zwykłą poprawką w rozwiązywaniu tych problemów jest używanie serwera proxy i tylko jednej bramy. Prawie każde oprogramowanie, które obecnie korzysta z Internetu, ma opcje konfiguracji serwera proxy, więc możesz to zrobić na jeden z poniższych sposobów:

1.- Konfigurowanie serwera proxy w „niezabezpieczonej” (to znaczy tam, gdzie zasady nie są egzekwowane) części sieci i kierowanie oprogramowania do tego serwera proxy.

2.- Ustawienie serwera SSH w innym „niezabezpieczonym” miejscu, powiedzmy, domu lub serwerze dedykowanym, który masz w Internecie, i otwarcie połączenia za pomocą specjalnej funkcji SSH, która tworzy serwer proxy skarpet:

ssh -D 1234 user@host

To stworzy na twoim komputerze serwer proxy do skarpet na porcie „1234”, który połączy się z twoim „hostem”, używając twojego „użytkownika”, i przejdzie do Internetu przez połączenie, które twój „host” ma ... Następnie, w lokalnym oprogramowaniu wystarczy otworzyć narzędzia do konfiguracji proxy i wskazać localhost: 1234.

Fajne sztuczki pozwalające uniknąć korporacyjnych zasad internetowych: P

:RE


1

Moje aplikacje biznesowe uruchamiam na maszynie wirtualnej. Skorzystałem z powyższych instrukcji, aby ustawić WiFi jako preferowane połączenie, a następnie skonfigurowałem maszynę wirtualną do korzystania z portu Ethernet jako adaptera „zmostkowanego”.

Wszystko, co działa na maszynie wirtualnej, jest teraz podłączone do portu Ethernet. Wi-Fi jest moim preferowanym połączeniem dla wszystkich innych aplikacji (poza maszyną wirtualną), o ile mam podłączone połączenie Wi-Fi.

Sądzę, że istnieją narzędzia, których można użyć do wymuszenia powiązania aplikacji z określonym portem ethernet, ale nie zbadałem go w systemie MacOS.

Wspomniana wcześniej metoda routingu jest nieco złożona dla „świeckich”, ale wydaje się również dobrym rozwiązaniem, szczególnie jeśli wielokrotnie otrzymujesz ten sam adres IP na swoich połączeniach.


0

Mimo że to pytanie dotyczy OSX, pozostawię tutaj poniższe, które działają w systemie Windows 7 64-bit. To pytanie pojawiło się jako jeden z najlepszych wyników podczas wyszukiwania w Google dla aplikacji wymuszających przejście przez określony adapter , więc poniższe mogą być przydatne dla innych.

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

Powyższy przewodnik korzysta z narzędzia o nazwie ForceBindIp, które jest reklamowane do pracy, Windows NT/2000/XP/2003 ale nie miałem problemów z uruchomieniem go w systemie Windows 7 - 64-bitowym.

Ponadto problemy z ForceBindIP w systemie Windows 7 (x64)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.