Использовать VPN-соединение только для выбранных приложений
У меня есть доступ к VPN и я хочу использовать его только для некоторых приложений, а не для всех.
Например:
Если я подключаюсь к VPN, я хочу, чтобы только приложения Opera и Newsbin использовали это VPN-соединение. Все другие приложения, такие как, например, Outlook, должны использовать обычное интернет-соединение (в то время как VPN подключен / открыт).
Афайк, это невозможно, но я не совсем уверен. Итак, поэтому мой вопрос: это выполнимо?
12 ответов
Нет, это не так. Ну, не используя обычные средства. Маршрутизация - это маршрутизация. Маршрутизация работает ниже модели OSI. Вам нужно, чтобы он был осведомлен на уровне приложения (выше), чтобы он мог определить, какую программу вы используете и т. Д. Маршрутизаторы NORMAL не позволяют настраивать маршруты на основе приложений или номеров портов.
Я думаю, что это возможно, хотя. Маршрутизаторы могут видеть порты, поэтому вы можете фильтровать их по номеру порта и отправлять трафик по разным маршрутам. Я уверен, что прочитал что-то некоторое время назад с маршрутизаторами Cisco, которые могут сделать это. Хотя они не дешевы и являются бизнес-роутерами, которые требуют много настроек, и я предполагаю, что вы хотите что-то простое для домашнего использования.
Таким образом, эта функция понадобится маршрутизатору, а ваши стандартные - для домашнего использования, даже компании не поддерживают эти функции. Только передовые линии Cisco и Sonicwall предлагают эти возможности.
Это возможно сделать, по крайней мере, в Linux (и я думаю о BSD и OS X). Вы можете сделать это:
- Создайте пользователя exra для всего трафика VPN.
- Создайте дополнительную таблицу маршрутизации с 1 маршрутом по умолчанию через VPN.
- Сконфигурируйте Netfilter через Iptables, чтобы использовать другую таблицу маршрутизации для всего трафика, исходящего из определенного идентификатора пользователя.
- Запустите приложения, которые должны использовать VPN под своим собственным пользователем. Например, с помощью "sudo".
Здесь есть сценарии для выполнения вышеупомянутых шагов, или здесь есть другое руководство.
Вот подробное руководство по маршрутизации передачи через VPN (используя принадлежащий вам сервер VPN).
Вы можете использовать брандмауэр Windows для этого (при условии, что вы используете Win 7 или Vista) - я написал руководство по этому
Подключитесь к своему VPN как обычно.
Откройте Центр управления сетями и общим доступом - щелкните правой кнопкой мыши значок подключения к Интернету на панели задач и выберите "Открыть Центр управления сетями и общим доступом" (см. Ниже).
Вы должны увидеть (как минимум) две сети, перечисленные в разделе "Просмотр ваших активных сетей" - ваше VPN-подключение и одну, называемую "Сеть" - также называемое вашим ISP-подключением. Убедитесь, что ваш VPN - это "Общедоступная сеть", а ваше соединение с провайдером - "Домашняя сеть". Если вам нужно изменить какое-либо соединение, щелкните по нему, и появится окно параметров (см. Ниже).
Перейдите в Панель управления и нажмите Система и безопасность (см. Ниже).
В появившемся окне нажмите Брандмауэр Windows (см. Ниже).
В окне брандмауэра Windows нажмите "Дополнительные параметры" на левой панели (см. Ниже). Примечание. Для внесения изменений в настройки брандмауэра необходимо войти в систему как администратор.
Вы должны увидеть окно с названием Брандмауэр Windows в режиме повышенной безопасности. В этом окне нажмите Inbound Rules (см. Ниже).
На правой панели вы увидите опцию для нового правила. Нажмите на нее (см. Ниже).
В мастере New Inbound Rule (который должен появиться) сделайте следующее:
Выберите Program и нажмите Next.
Выберите программу, для которой вы хотите заблокировать весь трафик, кроме VPN-соединения, и нажмите "Далее".
Выберите Заблокировать соединение.
Тик Домен и приват. Убедитесь, что Public не отмечен.
Повторите шаг 9 для исходящих правил.
Вы можете сделать это с сетевыми пространствами имен в 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
Также в исходной статье есть скрипт-обертка, который вы можете адаптировать под свои нужды.
Я сделал это на 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
процесс будет запущен и прокси-сервер SOCKS5 с локальным ограничением с возможностью разрешения DNS будет работать на 1080
порт, теперь просто настройте ваше приложение для использования localhost:1080
SOCKS прокси.
Просто получите доступ к VPN через виртуальную машину.
- Создайте виртуальную машину, затем изнутри виртуальной машины...
- Установите "выбранные" приложения
- Настройте VPN
Используйте "выбранные" приложения из виртуальной машины вместо того, чтобы использовать их с хост-компьютера.
PS Конечно, вам нужно предоставить сетевой доступ к виртуальной машине через хост-компьютер.
Если вы используете Linux и используете openVPN, VPNShift прекрасно работает.
В Windows вы можете использовать VPN, поддерживающий «разделенное туннелирование».
Одним из них является Proton VPN (доступна бесплатная версия, позволяющая вам выбирать, какие приложения вы хотите или не хотите получать доступ к VPN).
В противном случае просто погуглите: vpn с раздельным туннелированием и многие появятся.
Теперь есть более простое решение для Linux, которого не было в то время, когда были написаны многие из этих ответов, но его определенно стоит разместить здесь. Это программа под названием Vopono.
Он работает путем создания временных сетевых пространств имен на вашем компьютере для выполнения определенной команды. Как только программа завершит работу, она избавится от пространства имен.
Он напрямую поддерживает VPN, такие как Mullvad, AzireVPN, MozillaVPN, TigerVPN, ProtonVPN, iVPN, NordVPN и PIA, но также может поддерживать пользовательские файлы конфигурации для протоколов Wireguard, OpenVPN, OpenConnect и OpenFortiVPN.
Пример использования с пользовательским файлом конфигурации:
vopono exec --custom vpn_config.ovpn --protocol openvpn "command"
Более подробную информацию об использовании можно найти здесь.
Для справки, наткнулся на это приложение, которое предлагает решение ситуации: https://github.com/TunnlTo/desktop-app
(Нет рекомендаций, не тестировалось и т. д., просто к вашему сведению)
Я знаю, что это слишком поздний ответ, который я только что натолкнул, но в случае, если это когда-либо будет иметь отношение к кому-то, у меня было то же обстоятельство, что я хотел пропустить свой рабочий трафик через VPN, но не хотел, чтобы мой личный трафик передавался через прокси-серверы и тому подобное. Я тогда работал с Win7, но они все еще работали с WinXP на многих своих системах. В конце концов они просто дали мне второй ПК для работы, который решил проблему (коммутатор, подключенный к обоим компьютерам, мог просто перепрыгивать), но до этого я запускал Virtual XP, который я установил как свою рабочую ОС... Я бы подключился к работе через VPN с указанной виртуальной машины, что бы освободило трафик моей персональной ОС от рабочих ограничений и шпионажа.
Хотя ответ уже запоздал, я думаю, что все же имеет смысл оставить его здесь. И да, это возможно в Windows, но только если у вас есть VPN-клиент, поддерживающий это. Недавно я реализовал один для Wireguard VPN поверх драйвера фильтра NDIS и реализации BoringTun WireGuard в Rust. Вы можете получить его по адресу https://www.wiresock.net/wiresock-vpn-client/.