Использовать VPN-соединение только для выбранных приложений

39

У меня есть доступ к VPN и я хочу использовать его только для некоторых приложений, а не для всех.

Например:
если я подключаюсь к VPN, я хочу, чтобы только приложения Opera и Newsbin использовали это VPN-соединение. Все другие приложения, такие как, например, Outlook, должны использовать обычное интернет-соединение (в то время как VPN подключен / открыт).

Афайк, это невозможно, но я не совсем уверен. Итак, поэтому мой вопрос: это выполнимо?

dirkt
источник

Ответы:

-1

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

Я думаю, что это возможно, хотя. Маршрутизаторы могут видеть порты, поэтому вы можете фильтровать их по номеру порта и отправлять трафик по разным маршрутам. Я уверен, что прочитал что-то некоторое время назад с маршрутизаторами Cisco, которые могут сделать это. Хотя они не дешевы и являются бизнес-роутерами, которые требуют много настроек, и я предполагаю, что вы хотите что-то простое для домашнего использования.

Таким образом, эта функция понадобится маршрутизатору, а ваши стандартные - для домашнего использования, даже компании не поддерживают эти функции. Только передовые линии Cisco и Sonicwall предлагают эти возможности.

откатчик
источник
36

Это возможно сделать, по крайней мере, в Linux (и я думаю о BSD и OS X). Вы можете сделать это:

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

Есть сценарии для выполнения вышеуказанных шагов здесь или есть другой гид здесь .

Вот подробное руководство по маршрутизации передачи через VPN (используя принадлежащий вам сервер VPN).

Freeaqingme
источник
Гораздо проще в Linux: создать сетевое пространство имен, подключить VPN к этому пространству имен, запустить приложения, которые должны использовать пространство имен в VPN. Вы даже можете запустить две копии одного и того же приложения, одно из которых использует VPN, а другое - прямое соединение.
dirkt
15

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

  1. Подключитесь к своему VPN как обычно.

  2. Откройте Центр управления сетями и общим доступом - щелкните правой кнопкой мыши значок подключения к Интернету на панели задач и выберите «Открыть Центр управления сетями и общим доступом» (см. Ниже).

  3. Вы должны увидеть (как минимум) две сети, перечисленные в разделе «Просмотр ваших активных сетей» - ваше VPN-подключение и одну, называемую «Сеть» - также называемое вашим ISP-подключением. Убедитесь, что ваш VPN - это «Общедоступная сеть», а ваше соединение с провайдером - «Домашняя сеть». Если вам нужно изменить какое-либо соединение, щелкните по нему, и появится окно параметров (см. Ниже).

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

  5. В появившемся окне нажмите Брандмауэр Windows (см. Ниже).

  6. В окне брандмауэра Windows нажмите «Дополнительные параметры» на левой панели (см. Ниже). Примечание. Для внесения изменений в настройки брандмауэра необходимо войти в систему как администратор.

  7. Вы должны увидеть окно с названием Брандмауэр Windows в режиме повышенной безопасности. В этом окне нажмите Inbound Rules (см. Ниже).

  8. На правой панели вы увидите опцию для нового правила. Нажмите на нее (см. Ниже).

  9. В мастере New Inbound Rule (который должен появиться) сделайте следующее:

    • Выберите Program и нажмите Next.

    • Выберите программу, для которой вы хотите заблокировать весь трафик, кроме VPN-соединения, и нажмите «Далее».

    • Выберите Заблокировать соединение.

    • Тик Домен и приват. Убедитесь, что Public не отмечен.

  10. Повторите шаг 9 для исходящих правил.

pramble
источник
11
Это действительно отвечает на вопрос? Да, это мешает приложению работать, если оно не подключено к VPN, но весь трафик по-прежнему идет через VPN, не так ли?
Джейсон Койн
3
@pramble Так что весь трафик все еще проходит через VPN?
nsij22
Появляется на работу. Только что проверил ..
Faiz
Это не исправит это. Это очень простой сценарий. Я хочу, чтобы все мои связанные с работой вещи проходили через VPN (соединения с SQL Server, Slack и т. Д.), Но я хочу, чтобы мой веб-браузер (Facebook, Soundcloud и т. Д., В основном весь трафик порта 80) НЕ проходил через VPN , Windows отстой, если это невозможно.
Трийнко
@Triynko Ваш сценарий сильно отличается от сценария, который запрашивал OP. После подключения к 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

ИСТОЧНИК статья.

Также в исходной статье есть скрипт-обертка, который вы можете адаптировать под свои нужды.

PocketSam
источник
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игнорировать маршруты, отправленные с сервера. В вашем случае вам может понадобиться закомментировать redirect-gateway.

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 прекрасно работает.

thouliha
источник
Пожалуйста, не размещайте один и тот же ответ на несколько вопросов. Если одна и та же информация действительно отвечает на оба вопроса, то один вопрос (обычно более новый) следует закрыть как дубликат другого. Вы можете указать это, проголосовав, чтобы закрыть его как дубликат, или, если у вас недостаточно репутации, поднять флаг, чтобы указать, что это дубликат. В противном случае настройте свой ответ на этот вопрос, а не просто вставляйте один и тот же ответ в нескольких местах.
DavidPostill
4
Так ли важен тот факт, что это «один и тот же ответ на несколько вопросов» ? Вопрос существует, он (пока) не помечен как дубликат, и это хороший ответ, поэтому он заслуживает существования. Спасибо @ thouliha 🙂.
Ронан Жоше
0

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

  1. Создайте ВМ, затем изнутри ВМ ...
  2. Установите «выбранные» приложения
  3. Настройте VPN

Используйте «выбранные» приложения из виртуальной машины вместо того, чтобы использовать их с хост-компьютера.

PS Конечно, вам нужно предоставить сетевой доступ к виртуальной машине через хост-компьютер.

drowa
источник
Это просто упоминает подход, уже подробно описанный в других ответах.
fixer1234
1
@ fixer1234: никто не упомянул виртуальные машины.
дрова
Можете ли вы расширить свой ответ на что-то более действенное (объясните, как)? Посмотрите другие ответы в теме для понимания уровня детализации. Просто дать подсказку для направления, чтобы идти в комментарии, что требует немного больше повторений.
fixer1234
Сначала я попробовал комментарий, но система не позволяла мне, потому что у меня меньше 50 баллов. Я постараюсь расширить ответ тогда.
дрова
Это идея, которую я придумал, и она отлично работает, без какой-либо сложной конфигурации маршрутизации на стороне системного администратора.
Позор
0

Я знаю, что это слишком поздний ответ, который я только что натолкнул, но в случае, если это когда-либо будет иметь отношение к кому-то, у меня было то же обстоятельство, что я хотел пропустить свой рабочий трафик через VPN, но не хотел, чтобы мой личный трафик направлялся через их прокси-серверы и тому подобное. Я тогда работал с Win7, но они все еще работали с WinXP на многих своих системах. В конце концов они просто дали мне второй компьютер для работы, который решил проблему (коммутатор, подключенный к обоим компьютерам, мог просто перепрыгивать), но до этого я запускал Virtual XP, который я установил как свою рабочую ОС .. Я бы подключился к работе через VPN с указанной виртуальной машины, что бы освободило трафик моей персональной ОС от рабочих ограничений и шпионажа.

Уоррен Колветт
источник