Sprawdziłem poprzednie osoby, które zadają podobne pytania, ale jeszcze nie otrzymałem prostej odpowiedzi, która zadziała w mojej sytuacji, więc proszę ...
Korzystam z systemu Linux (Fedora 22) i mam usługę VPN, za którą płacę, jednak potrzebuję tylko określonych programów do korzystania z VPN do ich ruchu internetowego i mogę używać mojego standardowego połączenia z usługodawcą internetowym do wszystkiego innego (tj. Przeglądania stron internetowych, itp)
Uprościmy to i ograniczymy do najczęściej używanego programu, World of Warcraft, który jest uruchamiany przez WINE.
Teraz mam konfigurację VPN za pośrednictwem interfejsu sieciowego, dzięki czemu cały mój ruch przez enp10s0 (moje komputery dziwnie nazywają się eth0) może być tunelowany przez usługę VPN, jednak potrzebuję tylko określonych programów (lub portów, których te programy używają, aby bądź konkretny), aby przejść przez VPN.
Jak skonfigurować tunel i pozwolić mu tylko kierować potrzebnymi portami przez VPN, jednocześnie utrzymując wszystko inne bez routingu?
Odpowiedzi:
To, o co prosisz, nie istnieje. Dlatego jesteś niezadowolony z odpowiedzi, które znalazłeś (niektóre z nich, być może moje): wszystkie sugerują obejścia , a nie prawdziwe rozwiązanie, proste lub złożone.
Pozwól mi wyjaśnić. Trasowanie we wszystkich systemach operacyjnych zależy od adresu docelowego: możesz mieć kilka tras, ale wybór między nimi nie zależy od aplikacji wywołującej połączenie, ale po prostu od adresu docelowego. Kropka.
Dam ci nietrywialny przykład. Gdy klient VPN nawiązuje połączenie ze swoim serwerem, nadal można przekierować połączenie do danej witryny, np. Example.org, poza VPN. Ale wszystkie aplikacje próbujące dotrzeć do tego specjalnego adresu będą kierowane poza VPN: niektóre aplikacje nie mogą przechodzić do example.org przez VPN, podczas gdy inne aplikacje przechodzą poza VPN.
Sytuacja staje się bogatsza w jądrze Linuksa, które umożliwia routing źródła: oznacza to, że możesz mieć dwie lub więcej tabel routingu, a wybór między nimi zależy od adresu źródłowego, a nie adresu docelowego.
Nietrywialny przykład: mój komputer ma dwie zewnętrzne linie z dwoma odrębnymi publicznymi adresami IP. Można się z nim skontaktować za pośrednictwem dowolnego interfejsu i ważne jest, aby moje odpowiedzi na dane połączenie przechodziły przez ten sam interfejs, przez który nastąpiło połączenie: w przeciwnym razie zostaną odrzucone jako nieistotne, gdy dotrą do osoby, która zainicjowała połączenie. To jest routing źródła.
W porządku, co z połączeniami, które uruchamiamy? Niektóre aplikacje pozwalają określić adres powiązania, na przykład klient openssh :
Dla nich nie ma problemu z przejściem jednej instancji przez VPN (powiedzmy, tablica routingu 1), podczas gdy inna instancja wyjdzie poza VPN (powiedzmy tablica routingu 2). Ale inne aplikacje, takie jak Firefox, są nie tylko niezwykle trudne do przypisania do konkretnego źródłowego adresu IP (ale zobacz tutaj bardzo mądre obejście), ale są również złośliwe i wredne, ponieważ nie pozwalają ci mieć dwóch kopii siebie działające jednocześnie, każde powiązane z innym adresem źródłowym. Innymi słowy, chociaż dzięki sztuczce, o której mowa powyżej, możesz zobowiązać jedną instancję do powiązania z wybranym adresem źródłowym, nie możesz mieć innej wersji powiązania z innym adresem źródłowym.
To wyjaśnia, dlaczego używamy obejść: wszystkie oparte są na tym samym pomyśle, że działają z osobnym stosem sieciowym niż reszta komputera. Możesz więc mieć, zmniejszając przybliżoną kolejność złożoności, maszyny wirtualne, dokery, kontenery, przestrzenie nazw. W każdej z nich będziesz mieć jedną lub więcej tabel routingu, ale możesz mieć kilka instancji każdej z nich (VM / dokery / kontenery / przestrzenie nazw) i możesz również dowolnie je mieszać, każda z nich ma własną aplikację, taką jak Firefox, szczęśliwie oddzielona od pozostałych.
Być może nadal interesuje Cię jedno z obejść?
EDYTOWAĆ:
Najprostszym obejściem jest sieć nazw sieciowych. Poniższy skrypt obsługuje wszystkie niezbędne aspekty NNS: umieść go w pliku (wybierasz swoje imię, zwykle używam
newns
, ale robisz, co wolisz)/usr/local/bin
, a następniechmod 755 FILE_NAME
możesz użyć go w następujący sposób:Otworzy się
xterm
dla ciebie (to dlatego, że lubię Xterm do pracy, ale możesz go zmienić, jeśli chcesz użyć czegoś innego), który należy do nowej przestrzeni nazw. Z wnętrza Xtermu możesz, jeśli chcesz, rozpocząć VPN, a następnie rozpocząć grę. Możesz łatwo sprawdzić, czy korzystasz z VPN, wykonując następujące polecenie:który zwraca ci twoje publiczne IP. Po skonfigurowaniu VPN w xterm możesz sprawdzić, czy twój publiczny adres IP jest inny w innych oknach. Możesz otworzyć do 254 xtermów, z 254 różnymi NNS i różnymi połączeniami.
Jeśli chcesz, możesz nawet uruchomić cały pulpit w nowej sieciowej przestrzeni nazw, za pomocą
możesz go wyszukać za pomocą Alt+ Ctrl+ Fn, gdzie Fn jest jednym z F1, F2, ....-
Muszę dodać jedno zastrzeżenie: obsługa DNS wewnątrz przestrzeni nazw jest trochę błędna, bądź cierpliwy.
źródło
$ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 0.0.0.0 0.0.0.0 U 50 0 0 ppp0 0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 enp10s0 1.0.0.1 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 enp10s0 192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 enp10s0 199.168.112.120 192.168.1.1 255.255.255.255 UGH 100 0 0 enp10s0