Я хочу, чтобы одно приложение использовало 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.