30

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

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

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

7 ответов7

30

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

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

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

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

14

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1

Если вы работаете в Linux и используете openVPN, VPNShift работает прекрасно.

1

Я сделал это на 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 с опцией dhcp с жестко закодированными 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 1080:

0

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

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

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

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

0

Вы можете сделать это с помощью сетевых пространств имен в 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

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

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

0

Нет, это не так. Ну, не используя нормальные средства. Маршрутизация - это маршрутизация. Маршрутизация работает ниже модели OSI. То, что вам нужно сделать, это чтобы он знал на уровне приложения (выше), чтобы он мог определить, какую программу вы используете и т.д. НОРМАЛЬНЫЕ маршрутизаторы не позволяют настраивать маршруты на основе приложений или номеров портов.

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .