Використовуйте VPN-з'єднання лише для вибраних програм


39

Я маю доступ до VPN і хочу використовувати його лише для деяких програм, а не для всіх.

Наприклад:
Якщо я підключаюсь до VPN, я хочу, щоб тільки додатки Opera та Newsbin використовували це з'єднання VPN. Усі інші програми, наприклад fe Outlook, повинні використовувати звичайне підключення до Інтернету (поки VPN підключено / відкрито).

У Афаїку це неможливо, але я не зовсім впевнений. Тому моє запитання: чи це можливо?


Відповіді:


-1

Ні, це не так. Ну не використовуючи звичайні засоби. Маршрут - це маршрутизація. Маршрутизація працює нижче за моделлю OSI. Те, що вам потрібно зробити, - це знати на рівні програми (вище вгору), щоб він міг визначати, яку програму ви використовуєте тощо. Маршрутизатори NORMAL не дозволяють вам налаштовувати маршрути на основі програм або номерів портів.

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

Підсумовуючи це, саме маршрутизатор потребує цієї функції та ваші стандартні для домашнього використання, навіть бізнес не підтримує ці функції. Тільки вдосконалена лінійка Cisco та Sonicwall пропонує ці можливості.


36

Цього можна досягти, принаймні, на Linux (і я думаю про BSD та OS X). Це можна зробити:

  • Створіть користувача exra для всього трафіку VPN.
  • Створіть додаткову таблицю маршрутизації з 1 маршрутом за замовчуванням через VPN.
  • Налаштуйте Netfilter через Iptables, щоб використовувати іншу таблицю маршрутизації для всього трафіку, що походить від конкретного ідентифікатора користувача.
  • Запустіть програми, які повинні використовувати VPN під власним користувачем. Наприклад, із "судо".

Є сценарії для виконання вищевказаних кроків тут або є інший гід тут .

