Назад | Перейти на главную страницу

Одно приложение использует VPN, а другие нет в Linux?

Я хочу, чтобы одно приложение использовало VPN-соединение, а другие - нет.

Я использую Xubuntu (таким образом, XFCE), но мне бы хотелось получить решение для командной строки / статической конфигурации, если это возможно.

Возможно ли это сделать, и если да, то как?

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

Если приложение, которое вам нужно использовать, подключается только к определенному адресу (например, сеанс RDP к рабочему компьютеру), вы можете использовать таблицу маршрутизации, чтобы заставить пункт назначения этого трафика проходить по каналу VPN, или использовать iptables как предложил.

Самый простой способ - использовать VPN, которая может выставлять себя как сервер SOCKS, тогда это может сделать любой из инструментов упаковки socks (например, tsocks).

В противном случае iptables можно было бы заставить делать это, используя маркировку пакетов, а затем используя ее для выбора пути.

Если это только один конкретный пункт назначения, это легко сделать, если VPN добавит только соответствующий маршрут для этого, а не другого.

Конечно, если бы это было всего одно приложение, я бы попытался заставить его использовать SSL, поэтому VPN вообще не нужен.

Можете попробовать поиграть с iptables owner модуль, если вы можете запустить рассматриваемое приложение от имени конкретного пользователя (man iptables, ищи owner и подумайте, что вы можете сделать, исходя из этого, у меня нет готового решения, и я не помню синтаксис, кроме того, что он использует --uid-owner параметр командной строки).

Решение, предложенное timday (иметь приложение, работающее в гостевом экземпляре с openvz, xen или virtualbox), также должно работать, но если вы можете пойти на это, вы, вероятно, можете ограничить рассматриваемый процесс конкретным пользователем.

Все ли ресурсы, необходимые пользовательскому приложению, находятся в одной сети (подсети)? Если бы вы могли самостоятельно разместить ресурсы, необходимые для вашего пользовательского приложения, в новой версии, тогда использовать транкинговую VPN было бы легко. В качестве единственного ресурса по ссылке VPN будет настраиваемое приложение. Таким образом, только трафик для этого приложения будет проходить через VPN, а весь другой трафик будет выходить в открытом виде.

Если вы используете IPSEC, у вас должна быть возможность добавить политику безопасности, которая соответствует определенному порту TCP или UDP. Для Xubuntu вам нужно будет установить ipsec-tools и поставить что-то вроде

spdadd 10.1.1.0/24 10.2.2.0/24[4000] tcp -P in ipsec esp/tunnel//require;

в /etc/ipsec-tools.conf. Приведенный выше (полностью выдуманный, непроверенный) пример принудительно передает трафик на порт TCP 4000 через VPN.