Użyj połączenia VPN tylko dla wybranych aplikacji

39

Mam dostęp do sieci VPN i chcę jej używać tylko do niektórych aplikacji, a nie wszystkich.

Na przykład:
jeśli łączę się z VPN, chcę, aby tylko aplikacje Opera i Newsbin korzystały z tego połączenia VPN. Wszystkie inne aplikacje, takie jak np. Outlook, powinny korzystać z normalnego połączenia internetowego (gdy VPN jest podłączony / otwarty).

Afaik, to nie jest możliwe, ale nie jestem całkowicie pewien. Zatem moje pytanie: czy jest to wykonalne?

reż
źródło

Odpowiedzi:

-1

Nie, nie jest. Cóż, nie używam normalnych środków. Routing to routing. Routing działa niżej w dół modelu OSI. To, co musisz zrobić, to mieć świadomość na poziomie aplikacji (wyżej), aby mógł wykryć używany program itp. Routery NORMAL nie pozwalają na konfigurowanie tras na podstawie aplikacji lub numerów portów.

Myślę, że to możliwe. Routery widzą porty, dzięki czemu można je filtrować według numeru portu i wysyłać ruch z różnych tras. jestem pewien, że jakiś czas temu przeczytałem coś na temat routerów Cisco, które mogą to zrobić. Nie są tanie i są routerami biznesowymi, które wymagają dużej konfiguracji i domyślam się, że chcesz czegoś prostego do użytku domowego.

Podsumowując, to router potrzebowałby tej funkcji, a twoje standardowe torfowiska do użytku domowego, nawet firmy nie obsługują tych funkcji. Tylko zaawansowana linia Cisco i Sonicwalls oferuje te możliwości.

Mucker
źródło
36

Można to osiągnąć, przynajmniej w Linuksie (i myślę także o BSD i OS X). Możesz to zrobić przez:

  • Utwórz użytkownika exra dla całego ruchu VPN.
  • Utwórz dodatkową tabelę routingu z 1 domyślną trasą przez VPN.
  • Skonfiguruj Netfilter za pomocą Iptables, aby używał innej tabeli routingu dla całego ruchu pochodzącego od określonego ID użytkownika.
  • Uruchom aplikacje, które powinny korzystać z VPN pod własnym użytkownikiem. Na przykład z „sudo”.

Istnieją skrypty do realizacji powyższych czynności tu czy tam jest inny przewodnik tutaj .

Oto szczegółowy przewodnik dotyczący routingu Transmisja za pośrednictwem VPN (za pomocą własnego serwera VPN.

Freeaqingme
źródło
Znacznie łatwiej w systemie Linux: utwórz przestrzeń nazw sieci, podłącz VPN do tej przestrzeni nazw, uruchom aplikacje, które powinny używać przestrzeni nazw w sieci VPN. Możesz nawet uruchomić dwie kopie tej samej aplikacji, jedną za pomocą VPN, a drugą za pomocą bezpośredniego połączenia.
bezpośrednio
15

Możesz to zrobić za pomocą Zapory systemu Windows (pod warunkiem, że korzystasz z Win 7 lub Vista) - napisałem o tym przewodnik

  1. Połącz się z siecią VPN w normalny sposób.

  2. Otwórz Centrum sieci i udostępniania - kliknij prawym przyciskiem myszy ikonę połączenia internetowego na pasku zadań i wybierz „Otwórz centrum sieci i udostępniania” (patrz poniżej)

  3. Powinieneś zobaczyć (przynajmniej) dwie sieci wymienione w obszarze „Wyświetl aktywne sieci” - połączenie VPN i jedną o nazwie „Sieć” - zwaną także połączeniem ISP. Upewnij się, że twoja sieć VPN jest „siecią publiczną”, a twoje połączenie z usługodawcą internetowym jest „siecią domową”. Jeśli chcesz zmienić jedno z połączeń, kliknij je, a pojawi się okno opcji (patrz poniżej).

  4. Przejdź do Panelu sterowania i kliknij System i zabezpieczenia (patrz poniżej).

  5. W wyświetlonym oknie kliknij Zaporę systemu Windows (patrz poniżej).

  6. W oknie Zapory systemu Windows kliknij Ustawienia zaawansowane w lewym okienku (patrz poniżej). Uwaga: Musisz być zalogowany jako administrator, aby wprowadzić zmiany w ustawieniach zapory.

  7. Powinieneś zobaczyć okno zatytułowane Zapora systemu Windows z zaawansowanymi zabezpieczeniami. W tym oknie kliknij Reguły ruchu przychodzącego (patrz poniżej).

  8. W prawym okienku zobaczysz opcję nowej reguły. Kliknij (patrz poniżej).

  9. W Kreatorze nowych reguł przychodzących (który powinien się pojawić) wykonaj następujące czynności:

    • Wybierz Program i kliknij Dalej.

    • Wybierz program, na który chcesz zablokować cały ruch z wyjątkiem połączenia VPN, i kliknij przycisk Dalej.

    • Wybierz Zablokuj połączenie.

    • Zaznacz opcję Domena i Prywatny. Upewnij się, że Public nie jest zaznaczone.

  10. Powtórz krok 9 dla reguł wychodzących.

wózek dziecięcy
źródło
11
Czy to faktycznie odpowiada na pytanie? Tak, to uniemożliwia działanie aplikacji, jeśli nie ma jej w sieci VPN, ale cały ruch nadal przechodzi przez sieć VPN, prawda?
Jason Coyne,
3
@pramble Więc cały ruch nadal przechodzi przez VPN?
nsij22
Pojawia się do pracy. Właśnie to przetestowałem ..
Faiz
To nie naprawia tego. To bardzo prosty scenariusz. Chcę, aby wszystkie moje rzeczy związane z pracą przechodziły przez VPN (połączenia z serwerem SQL, Slack itp.), Ale chcę, aby moja przeglądarka internetowa (Facebook, Soundcloud itp., Zasadniczo cały ruch z portu 80) NIE przechodziła przez VPN . Windows jest do bani, jeśli nie jest to możliwe.
Triynko
@Triynko Twój scenariusz różni się znacznie od scenariusza wymaganego przez OP. Po połączeniu z VPN możesz po prostu ustawić odpowiednie trasy do swoich rzeczy związanych z pracą, tj. Użyć bramy VPN dla wszystkich podsieci lub adresów IP związanych z pracą. Trasowanie ruchu pochodzącego z określonych aplikacji jest trudniejsze do osiągnięcia.
przemawiający
4

Możesz to zrobić z sieciowymi przestrzeniami nazw w systemie GNU / Linux.

Oto jak uruchomić OpenVPN i pojedynczą aplikację w oddzielnej przestrzeni nazw:

Utwórz przestrzeń nazw sieci:

ip netns add myvpn

Uruchom interfejs pętli zwrotnej w przestrzeni nazw (w przeciwnym razie wiele rzeczy nie będzie działać zgodnie z oczekiwaniami…)

ip netns exec myvpn ip addr add 127.0.0.1/8 dev lo
ip netns exec myvpn ip link set lo up

Utwórz wirtualne interfejsy sieciowe, które pozwolą OpenVPN (w przestrzeni nazw) uzyskać dostęp do prawdziwej sieci, i skonfiguruj interfejs w przestrzeni nazw (vpn1), aby używać interfejsu poza przestrzenią nazw (vpn0) jako domyślną bramą

ip link add vpn0 type veth peer name vpn1
ip link set vpn0 up
ip link set vpn1 netns myvpn up
ip addr add 10.200.200.1/24 dev vpn0
ip netns exec myvpn ip addr add 10.200.200.2/24 dev vpn1
ip netns exec myvpn ip route add default via 10.200.200.1 dev vpn1

Włącz routing IPv4 i NAT dla interfejsu w przestrzeni nazw. Ponieważ moim domyślnym interfejsem jest interfejs bezprzewodowy, używam wl + (który może pasować do wlan0, wlp3s0 itd.) W iptables dla interfejsu wychodzącego; jeśli używasz interfejsu przewodowego, prawdopodobnie powinieneś użyć en + (lub br + dla interfejsu pomostowego)

iptables -A INPUT \! -i vpn0 -s 10.200.200.0/24 -j DROP
iptables -t nat -A POSTROUTING -s 10.200.200.0/24 -o wl+ -j MASQUERADE
sysctl -q net.ipv4.ip_forward=1

Skonfiguruj serwer nazw, aby używał go w przestrzeni nazw

mkdir -p /etc/netns/myvpn
echo 'nameserver 8.8.8.8' > /etc/netns/myvpn/resolv.conf

Prawie gotowe, teraz powinniśmy mieć pełny dostęp do sieci w przestrzeni nazw

ip netns exec myvpn ping www.google.com

Na koniec uruchom OpenVPN w przestrzeni nazw

ip netns exec myvpn openvpn --config /etc/openvpn/myvpn.conf

Gdy tun0 znajdzie się w przestrzeni nazw, jesteś gotowy, aby uruchomić żądany program!

while ! ip netns exec myvpn ip a show dev tun0 up; do sleep .5; done
ip netns exec myvpn sudo -u $MYSELF popcorntime

Artykuł ŹRÓDŁOWY.

W artykule źródłowym znajduje się również skrypt opakowania, który można dostosować do własnych potrzeb.

PocketSam
źródło
3

Zrobiłem to w systemie Windows. Chodzi o to, aby powiązać wychodzące pakiety sieciowe z interfejsem VPN. Ludzie sugerują do tego ForceBindIP , ale dzięki tej odpowiedzi mam pomysł na użycie proxy. Minusem tej metody jest to, że albo twoje aplikacje muszą mieć wsparcie proxy, albo będziesz musiał użyć proxy (patrz tutaj i tutaj ). Plusem jest to, że w ten sposób będziesz mógł ograniczyć użycie VPN w przeglądarce do określonych domen za pomocą FoxyProxy lub podobnych dodatków.

Używam 3proxy w trybie SOCKS i wiążę jego interfejs zewnętrzny z adresem IP VPN. OpenVPN służy do połączenia VPN.

W moim pliku .ovpn ( client, dev tun) dodałem następujące linie:

route-nopull
route 0.0.0.0 0.0.0.0 vpn_gateway
pull-filter ignore "dhcp-option DNS "
script-security 2
up 'c:\path\to\up.cmd'
down 'c:\path\to\down.cmd'

route-nopullaby zignorować trasy wypychane z serwera. W twoim przypadku może być konieczne skomentowanie bramy przekierowania.

route aby dodać trasę dla tego interfejsu, bez tej linii nie będzie używana, nawet jeśli aplikacja jest z nią związana.

pull-filteraby zachować wypychany DNS, który w przeciwnym razie zostanie zrzucony route-nopullwraz z wypychanymi trasami. Ta opcja jest obsługiwana począwszy od OpenVPN 2.4, jeśli musisz trzymać się OpenVPN 2.3 (najnowsza wersja dla Windows XP), dhcp-option DNS x.x.x.xzamiast tego musisz dodać dwie linie z zakodowanymi adresami IP.

script-security 2 aby umożliwić skryptowanie.

up scenariusz:

cd %~dp0
echo auth none> 3proxy-openvpn.conf
echo internal 127.0.0.1>> 3proxy-openvpn.conf
echo external %4>> 3proxy-openvpn.conf
echo socks>> 3proxy-openvpn.conf
start /b 3proxy.exe 3proxy-openvpn.conf

down scenariusz:

taskkill /f /im 3proxy.exe

Tak więc, po połączeniu się z VPN przy użyciu tej konfiguracji, 3proxy.exeproces zostanie uruchomiony i na 1080porcie zostanie uruchomiony serwer proxy SOCKS5 z ograniczeniem localhost i funkcją rozpoznawania nazw DNS , teraz wystarczy skonfigurować aplikację do korzystania z localhost:1080serwera proxy SOCKS.

użytkownik
źródło
Dostaję Options error: option 'route' cannot be used in this context ([PUSH-OPTIONS])i Options error: option 'redirect-gateway' cannot be used in this context ([PUSH-OPTIONS]). Niemniej jednak to rozwiązanie działa. Jeśli pominiesz apostrofy dla skryptu w dół i w górę, użyj podwójnych odwrotnych ukośników:c:\\path\\to\\script
chx
1

Jeśli korzystasz z systemu Linux i używasz openVPN, VPNShift działa pięknie.

thouliha
źródło
Nie zamieszczaj tej samej odpowiedzi na wiele pytań. Jeśli ta sama informacja naprawdę odpowiada na oba pytania, to jedno pytanie (zwykle nowsze) powinno zostać zamknięte jako duplikat drugiego. Możesz to wskazać, głosując, aby zamknąć go jako duplikat lub, jeśli nie masz wystarczającej reputacji, podnieść flagę wskazującą, że jest to duplikat. W przeciwnym razie dostosuj swoją odpowiedź na to pytanie i nie wklejaj tej samej odpowiedzi w wielu miejscach.
DavidPostill
4
Czy fakt, że „ta sama odpowiedź na wiele pytań” jest tak ważny? Pytanie istnieje, nie jest (jeszcze) oznaczone jako zduplikowane i jest dobrą odpowiedzią, więc zasługuje na istnienie. Dzięki @thouliha 🙂.
Ronan Jouchet,
0

Wystarczy uzyskać dostęp do VPN za pośrednictwem maszyny wirtualnej.

  1. Utwórz maszynę wirtualną, a następnie z poziomu maszyny wirtualnej ...
  2. Zainstaluj „wybrane” aplikacje
  3. Skonfiguruj VPN

Korzystaj z „wybranych” aplikacji z maszyny wirtualnej zamiast z hosta.

PS Oczywiście musisz dać dostęp sieciowy do maszyny wirtualnej za pośrednictwem komputera hosta.

drowa
źródło
To tylko wspomina podejście opisane już szczegółowo w innych odpowiedziach.
fixer1234
1
@ fixer1234: Nikt nie wspomniał o maszynach wirtualnych.
drowa
Czy potrafisz rozszerzyć swoją odpowiedź na coś bardziej praktycznego (wyjaśnij, w jaki sposób)? Zobacz pozostałe odpowiedzi w wątku, aby dowiedzieć się o poziomie szczegółowości. Samo wskazanie kierunku, w którym należy podążać, pójdzie w komentarzu, który wymaga nieco więcej powtórzeń.
fixer1234
Najpierw spróbowałem komentarza, ale system mi na to nie pozwolił, ponieważ mam mniej niż 50 punktów. Spróbuję wtedy rozwinąć odpowiedź.
drowa
To jest pomysł, który wymyśliłem i działa dobrze, bez skomplikowanej konfiguracji routingu po stronie sysadmin.
pwned
0

Wiem, że to spóźniona odpowiedź, na którą właśnie natknąłem się, ale na wypadek, gdyby była dla kogoś istotna, miałem taką samą okoliczność, w której chciałem kierować ruchem roboczym przez VPN, ale nie chciałem, aby mój ruch osobisty był kierowany przez serwery proxy i tym podobne. Więc wtedy uruchomiłem Win7, ale nadal działali WinXP na wielu swoich systemach. W końcu dali mi drugi komputer do pracy, co rozwiązało problem (skrzynka rozdzielcza podłączona do obu komputerów mogła po prostu przeskakiwać w przód iw tył), ale wcześniej uruchomiłem Virtual XP, który skonfigurowałem jako system operacyjny. Chciałbym połączyć się VPN z tą maszyną wirtualną, aby połączyć się z pracą, co spowodowałoby, że mój osobisty ruch systemu operacyjnego byłby wolny od ograniczeń pracy i szpiegowania.

Warren Colvett
źródło