Ось докладний посібник з маршрутизації передачі через VPN (використовуючи власний VPN-сервер.


Набагато простіше в Linux: Створіть мережевий простір імен, підключіть VPN до цього простору імен, запустіть програми, які повинні використовувати простір імен у VPN. Ви навіть можете запустити дві копії одного і того ж додатка, одну за допомогою VPN, а одну за допомогою прямого з'єднання.
dirkt

15

Ви можете використовувати брандмауер Windows для цього (за умови, що ви використовуєте Win 7 або Vista) - я написав посібник з цього питання

  1. Підключіться до VPN так, як зазвичай.

  2. Відкрийте Центр мереж та обміну - клацніть правою кнопкою миші на значку підключення до Інтернету на панелі завдань та виберіть "Відкрити центр мережі та спільного доступу" (див. Нижче)

  3. Ви повинні побачити (принаймні) дві мережі, перелічені в розділі "Переглянути Ваші активні мережі" - ваше VPN-з'єднання та одну під назвою "Мережа" - також ваше підключення до провайдера. Переконайтесь, що ваш VPN - це "загальнодоступна мережа", а підключення до провайдера - "домашня мережа". Якщо вам потрібно змінити будь-яке з'єднання, клацніть його і з'явиться вікно опцій (див. Нижче).

  4. Перейдіть на панель керування та натисніть Система та безпека (див. Нижче).

  5. У вікні, що з'явилося, натисніть Брандмауер Windows (див. Нижче).

  6. У вікні Брандмауер Windows натисніть Розширені налаштування на лівій панелі (див. Нижче). Примітка. Щоб внести зміни в налаштування брандмауера, ви повинні увійти як адміністратор.

  7. Ви повинні побачити вікно під назвою Брандмауер Windows із розширеною безпекою. У цьому вікні натисніть Правила вхідних даних (див. Нижче).

  8. На правій панелі ви побачите параметр для нового правила. Клацніть його (див. Нижче).

  9. У Майстрі нового правила вхідних правил (який повинен з’явитися) виконайте наступне:

    • Виберіть Програма та натисніть кнопку Далі.

    • Виберіть програму, до якої потрібно заблокувати весь трафік, крім VPN-з'єднання, і натисніть кнопку Далі.

    • Виберіть Заблокувати з'єднання.

    • Поставте галочку доменного та приватного. Переконайтесь, що публікацію не залишають без уваги.

  10. Повторіть крок 9 для вихідних правил.


11
Це насправді відповідає на питання? Так, це зупиняє програму працювати, якщо вона не знаходиться в VPN, але весь трафік все ще йде через VPN, чи не так?
Джейсон Койн

3
@pramble Тож весь трафік все ще проходить через vpn?
nsij22

Здається на роботу. Просто перевірив це ..
Фаїз

Це не виправить. Це дуже простий сценарій. Я хочу, щоб усі мої роботи стосувалися VPN (підключення до SQL Server, Slack тощо), але я хочу, щоб мій веб-браузер (Facebook, Soundcloud тощо), в основному весь трафік 80 портів, НЕ переходив через VPN . Windows смокче, якщо це неможливо.
Трайнко

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

4

Це можна зробити за допомогою мережевих просторів імен у GNU / Linux.

Ось як запустити OpenVPN і одну програму в окремому просторі імен:

Створіть мережевий простір імен мережі:

ip netns add myvpn

Запустіть інтерфейс зворотного зв'язку в просторі імен (інакше багато речей не працюють так, як очікувалося ...)

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

Створіть інтерфейси віртуальних мереж, які дозволять OpenVPN (у просторі імен) отримувати доступ до реальної мережі та налаштовуйте інтерфейс у просторі імен (vpn1) для використання інтерфейсу з простору імен (vpn0) як шлюз за замовчуванням.

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

Увімкніть маршрутизацію IPv4 та NAT для інтерфейсу в просторі імен. Оскільки мій інтерфейс за замовчуванням є бездротовим, я використовую wl + (який може відповідати wlan0, wlp3s0 тощо) в iptables для вихідного інтерфейсу; якщо ви використовуєте дротовий інтерфейс, ви, ймовірно, повинні використовувати en + (або br + для мостового інтерфейсу)

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

Налаштуйте сервер імен для використання у просторі імен

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

Майже зроблено, зараз у нас повинен бути повний доступ до мережі в просторі імен

ip netns exec myvpn ping www.google.com

Нарешті запустіть OpenVPN у просторі імен

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

Як тільки tun0 з'явиться в просторі імен, ви готові запустити потрібну програму!

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

Стаття ДЖЕРЕЛА.

У статті-джерелі також є сценарій обгортки, який ви можете адаптувати під свої потреби.


3

Я робив це в Windows. Ідея полягає в прив'язці вихідних мережевих пакетів до інтерфейсу VPN. Люди пропонують ForceBindIP для цього, але завдяки цій відповіді у мене з’явилася ідея використовувати проксі. Мінусом цього методу є те, що або ваші програми повинні мати підтримку проксі-сервера, або вам доведеться використовувати проксіфікатор (див. Тут і тут ). Переваги полягають у тому, що таким чином ви зможете обмежити використання VPN у веб-переглядачі певними доменами, використовуючи FoxyProxy або подібні додатки.

Я використовую 3proxy в режимі SOCKS і прив'язую його зовнішній інтерфейс до IP-адреси VPN. OpenVPN використовується для з'єднання VPN.

У свій .ovpn файл ( client, dev tun) я додав ці рядки:

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-nopullігнорувати маршрути, висунуті з сервера. У вашому випадку вам може знадобитися прокоментувати замість цього перенаправлення-шлюз.

route щоб додати маршрут для цього інтерфейсу, без цього рядка він не буде використовуватися, навіть якщо додаток прив’язаний до нього.

pull-filterщоб зберегти висунутий DNS, який інакше буде викинутий route-nopullразом із висунутими маршрутами. Ця опція підтримується починаючи з OpenVPN 2.4, якщо вам доведеться дотримуватися OpenVPN 2.3 (остання версія для Windows XP), вам доведеться додати два dhcp-option DNS x.x.x.xрядки із жорстко кодованими IP-адресами.

script-security 2 щоб дозволити сценарій.

up сценарій:

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 сценарій:

taskkill /f /im 3proxy.exe

Таким чином, після підключення до VPN за допомогою цього конфігурації 3proxy.exeбуде запущено процес, і на 1080порту запуститься локальний проксі-сервер SOCKS5 з можливістю роздільної здатності DNS , тепер просто налаштуйте додаток на використання localhost:1080проксі-сервера SOCKS.


Я отримую Options error: option 'route' cannot be used in this context ([PUSH-OPTIONS])і Options error: option 'redirect-gateway' cannot be used in this context ([PUSH-OPTIONS]). Тим не менш, це рішення працює. Якщо ви пропускаєте сценарій апострофа для зменшення та зменшення сценарію, скористайтеся подвійними нахилами:c:\\path\\to\\script
chx

1

Якщо ви користуєтесь Linux і використовуєте openVPN, VPNShift прекрасно працює.


Будь ласка, не публікуйте однакову відповідь на кілька запитань. Якщо однакова інформація дійсно відповідає на обидва запитання, то одне питання (як правило, нове) має бути закрите як дублікат іншого. Ви можете вказати це, проголосувавши, щоб закрити його як дублікат або, якщо у вас недостатньо репутації для цього, підняти прапор, щоб вказати, що це дублікат. В іншому випадку підгадуйте свою відповідь на це питання і не просто вставляйте однакову відповідь у декілька місць.
DavidPostill

4
Чи так важливим є факт, що це "однакова відповідь на кілька запитань" ? Питання існує, воно не (ще) позначено як дублікат, і це хороша відповідь, тому він заслуговує на існування. Дякую @thouliha 🙂.
Ронан Джошет

0

Просто відкрийте VPN через віртуальну машину.

  1. Створіть VM, потім зсередини VM ...
  2. Встановіть "вибрані" програми
  3. Налаштуйте VPN

Використовуйте «вибрані» програми з віртуального комп'ютера, а не використовуйте їх з хост-машини.

PS Вам, звичайно, потрібно надати мережевий доступ до ВМ через хост-апарат.


Це просто згадує про підхід, який уже детально описаний в інших відповідях.
fixer1234

1
@ fixer1234: Ніхто не згадав про віртуальні машини.
drowa

Чи можете ви розкласти свою відповідь на щось більш діяльне (поясніть, як)? Дивіться інші відповіді на потоці, щоб дізнатись про рівень деталізації. Просто надання натяку на напрямок, який слід рухатись, піде в коментарі, для чого потрібно трохи більше представників.
fixer1234

Спершу я спробував коментар, але система мені не дозволила, оскільки у мене менше 50 балів. Я спробую розгорнути відповідь тоді.
drowa

Це ідея, яку я придумав, і вона працює чудово, без складної конфігурації маршрутизації на стороні sysadmin.
pwned

0

Я знаю, що це така запізніла відповідь, яку я просто наткнувся, але, якщо це колись стосується когось, у мене була та сама обставина, коли я хотів запустити свій робочий трафік через VPN, але не хотів, щоб мій особистий трафік був направлений через проксі-сервери тощо. Тоді я тоді запускав Win7, але вони все ще працювали з WinXP у багатьох своїх системах. Зрештою, вони просто дали мені 2-й ПК для роботи, яка вирішила проблему (комутатор підключений до обох ПК, міг просто стрибати вперед і назад), але до цього я запустив Virtual XP, який я створив як свою робочу ОС. Я хотів би отримати VPN від вказаного ВМ для підключення до роботи, що залишило мої персональні ОС без обмежень роботи та шпигунства.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.