Jak można zmusić aplikację (taką jak Firefox) do korzystania z określonego interfejsu sieciowego?

20

Mam dwa interfejsy: eth0 i wlan0 na notebooku.

Możliwe przypadki użycia:

  • eth0 zapewnia mi dostęp do Internetu, a wlan0 jest obecnie podłączony do routera, który nie ma połączenia z Internetem. Do celów programistycznych muszę domyślnie połączyć się z wlan0, ale do surfowania używam eth0
  • Zarówno eth0, jak i wlan0 są połączone z Internetem. W przypadku aplikacji torrentowej należy użyć prędkości eth0, ale dla przenośności notebooka SSH powinien mieć połączenie przez wlan0
  • eth0 to połączenie przewodowe, wlan0 to połączenie bezprzewodowe. Rozsądne dane powinny być przesyłane przez eth0, ale inny ruch może również przekraczać wlan0.

Czy istnieje sposób na zmuszenie aplikacji (takich jak nc.traditionallub firefox) do korzystania z określonego interfejsu sieciowego? Podobnie jak opakowanie example-wrapper eth0 programjest w porządku, jeśli taki program istnieje. Byłoby miło, gdyby można go było skonfigurować w przeglądarce Firefox (w czasie wykonywania). Jeśli to możliwe, chciałbym unikać rozwiązań IPTables.

Lekensteyn
źródło
4
jest to również pomocne w przypadku wielu połączeń internetowych z jednym korzystającym z torrenta, a drugim do surfowania.
iamgopal
Chcesz korzystać z różnych tras opartych na protokole / aplikacji, do tego potrzebujesz iptables.
João Pinto
1
Nie wiem, jak to zrobić bez czegoś, co mapuje ruch warstwy7 (aplikacji) na określony port lub w inny sposób filtruje na podstawie informacji o aplikacji wyższego poziomu (co wymagałoby inspekcji ruchu). Tak więc chociaż iptables nie jest konieczne, każde rozwiązanie obejmujące opakowanie musiałoby w jakiś sposób współdziałać z polityką TCP lub IP. Nie wiem, jak to zrobić bez sieci warstwy 2 lub warstwy 3, która kieruje ruchem gdzie indziej.
belacqua

Odpowiedzi:

1

To, czego szukasz, to podkładka LS_PRELOAD, zobacz wpis na blogu Daniela Lange, aby uzyskać szczegółowe wyjaśnienie i przykładowy kod.

Bob Lebin
źródło
3
Witamy w Ask Ubuntu! Chociaż teoretycznie może to odpowiedzieć na pytanie, lepiej byłoby zawrzeć tutaj istotne części odpowiedzi i podać odnośnik.
Stormvirux
1

Możesz zastosować bardziej złożone podejście do oznaczania połączeń i zasad tras.
Będzie działać dobrze, jeśli masz użytkownika, który uruchamia jedno oprogramowanie i inne.
W ten sposób możesz oznaczyć połączenia jednego użytkownika i użyć dla niego określonej tabeli routingu, podczas gdy wszyscy inni będą używać domyślnej.
Podstawowym dokumentem do zrozumienia tego wszystkiego jest: http://www.lartc.org/lartc.html
Również przykład dwóch połączeń można zobaczyć tutaj: /unix/58635/iptables- set-mark-route-different-port-through-different-interfaces
Możesz użyć modułu iptables "właściciel", który zaznaczy połączenia, aby umożliwić politykę routingu.

elico
źródło
Routing zasad działa dla różnych użytkowników, ale nie dla aplikacji działającej pod jednym użytkownikiem (jak opisano w OP). LD_PRELOADwydaje się właściwą drogą (nie w przypadku złośliwych programów / ze względów bezpieczeństwa), może ktoś mógłby opracować post Boba Lebinsa?
Lekensteyn,
0

Oto przykładowe rozwiązanie. Używa serwera SOCKS, skonfigurowanego na bieżącej maszynie do trasowania stożków. Każda aplikacja powinna być skonfigurowana do korzystania z każdego serwera.

Wadim Rutkowski
źródło
3
To wygląda jak proxy HTTP, czy działa z innymi protokołami, jak połączenie między dwoma instancjami NetCat?
Lekensteyn
0

Możesz także użyć maszyny stacji roboczej VMware do udostępniania różnych interfejsów sieciowych, które często robię, aby pobrać z jednego interfejsu i pozostawić drugiemu dla mojej Netflix.

Musisz skonfigurować zarówno ethX, jak i wlanX na VMware, ale kiedy już skonfigurujesz, jesteś gotowy do pobrania lub przeglądania.

Jest całkiem gładki. Możesz także użyć zapory ogniowej do łączenia interfejsów, co również działa świetnie.

nudny
źródło
Chociaż działa dla tej konkretnej aplikacji, niestety nie nadaje się do innych aplikacji poza maszyną wirtualną, takich jak Firefox.
Lekensteyn